Ich habe ca. 10.000 PNG-Dateien, die ich gerne in ein Video umwandeln möchte.
Ausim Internet umsehenIch bin auf ffmpeg gestoßen und habe mich entschieden, den folgenden Befehl auszuführen:
ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4
Als Erstes führte die Ausführung dieses Befehls zu der Eingabeaufforderung File 'img/00001.png' already exists. Overwrite ? [y/N]
, die mir ein wenig seltsam vorkommt, da der Befehl, soweit ich weiß, die Bilder selbst nicht ändern, sondern nur eine neue video.mp4
Datei erstellen soll?
Wie auch immer, ich wollte nicht y
10k-mal drücken, also habe ich meine Bilder gesichert und den Befehl geändert:
ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 -y video.mp4
Nun scheint das Programm für 254 Bilder einwandfrei zu laufen, gibt dann aber den folgenden Fehler aus:
[png @ 0x7facf0503800] ff_frame_thread_encoder_init failed
Error initializing output stream 255:0 -- Error while opening encoder for output stream #255:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
Falls es nützlich ist, habe ich hinzugefügt:vollständige Protokolldatei hierUnd, um das Ganze noch zu verstärken:hier ein Beispiel aus den BildernIch möchte konvertieren. Außerdem,hier ist der berüchtigte Rahmen 255, woraufhin das Programm abstürzt.
Antwort1
ffmpeg erfordert, dass jede Eingabedatei ein eigenes -i
Argument hat. Wenn Sie also ausführen -i img/*
, erweitert Ihre Shell den Platzhalter in eine Reihe von Bildern, die ffmpeg wiederum nur alseinsEingabebild, aber 10k (minus eins) Ausgabebilder. Mit anderen Worten, ffmpeg wird sehen:
ffmpeg … -i img/00000.png img/00001.png …
was bedeutet, dass es 00000.png
als Eingabe und 00001.png
als Ausgabe verwendet werden soll. Tatsächlich werden Sie alle Ihre Dateien mit dem Inhalt von 00001.png
überschrieben haben . Ich hoffe also, dass Sie eine Sicherungskopie davon haben.00254.png
00000.png
Nachdem Sie Ihre ursprünglichen Eingabedateien wiederhergestellt haben, überprüfen Sie Ihren Befehl erneut. Sie haben das %d
Platzhalterzeichen nicht verwendet, um Bildnummern anzugeben (was in der verlinkten Antwort gezeigt wurde). Verwenden Sie also:
ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4
Weitere Informationen finden Sie imAnleitung zur DiashowDort finden Sie auch verschiedene Optionen zum Angeben der Liste der Eingabedateien (z. B. über ein Glob-Muster, ähnlich dem, was Sie versucht haben).
Antwort2
Dudürfenauch Asterisk-Platzhalter verwenden, aber die Dateiliste muss in Anführungszeichen gesetzt werden, um die Erweiterung gemäß der Antwort von zu verhindern@slhck, und Sie benötigen eine zusätzliche Option, pattern_type
um es anzuweisen, Globbing zu verwenden.
ffmpeg -f image2 -r 25 -pattern_type glob -i 'img/*.png' -vcodec libx264 -crf 22 video.mp4