Lass FFmpeg laufen

452
Vincent Bavaro

Guten Morgen, ich habe ein Skript, das jede Sekunde 2 Bilder in einem Ordner erzeugt, und ich möchte, dass ffmpeg sie in eine Reihe von mpeg-4-Videos mit einer Dauer von 5 Sekunden konvertiert und das 2 Bilder pro Sekunde (10 Frames insgesamt) anzeigt. Das Problem ist, dass nachdem ich das Skript gestartet habe und nachdem ich ffmpeg ausgeführt habe, die Videos mit den Bildern verarbeitet werden, die es direkt nach dem Ausführen des Befehls abfängt, und dass es dann geschlossen wird. Ich habe es auch mit dem Befehl -re versucht und nichts passiert. Wie lasse ich ffmpeg laufen und konvertiere die Bilder live, während sie generiert werden? Hier ist der Code, den ich verwende:

ffmpeg -re -framerate 2 -s 1920x1200 -i C:\Desktop\input\%05d.bmp -vcodec libx264 -pix_fmt yuv420p -map 0 -segment_time 5 -g 5 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*5)" -f segment C:\Desktop\output\%05d.mp4 

Alles, was ich möchte, ist, ffmpeg einmal auszuführen und es funktionieren zu lassen und erst zu schließen, wenn die Generierung abgeschlossen ist.

0

2 Antworten auf die Frage

1
Gyan

Pipe die Bilder. Beim Lesen von Bildern aus Dateien identifiziert ffmpeg das letzte Bild in der Sequenz während der Initialisierung und liest bis zu diesem Bild.

cat images | ffmpeg -f image2pipe -re -framerate 2 -i - -vcodec libx264 ... 

Edit : Es ist nicht überraschend, dass cat auch die Eingaberolle bei der Initialisierung festlegt. Die folgende Methode funktioniert jedoch für mich.

Bitten Sie das Skript, die neuen Bilder an eine Blob-Datei anzuhängen

dh cat new-image >> all-images

während ffmpeg anruf ist

ffmpeg -f image2pipe -re -framerate 2 -i all-images -vcodec libx264 ... 

Es ist sehr wichtig, dass die Geschwindigkeit Ihrer neuen Bilderzeugung und Anfügung gleich oder schneller als die Lesegeschwindigkeit von ffmpeg ist.

Ich habe Windows, Katze funktioniert nicht. Ich habe es mit type versucht, aber es funktioniert auch nicht. Vincent Bavaro vor 5 Jahren 0
Holen Sie sich [Gow] (https://github.com/bmatzelle/gow/wiki) und Sie haben Katze. Gyan vor 5 Jahren 0
got gow, es gibt diesen Fehler: C: \ Desktop \ input \% 05d.bmp: Keine solche Datei oder Verzeichnis Vincent Bavaro vor 5 Jahren 0
`cat * .bmp` funktioniert hier. Gyan vor 5 Jahren 0
es gibt mir den gleichen fehler. Vielleicht habe ich meinen Befehl falsch geändert? Im Grunde geht es jetzt so: cat * .bmp | ffmpeg -f image2pipe -re -framerate 2 -s 1920x1200 -i C: \ Desktop \ input \% 05d.bmp ... Vincent Bavaro vor 5 Jahren 0
Der Befehl ffmpeg sollte wie in meiner Antwort gezeigt sein. Gyan vor 5 Jahren 0
Dies geschieht, wenn ich es ausführen lasse: C: \ WINDOWS \ system32> cat * bmp | ffmpeg -f image2pipe -re -framerate 2 -i - -vcodec libx264 -vf fps = 2 -pix_fmt yuv420p -map 0 -segment_time 5 -g 5 -sc_threshold 0 -force_key_frames "expr: gte (t, n_forced * 5)" - f Segment C: \ Desktop \ output \% 05d.mp4 cat: * bmp: Ungültiges Argument `und` pipe :: Ende der Datei` am Ende. Vincent Bavaro vor 5 Jahren 0
Es ist "cat * .bmp". Achte auf den Punkt. Gyan vor 5 Jahren 0
gleiche Fehlermeldung, cat: * .bmp: Ungültiges Argument. Muss ich einen neuen Ordner anlegen? Wie konnte FFmpeg den Quellpfad kennen, ohne dass ich ihn angegeben habe? Vincent Bavaro vor 5 Jahren 0
Warte eine Minute. Warum laufen Sie cat von C: \ Windows \ system32 aus? Gyan vor 5 Jahren 0
Eine Anleitung zu gow hat mir gesagt, dass ich normalerweise die Eingabeaufforderung ausführen sollte und Befehle hinzugefügt werden sollten ... Vincent Bavaro vor 5 Jahren 0
cd zu C: \ Desktop \ input \ und führen Sie es dort aus. Gyan vor 5 Jahren 0
Ich habe es dort ausprobiert, es gibt mir keinen Fehler aber es verhält sich wie ohne Pfeife. FFmpeg wird nicht mehr ausgeführt, während Skripts weiterhin Bilder generieren. Außerdem haben generierte Videos nicht meine Bilder, sondern nur falsch erzeugte graue Bilder mit einigen schwarzen Rahmen. Vincent Bavaro vor 5 Jahren 0
0
harrymc

Um sicherzustellen, dass ffmpeg neue Bilder hinzufügt, müssen diese von stdin abgerufen werden. Sie müssen ein Programm oder ein Skript schreiben, das neue Bilder fügt, sobald sie ankommen.

Beispiele siehe:

Diese Programme erfordern einige Änderungen, um sie an Ihre Bedürfnisse anzupassen, sie sind jedoch ein guter Ausgangspunkt.

Ich werde sie ausprobieren, aber ich hätte mir eine eingebaute ffmpeg-Lösung gewünscht, weil das Hinzufügen von Dateien zum stdin den Prozess verlangsamen würde. Ich dachte, der Befehl -re hätte so funktionieren sollen? Vincent Bavaro vor 5 Jahren 0