Der beste Weg, dies derzeit zu tun, ist der concat Demuxer . Erstellen Sie zunächst eine Datei, inputs.txt
die wie folgt formatiert ist:
file '/path/to/input1.mp4' file '/path/to/input2.mp4' file '/path/to/input3.mp4'
Dann führe einfach diesen ffmpeg Befehl aus:
ffmpeg -f concat -i inputs.txt -c copy output.mp4
Siehe auch Verkettung in ffmpeg
FAQ .
Ich behalte hier Folgendes zum Nutzen aller, die ältere Versionen von ffmpeg verwenden.
Die neuesten Versionen von ffmpeg können dies tun: Sie müssen die Dateien zuerst in mpeg-Transportströme remuxen (ziemlich prozessorleuchtend, da nur das Containerformat geändert wird):
ffmpeg -i input.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb middle.ts
Wenn dies einen Fehler bezüglich h264 auslöst, müssen Sie möglicherweise Folgendes verwenden:
ffmpeg -i input.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb middle.ts
Sie müssen dies für jede Eingabedatei separat tun. Um die Dateien miteinander zu verketten, verwenden Sie:
ffmpeg -i "concat:middle1.ts|middle2.ts|middle3.ts" -c copy output.mp4
Wenn dies zu einem Fehler bei aac führt, müssen Sie möglicherweise verwenden
ffmpeg -i "concat:middle1.ts|middle2.ts|middle3.ts" -c copy -absf aac_adtstoasc output.mp4
Wenn Ihr System Named Pipes unterstützt, können Sie dies tun, ohne Zwischendateien zu erstellen.
mkfifo temp0 temp1
In drei separaten virtuellen Terminals müssen Sie Folgendes tun:
ffmpeg -i input0.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp0 ffmpeg -i input1.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp1 ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4
Wenn output.mp4 bereits vorhanden ist, werden Sie vom dritten ffmpeg gefragt, ob Sie die Datei überschreiben möchten. Dies geschieht jedoch, nachdem die FIFOs aufgerufen wurden. Dadurch werden die ersten ffmpegs geschlossen. Stellen Sie daher sicher, dass Sie einen nicht verwendeten Namen für Ihre Ausgabedatei auswählen.
Dies funktioniert möglicherweise nicht, wenn Ihre Eingabedateien unterschiedlich sind. Ich glaube, die Unterschiede in der Bitrate sind in Ordnung, aber die Bildgröße, die Bildrate usw. müssen übereinstimmen.