Dem Alex sein „Blog“

Dem Alex sein „Blog“

Jun 26 / 1:04am

MP4 Dateien zusammenfügen

Ich stand vor dem Problem, das ich einige MP4 Videodateien hatte und wollte die aneinanderhängen - dh. aus 3 "Teilen" sollte 1 langer Film werden. Aber irgendwie habe ich da nicht so recht was gefunden habe — also selbst was zusammenbasteln :)

Herausforderung war, dass das ganze soll so laufen, das NICHT transkodiert (also von einem Videoformat (z.B. Flash) in ein anderes (z.B. H.264) umgewandelt) werden soll, denn einerseits dauert das lange und andererseits gibt's dabei dann Qualitätsverlust. Das geht so:

Der Ablauf der Konvertierung lässt sich folgendermassen Skizzieren (und weiter unten gibt's auch ein fertiges Script *G*):

  1. MP4 Datei nach MKV umwandeln
  2. Aus der gerade erstellten MKV Datei die Ton- und Videospuren extrahieren
  3. Aus den nun seperaten Ton-/Videospuren eine MP4 Datei erstellen

Um die Dateien nach MKV zu konvertieren, kommt ffmpeg zum Einsatz.

ffmpeg -i "$name" -vcodec copy -acodec copy "rewrite/$name.mkv" < /dev/null

Anstelle von $name setze man den Namen der Originaldatei ein (oder man speichert den Namen in einer Umgebungsvariable des Namens "name"). Dies rufe man für jede Quelldatei auf. ffmpeg geht nun her, und wandelt die Datei so um, das im Matroska Containerformat (.mkv) gespichert wird; das geht SEHR schnell, da hierbei keinerlei Formatänderung des Bildes/Tones nötig ist.

Nun die einzelnen MKV Dateien zu einer "langen" Videodatei zusammenfügen. Dies braucht mkvmerge von den MKVToolnix.

mkvmerge --default-track 2 -o "$name.mkv" "rewrite/$name"-1.mkv +"rewrite/$name"-2.mkv +"rewrite/$name"-3.mkv

Dies "nimmt" 3 einzelne .mkv Dateien und erstellt daraus eine grosse Datei.

Als nächsten Schritt extrahiere man aus dieser gerade erstellten Datei die Bild- und Tonspuren. Wir verwenden dafür mkvextract, welches auch zu MKVToolnix gehört.

mkvextract tracks "$name.mkv" 1:"rewrite/$name.mkv.v1.h264" 2:"rewrite/$name.mkv.a1.aac"

Ergebnis: 2 weitere, nur vorübergehend benötigte Dateien mit der Ton- bzw. Videospur.

Wir sind fast fertig ;) Nun nur noch eben die Audio-/Videospuren zusammenfügen, und zwar als MP4 Datei!

MP4Box -add "rewrite/$name.mkv.v1.h264" -add "rewrite/$name.mkv.a1.aac" -par 1=100:100 -new -flat -ipod -fps 23.976 "$name.mp4"

Das war eigentlich der wichtigste Schrit :-) Hierfür habe ich MP4Box verwendet, welches man beim GPAC Projekt findet.

Zum krönenden Abschluss noch die überflüssigen temporären Dateien entsorgen.

rm "rewrite/$name"-1.mkv "rewrite/$name"-2.mkv "rewrite/$name"-3.mkv "rewrite/$name.mkv.v1.h264" "rewrite/$name.mkv.a1.aac"

Fertig!

Wer möchte, kann das ganze auch "in einem Rutsch", als aufrufbares (bash) Shell Script haben.

Erwähnenswert ist noch, wie MP4Box/gpac zu kompilieren ist. Und zwar ist in der config.mak Datei CONFIG_SDL und USE_WXWIDGETS auf "no" zu setzen (siehe dazu meine Datei). Also zuerst ./configure aufrufen, dann config.mak anpassen und dann wie gewohnt make aufrufen um das ganze zu kompilieren. Wer nur die MP4Box Datei haben möchte, kann meine kompilierte Datei downloaden; bzw. ein .tar.gz mit dem gesamten Kompilat (1,6 MB).

Die anderen Tools (also ffmpeg und MKVToolnix) lassen sich ohne weiteres übersetzen (bezogen auf mein OS X System *G*, wo ich das ganze dank der MacPorts durch "sudo port install mkvtoolnix ; sudo port install ffmpeg" einfachst installiert bekam).

Enjoy!

0 comments

Leave a comment...