it-swarm.com.de

ffmpeg verbinde zwei mp4 Dateien mit ffmpeg auf der Kommandozeile

Ich kann mit dem folgenden Befehl mehrere Dateien erfolgreich verbinden:

ffmpeg -f concat -i input.txt -codec copy output.mp4

Das einzige Problem bei diesem Befehl ist, dass Sie die Dateipfade aus der Textdatei mit dem Namen input.txt mit folgendem Inhalt lesen müssen:

file 'C:\Users\fabio\Downloads\Super\Sharks\01.mp4'
file 'C:\Users\fabio\Downloads\Super\Sharks\02.mp4'
file 'C:\Users\fabio\Downloads\Super\Sharks\03.mp4'

Gibt es eine Möglichkeit, dasselbe Ziel zu erreichen, ohne die Dateipfade aus einer Datei lesen zu müssen? Ich habe folgendes ohne Glück versucht:

ffmpeg -f concat -i file "C:\a\b\01.mp4" file "C:\a\b\02.mp4" -codec copy output.mp4
ffmpeg -f concat -i "C:\a\b\01.mp4" "C:\a\b\02.mp4" -codec copy output.mp4

Muss ich einen anderen Befehl verwenden?

21
Fabio Delarias

Update 2019:

Wie in den Kommentaren erwähnt, enthält Stack Overflow eine ausführliche Beschreibung der verfügbaren Optionen für die Verkettung sowie eine Erläuterung der zu verwendenden Methode in Abhängigkeit von den von Ihnen verwendeten Dateitypen:

Wie zwei MP4-Dateien mit FFmpeg verketten?

Original 2016 Antwort:

Sie sollten in der Lage sein, die Dateien mit der Methode concat protocol zu kombinieren:

ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output.mp4

Darüber hinaus wird im FFmpeg-Handbuch eine Methode speziell für MP4-Dateien beschrieben, um diese verlustfrei zu verketten. Sie müssen jedoch temporäre Dateien (oder Named Pipes) erstellen:

ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4
30
Carson Darling

Nein, es scheint keine Möglichkeit zu geben, den ffmpeg concat-Demuxer auf einer einzigen Befehlszeile ohne Hack zu verwenden. Sie müssen die Eingabetextdatei mit der Liste der Dateien erstellen. Ich fand das seltsam, vielleicht fügt jemand dieses FFMpeg zu einem späteren Zeitpunkt hinzu.

Die akzeptierte Antwort auf diese Frage verwendet das Concat-Protokoll, nicht den Concat-Demuxer, den das OP gestellt hat.

1
georgiecasey

Sie können eine Datei durch eine Liste ersetzen, indem Sie eine Liste an stdout ausgeben und die Liste aus stdin mit ffmpeg lesen:

(echo file 'a.mp4' & echo file 'b.mp4') | ffmpeg -protocol_whitelist file,pipe -f concat -safe 0 -i pipe: -vcodec copy -acodec copy "result.mp4"
1
Qwertiy