Ich versuche, ein Video über ein Bild zu legen. Das Problem, mit dem ich konfrontiert bin, ist, dass die gewünschte Videodauer länger ist als die Dauer meines Eingabevideos.
Um dieses Problem zu lösen, versuche ich, eine Streaming-Schleife zu generieren und die gewünschte Dauer mit dem Parameter "t" fest zu codieren.
Ich verwende den setpts-Filter, um sicherzustellen, dass mein Containerformat (.mp4) vergangene Frames akzeptiert, indem ich ihre Zeitstempel umschreibe:
ffmpeg -loop 1 -i image.jpg -stream_loop -1 -i video.mov -filter_complex "[1:v]setpts=N/(FRAME_RATE*TB)[1v];[0:v][1v]overlay=x=main_w*0.44:y=main_h*0.33[out]" -map [out] -t 00:00:15 out.mp4
Der Befehl lautet also wie folgt:
Jeder Frame durchläuft den Filter:
Dies sollte fortgesetzt werden, bis eine Datei mit 00:00:15 Sekunden erstellt wird.
Dieser Befehl generiert diese Datei, aber die Datei video.mov wird nicht geloopt, sobald die erste Schleife beendet ist, wird der letzte Frame wiederholt, bis der Ausgabefilm endet.
FYI: Ich habe noch ein paar Tests gemacht:
ffmpeg -stream_loop -1 -i movie.mov -filter_complex "[0:v]setpts=N/(FRAME_RATE*TB)[out]" -map [out] -t 00:00:30 output.mp4
Dies funktioniert gut, es erzeugt einen Film mit einer Dauer von 30 Sekunden, wobei der Eingabefilm geloopt wird, um den Ausgabefilm zu füllen
auf der anderen Seite schwer, wenn ich eine weitere Eingabedatei hinzufüge:
ffmpeg -stream_loop -1 -i movie.mov -loop 1 -i image.jpg -filter_complex "[0:v]setpts=N/(FRAME_RATE*TB)[out]" -map [out] -t 00:00:30 output.mp4
Dadurch wird kein Film mit 30 Sekunden erstellt, obwohl einer der Eingänge nie verwendet wird. ffmpeg erstellt eine Filmdatei mit nur einer Schleife von movie.mov und der gleichen Länge von movie.mov.
Irgendwelche Ratschläge bitte?
Danke sehr!
Ze
Versuchen Sie es stattdessen mit dem Filmfilter
ffmpeg -loop 1 -i image.jpg -filter_complex \
"movie=video.mov:loop=999,setpts=N/(FRAME_RATE*TB)[1v]; \
[0:v][1v]overlay=x=main_w*0.44:y=main_h*0.33[out]" \
-map [out] -t 00:00:15 out.mp4
Benutzer361526
Gyan