
Ich versuche, das Video background.mp4 abzuspielen, während ein anderes Video overlay.mp4 in einem kleinen Rechteck über das Hintergrundvideo gelegt wird. Das Overlay-Video sollte verzögert werden.
Durch die Suche nach ffmpeg habe ich den folgenden Befehl erstellt:
ffmpeg -i background.mp4
-i overlay.mp4
-filter_complex "[1]setpts=PTS-STARTPTS+162/TB, scale=512:288 [over];
[0][over] overlay=748:412 [outv];
[1:a]adelay=162000|162000 [audio];
[0:a][audio] amix [outa]"
-map "[outv]"
-map "[outa]"
-codec:v libx264
-crf 21
-bf 2
-flags +cgop
-pix_fmt yuv420p
output.mp4
Dadurch werden die Videos erfolgreich wie gewünscht zusammengefügt. Allerdings ruckelt das überlagerte Videoeine Menge(bis zu 30 Sekunden langes Einfrieren), während das Hintergrundvideo einwandfrei abgespielt wird.
Die Konsole gibt viele Meldungen aus, die besagen: „Pufferwarteschlangenüberlauf, Abbruch.“
Ich habe online danach gesucht und herausgefunden, dass ich einen FIFO-Puffer hinzufügen sollte. Also habe ich Folgendes versucht:
ffmpeg -i background.mp4
-i overlay.mp4
-filter_complex "[1]fifo, setpts=PTS-STARTPTS+162/TB, scale=512:288 [over];
[0][over] overlay=748:412 [outv];
[1:a]adelay=162000|162000 [audio];
[0:a][audio] amix [outa]"
-map "[outv]"
-map "[outa]"
-codec:v libx264
-crf 21
-bf 2
-flags +cgop
-pix_fmt yuv420p
output.mp4
Dieser Befehl wird jedoch nie erfolgreich beendet. Nach etwa 60 Sekunden Videozeit wird er mit der bloßen Meldung „Killed“ abgebrochen.
Ich gehe davon aus, dass dies an einem Speichermangel liegt, obwohl ich mir da nicht sicher bin. Was mache ich jetzt? Irgendeine Idee, wie man die Videos erfolgreich überlagern kann, sodass das überlagerte Video (zumindest ungefähr) die gleiche Bildrate wie das Hintergrundvideo hat?