Wie kann ich zwei Videodateien mit ffmpeg zusammenfügen?

Wie kann ich zwei Videodateien mit ffmpeg zusammenfügen?

Ich habe mit diesem Befehl einige Zeitraffervideos aus Fotos erstellt:

ffmpeg -i IMG_%03d.JPG -s 1440x1080 -sameq video.MP4

Und es hat super funktioniert. Jetzt möchte ich mehrere dieser Zeitraffervideos zu einem einzigen, längeren Video zusammenfügen (alle Eingabevideos haben genau das gleiche Format). Ich habe es bereits mit Folgendem versucht:

cat video1.MP4 video2.MP4 > stitch.MP4

aber die Ausgabe ist letztendlich gleich video1.MP4

Ich möchte das Video weder transkodieren noch irgendwelche Parameter ändern, sondern nur eine End-to-End-Zusammenfügung, als wären die Videos auf einer Playlist.

Danke!

Antwort1

Mit einer aktuellen Version von ffmpeg können Sie den Concat-Demuxer verwenden. Erstellen Sie eine Datei namens inputs.txt, die Zeilen wie diese enthält:

file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
file 'input4.mp4'

Mit einer Bash-Shell können Sie eine For-Schleife verwenden, um die Datei wie folgt zu erstellen:

rm inputs.txt
for f in input{1..4}.mp4; do echo "file '$f'" >> inputs.txt; done

Dann,

ffmpeg -f concat -i inputs.txt -c copy output.mp4

Da verwendet wird -c copy, ist dies völlig verlustfrei.

Antwort2

Die Ausgabe entspricht nicht video1.mp4, aber die Kopf- und Fußzeilen für das Video beginnen und enden bei video1.mp4, sodass Ihr Player nicht in video2.mp4 wechselt. Vorausgesetzt, die Videos haben dieselbe Bitrate/den gleichen Codec usw.:

cat video1.MP4 video2.MP4 | ffmpeg -y -i - -genpts -vcodec copy -acodec copy stitch.MP4

Bedenken Sie, dass dies nicht unbedingt die beste Methode ist (es wäre besser, alle Zeitraffer gleichzeitig in einem Video zu machen), denn wenn der Codec verlustbehaftet ist, werden SieGenerationsverlust.

Antwort3

Ich weiß, Sie haben ffmpeg erwähnt, aber ich hatte gute Erfahrungen mit mp4box, wenn es darum ging, Dateien einfach zusammenzufügen. Sie können es hier herunterladen.

http://gpac.wp.mines-telecom.fr/mp4box/

Hier ist das Befehlszeilenbeispiel:

mp4box -cat <file> -cat <file> dest.mp4

verwandte Informationen