Wie verschmelze ich mehrere Videodateien zu einer einzigen Datei mit FFmpeg?
- Einführung
- Voraussetzungen
- Methode 1: Zusammenfügen ohne Neukodierung mit dem "concat"-Demuxer
- Methode 2: Zusammenfügen durch Neukodierung mit concat Muxer
- Wichtige Hinweise
- Fazit
Einführung
FFmpeg ist ein sehr leistungsfähiges Werkzeug zur Bearbeitung von Video- und Audiodateien. Eine häufige Aufgabe ist das Zusammenfügen mehrerer Videodateien zu einer einzigen Datei. Dabei gibt es verschiedene Methoden, die je nach Format und Codec der Videodateien unterschiedlich gut funktionieren.
Voraussetzungen
Um Videos verlustfrei zusammenzufügen, sollten alle Dateien dieselben Video- und Audio-Codecs sowie gleiche Parameter wie Auflösung, Framerate und Anzahl der Audiospuren haben. Andernfalls ist häufig eine Neukodierung (Re-Encoding) nötig, die mehr Zeit und CPU-Leistung beansprucht.
Methode 1: Zusammenfügen ohne Neukodierung mit dem "concat"-Demuxer
Diese Methode eignet sich nur, wenn die Videodateien exakt dieselben Codecs und Parameter haben, beispielsweise mehrere MP4-Dateien mit H.264-Video und AAC-Audio. Zuerst muss eine Textdatei erstellt werden, die die Reihenfolge der einzufügenden Dateien angibt. Diese Textdatei könnte beispielsweise filelist.txt heißen und folgendes Format haben:
file video1.mp4file video2.mp4file video3.mp4Jede Zeile beginnt mit dem Wort file gefolgt vom Dateinamen in einfachen Anführungszeichen.
Um die Dateien dann zusammenzufügen, wird folgender FFmpeg-Befehl genutzt:
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4Die Option -f concat sagt FFmpeg, den concat-Demuxer zu verwenden. -safe 0 erlaubt pfadangaben mit Sonderzeichen. -i filelist.txt ist die Eingabeliste. -c copy sorgt für das Kopieren des Streams ohne Neukodierung, was schnell ist und keine Qualitätsverluste verursacht.
Methode 2: Zusammenfügen durch Neukodierung mit concat Muxer
Wenn die Dateien unterschiedliche Codecs oder Parameter haben, funktioniert die oben genannte Methode meist nicht. Dann kann man die Clips mittels Filtergraph "concat" zusammenfügen und kodieren. Ein Beispiel für zwei Dateien:
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex " concat=n=2:v=1:a=1 " -map " " -map " " output.mp4Hier werden die Videospuren ( , ) und Audiospuren ( , ) der beiden Dateien durch den concat-Filter nacheinander angehängt. Anschließend werden die so verbundenen Streams mit den Standard-Codecs neu kodiert.
Sie können -c:v und -c:a Optionen hinzufügen, um den Codec und die Qualität zu steuern, z.B. -c:v libx264 -crf 23 -preset medium.
Wichtige Hinweise
Die concat-Methode mit Textdatei ist sehr schnell und ohne Qualitätsverlust, erfordert aber gleiche Parameter der Eingangsdateien. Bei unterschiedlichen Formaten oder Codecs ist die Neukodierung mittels Filter geeignet, benötigt aber mehr Zeit und kann Qualitätseinbußen verursachen.
Vor dem Zusammenfügen empfiehlt es sich, die Metadaten der Videos mit ffprobe zu prüfen, z.B. ffprobe video1.mp4.
Fazit
Zum schnellen und verlustfreien Zusammenfügen von mehreren Videos ist die Methode mit der Textdatei und dem concat-Demuxer die beste Wahl. Für uneinheitliche Formate kommt der Filtergraph mit Neukodierung zum Einsatz. FFmpeg bietet mit diesen Möglichkeiten flexiblen Umgang mit Videodateien.
