Ist es möglich ffmpeg
, ein Video aus einer Reihe von Sequenzen zu erstellen, bei denen die Zahl nicht bei Null beginnt?
Ich habe beispielsweise einige Bilder [test_100.jpg, test_101.jpg, test_102.jpg, ..., test_200.jpg] und möchte sie in ein Video konvertieren. Ich habe den folgenden Befehl ausprobiert, aber er hat nicht funktioniert (die Zahl sollte anscheinend bei Null beginnen):
ffmpeg -i test_% d.jpg -vcodec mpeg4 test.avi
Irgendwelche Ratschläge?
Antworten:
Es ist nicht erforderlich, Dateien umzubenennen, wenn Sie den
-start_number
Schalter wie folgt verwenden :wo
n
ist der Beginn der Sequenz von Standbildern.Beachten Sie, dass dies so lange funktioniert, wie die Sequenz nach dem Start nicht unterbrochen wird. Wenn Lücken vorhanden sind und Sie möchten, dass alle Standbilder enthalten sind, müssen Sie möglicherweise neu nummerieren, um die Lücken zu schließen.
Es gibt einige andere Schalter, die Sie möglicherweise nützlich finden.
Ich verwende den folgenden Einzeiler, um eine langsamere Bildrate zu erzielen, die Bilder zu komprimieren und ein kleineres Video zu erhalten:
Die
-r 3
Option setzt die Bildrate des resultierenden Videos auf 3 Bilder pro Sekunde, so dass ich jedes für einen kurzen Zeitraum noch sehen kann. Die-s
Option skaliert die Bilder auf die gewünschte Auflösung, um die Größe des resultierenden Videos zu verwalten.(In der Windows - Shell, ersetzen
-i Imgp%04d.jpg
mit-i "Imgp%%04d.jpg"
. Kredit für diese Mike Fitzpatrick https://superuser.com/a/344178/153054 )quelle
Sie können dieses Code-Snippet unten verwenden:
quelle
Ein Beispielskript finden Sie in der ffmpeg-Dokumentation :
quelle
cp
wenn Verknüpfung funktioniert nicht, wenn Ihr Dateisystem unterstützt escp --reflink=auto
viel bessere Geschwindigkeit / Raumnutzung erreichen wird.Aus den Dokumenten von ffmpeg:
Verwenden eines Glob-Musters
ffmpeg unterstützt auch bash-artiges Globbing (* steht für eine beliebige Anzahl beliebiger Zeichen).
Dies ist nützlich, wenn Ihre Bilder sequentiell sind, jedoch nicht unbedingt in numerischer Reihenfolge wie in den vorherigen Beispielen.
Solange Ihre Dateien sortiert sind, sollte die Verwendung des
-pattern_type glob
Schalters für Sie funktionieren.quelle
Soweit ich weiß, können Sie die Sequenz nicht in zufälligen Zahlen starten (ich erinnere mich nicht, ob Sie sie bei 0 oder 1 beginnen sollten). Außerdem kann es keine Lücken geben. Wenn dies der Fall ist, geht ffmpeg davon aus, dass die Sequenz vorbei ist und Stoppen Sie das Hinzufügen weiterer Bilder.
Denken Sie auch daran, wie in den Kommentaren zu meiner Antwort angegeben, dass Sie die Breite Ihres Index angeben müssen. Mögen:
image% 03d.jpg
Und wenn Sie einen% 03d-Indextyp verwenden, müssen Sie Ihre Dateinamen mit 0 auffüllen, z.
image001.jpg image002.jpg image003.jpg
usw.
quelle
Ich stimme Francisco zu, aber als Workaround können Sie einfach ein schnelles Skript schreiben, um symbolische Links zu den Dateien mit den von ffmpeg benötigten Folgenummern zu erstellen. Das Skript könnte dann ffmpeg aufrufen und dann die Verknüpfungen entfernen oder die Dateien wieder an ihren ursprünglichen Speicherort verschieben.
quelle
Sieh nach oben
quelle
Ich weiß, dass dies eine alte Frage ist, aber ich bin auf Google gestoßen, als ich nach der gleichen Antwort gesucht habe. Keine der Antworten hier hat mich vollständig zufriedengestellt, also habe ich mehr gesucht und gelesen, und dies ist ein Befehl, den ich für mein eigenes Problem entwickelt habe.
Der Grund, warum ich einen Befehl wie diesen verwenden würde, ist ...
quelle
-start_number
ist alles, was benötigt wird.Ich habe den FLV-Encoder verwendet, da mein Video in einem Flash-Player (Jwplayer) abgespielt wurde.
ffmpeg -i% d.jpg -vcodec flv test.flv
quelle
Aus der Dokumentation geht hervor , dass Sie einfach Folgendes verwenden können: *
Um die Qualität zu verbessern, kann die Rate / fps wichtig sein (z. B. zuerst eine sehr niedrige / hohe Bildrate festlegen und dann von einem zweiten Filter übergehen, der das Zeitlupenvideo normalisiert?).
quelle
In meinem Fall war es aufgrund der Zahlen in den Dateien etwas kniffliger. So sehen meine Bilder aus:
Und hier ist der Befehl, den ich verwendet habe:
quelle
Sie können dies tun mit
convert -morph
:Wenn Sie verwenden möchten
ffmpeg
, habe ich verwendet10*PTS
Wobei das ffmpeg anweist, es 10 mal zu verlangsamen. Sie können dort auch Brüche eingeben, um die Geschwindigkeit zu erhöhen.quelle
-pattern_type glob
konkrete Beispiele mit AudioDiese Option wurde unter https://superuser.com/a/782520/128124 erwähnt. Hier sind jedoch einige konkrete Beispiele für ihre Verwendung, einschließlich des Hinzufügens von Audio zum ausgegebenen Video.
Diashow-Video mit einem Bild pro Sekunde
Fügen Sie etwas Musik hinzu und unterbrechen Sie die Audiowiedergabe, wenn die Bilder enden:
Hier sind zwei Demos auf YouTube:
Sei ein Hippie und nutze das von Theora patentfreie Videoformat :
Ihre Bilder sollten natürlich alphabetisch sortiert sein, normalerweise wie folgt:
und so weiter.
Siehe auch: http://unix.stackexchange.com/questions/68770/converting-png-frames-to-video-at-1-fps/339399#339399
Normalgeschwindigkeitsvideo mit einem Bild pro Bild bei 30 Bildern pro Sekunde
So sieht es aus:
GIF generiert mit: https://askubuntu.com/questions/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
Fügen Sie etwas Audio hinzu:
Ergebnis: https://www.youtube.com/watch?v=HG7c7lldhM4
Konvertieren Sie eine Musikdatei in ein Video mit einem festen Bild für den YouTube-Upload
Beantwortet bei: Wie konvertiere ich MP3 in das von YouTube zugelassene Videoformat?
Erhalten Sie einige synthetische Testeingabebilder
Dies sind die Testbilder, die ich in dieser Antwort verwendet habe:
Bilder generiert mit: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292
Es ist cool zu beobachten, wie stark das Video die Bildsequenz besser komprimiert als ZIP, da es mit speziellen Algorithmen über Frames hinweg komprimiert werden kann:
opengl-rotating-triangle.mp4
: 340Kopengl-rotating-triangle.zip
: 7,3MÜber die CLI-Optionen
Beachten Sie jedoch, dass dies trotz des Namens
-glob
nicht so allgemein ist wie Shell-Glob-Muster, z. B .: failed-i '*'
: https://trac.ffmpeg.org/ticket/3620 (anscheinend, weil der Dateityp von der Erweiterung abgeleitet wird).-r 30
macht das-framerate 1
Video 30 FPS, um Fehler in Playern wie VLC für niedrige Frameraten zu überwinden: https://stackoverflow.com/questions/19267443/playback-issues-in-vlc-with-low-fps-video-from-images-using- ffmpeg / 41797724 # 41797724 Daher wird jeder Frame 30-mal wiederholt, um den gewünschten Effekt von 1 Bild pro Sekunde beizubehalten .Nächste Schritte
Sie möchten auch:
Schneiden Sie etwas Audio auf die Videolänge zu: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
füge das geschnittene Audio hinzu: Wie man Audio- und Videodateien in ffmpeg zusammenführt
TODO: Erfahren Sie, wie Sie mehrere Audiodateien über die Befehlszeile ausschneiden und in das Video verketten können:
Getestet am
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Literaturverzeichnis
quelle