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