Vor kurzem musste ich mehrere mp4 Dateien zu einer großen zusammen führen. Die mp4 Dateien mussten nicht bearbeitet werden und enthielten alle den selben Codec und auch die Parameter waren die selben. Mit FFmpeg konnte ich das Problem sehr einfach lösen.

ffmpeg -safe 0 -f concat -i mylist.txt -c copy output_file.mp4

Die Option concat fügt die einzelne Dateien, die in mylist.txt definiert sind, zusammen. Die safe Option wird nur bei absoluten Pfaden benötigt.

# this is a comment
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

Die mylist.txt muss dieses Format enthalten. Die Datei und der Pfad in einfachen Anführungszeichen und davor „file“.

Da es etwas nervig sei kann jedesmal eine extra Datei anzulegen kann man die mylist.txt Inputdatei auch dynamisch erzeugen. Es ist darauf zu achten das man sich im selben Verzeichnis befindet wie die mp4 Dateien. Es wäre kein Problem die neue mp4 Datei von FFmpeg im selben Verzeichnis anlegen zu lassen.

ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" *.mp4) -c copy ../output.mp4

Wenn die Dateien unterschiedliche Codec Parameter haben sollte man nicht mit copy arbeiten. Stattdessen müssen die Dateien dann mit neuen Parametern neu encodiert werden. Gerade bei x264 passiert es häufig, dass ein einfaches copy nicht funktioniert.  In der Output-Datei ist alles ab der ersten Input-Datei unbrauchbar. Wenn das passiert muss alles mit der concat Option neu encodiert werden. Dazu einfach copy durch die gewünschten Codec Optionen austauschen.

Zum Beispiel

ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" *.mp4) -c:v libx264 -crf 22 -c:a aac -b:a 128k ../output.mp4
Mit FFmpeg mehrere Dateien zusammenführen