Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
MKVToolnix
siehe auch: MP4
Das Video-Container-Format mit dem Namen "Matroska" ist komplett frei, streaming fähig und das kompatiebelste überhaupt.
Set of command-line tools to work with Matroska files Matroska is a new multimedia container format, based on EBML (Extensible Binary Meta Language), which is a kind of binary XML. These tools allow to manipulate Matroska files.
- mkvmerge is a tool to create Matroska files from other formats
- mkvinfo allows to get information about the tracks in a Matroska file
- mkvextract can extract tracks from Matroska files to other formats
MKV -> MP4
MKV zerlegen
mkvmerge --identify video.mkv File 'video.mkv': container: Matroska Track ID 1: video (V_MPEG4/ISO/AVC) Track ID 2: audio (A_AC3)
mkvextract tracks video.mkv 1:video.h264 2:audio.aac 3:subtitles.srt
oder
mkvextract tracks video.mkv 1:video.h264 2:audio.ac3 Extracting track 1 with the CodecID 'V_MPEG4/ISO/AVC' to the file 'video.h264'. Container format: AVC/h.264 elementary stream Extracting track 2 with the CodecID 'A_AC3' to the file 'audio.ac3'. Container format: Dolby Digital (AC3) Progress: 100%
Filmschnitt
Damit die Schnittpunkte genau genug entstehen, ist es wichtig, dass der Film genügend KeyFrame besitzt bzw. das die KeyFrame eng genug beieinander liegen.
Film zerschneiden
> mkvmerge film.mkv -o split.mkv --split timecodes:00:03:33.000,00:06:27.000
split-001.mkv vom Filmanfang bis Minute 3:33 split-002.mkv von Minute 3:33 bis 6:27 split-003.mkv von 6:27 bis Filmende
Filmteile zusammensetzen
> mkvmerge -o sauberer-film.mkv split-001.mkv +split-003.mkv
weitere mkvmerge-Beispiele
mögliche Eingabeformate von mkvmerge lassen sich so anzeigen:
# mkvmerge -l
So werden eine Videospur und eine Tonspur in einen Matroska-Container gemuxt:
# mkvmerge --title "Film Name" -o neuer_Film.mkv Film_ohne_Ton.avi Tonspur.ac3
# mkvmerge --default-language ger --aspect-ratio 1:16:9 -o neuer_Film.mkv Film_ohne_Ton.mkv Tonspur.mp3
# mkvmerge --default-language ger --display-dimensions 1:1024x576 -o neuer_Film.mkv Film_ohne_Ton.avi Tonspur.m4a
So wird ein Film aus einem unerwünschten Container (hier MPEG) in einen Matroska-Container gemuxt:
# mkvmerge -o Film.mkv Film_mit_falschem_Container.mpg
Mit mkvinfo funktioniert das natürlich nur bei MKV-Dateien!
# mkvinfo Film.mkv
Audio- und Videospur aus einer MKV-Datei unverändert extrahieren
# mkvextract tracks Film.mkv 1:Film_stumm.mkv 2:Film_tonspur
Die grafische Oberfläche von mkvmerge heißt mmg.
Audio- und Videospuren syncronisieren
# mplayer FILM_videospur.mkv -vo null -ao null -identify -frames 0 -nocache 2>/dev/null | fgrep ID_LENGTH ID_LENGTH=572.52
# mplayer FILM_audiospur -vo null -ao null -identify -frames 0 -nocache 2>/dev/null | fgrep ID_LENGTH ID_LENGTH=596.49
# mkvmerge --identify Film_out_of_sync.mkv File 'Film_out_of_sync.mkv': container: Matroska Track ID 1: video (V_MPEG4/ISO/AVC) Track ID 2: audio (A_AAC)
Track ID der Audio-Spur ermitteln:
# mkvmerge --identify Film_out_of_sync.mkv | awk '/Track ID/&&/audio/ {sub(":",""); print $3}'
2
- Track ID der Audiospur: 2
- versetzter Start zwischen Audio- und Videospur: 0
- Länge der Videospur: 572.52
- Länge der Audiospur: 596.49
# mkvmerge -y 2:0,572.52/596.49 -o Film_in_sync.mkv Film_out_of_sync.mkv
oder
# mkvmerge -y 2:0,24/25 -o Film_in_sync.mkv Film_out_of_sync.mkv
oder
# mkvmerge -y 2:0,0.96 -o Film_in_sync.mkv Film_out_of_sync.mkv
Der Parameter "-y" ermöglicht ein Verschiebung zwischen Audio- und Videospur. Ihm müssen 3 Werte übergeben werden:
- Track ID (ich verwende hier immer die ID der Audiospur)
- Verschiebepunkt (beide Spuren sind gleich lang aber zueinander versetzt)
- Laufzeitdifferenz (beide Spuren sind unterschiedlich lang bzw. schnell)
Wir werden die Laufzeit der Tonspur anpassen und geben deshalb die Track ID der Tonspur (in diesem Fall "2") an. Hinter dem Doppelpunkt wird eine "0" angegeben, wenn die Audio- und die Videospur zur selben Zeit starten sollen, gibt es hier nur eine Verschiebung zwischen den Spuren, dann genügt hier die entsprechende Zeitverschiebung, mehr Parameter sind dann nicht nötig.
In diesem Beispiel ist es aber etwas komplizierter, hier muss noch ein weiterer Parameter durch Komma getrennt angegeben werden. Ich habe einen 1080p-Film mit 24 Bildern pro Sekunde in ein 576-Zeilen-Film (AVC-DVD-Profil / Level 3.0) transcodiert.
Das hat zur Folge, dass jetzt 25 Bilder statt 24 Bilder pro Sekunde abgespielt werden (das ist normal so, siehe Film-Lauflängen-Problematik/PAL-Beschleunigung), daraus ergibt sich eine um ca. 4% schnellere Videospur. Allerdings ist die Tonspur immer noch genauso lang wie vorher…
Deshalb muss hier noch ein Wert für den Laufzeitunterschied angegeben werden, in diesem Fall ist das "24/25". Man kann hier einen Bruch oder auch eine Fließkommazahl ("0.96") angeben. Der Bruch kann auch aus den gemessenen Laufzeiten, der beiden separaten Spuren bestehen: "572.52/596.49".
Wenn Bild und Ton zusammengesetzt werden, wobei die Tonspur erst 21 Sekunden (21000 Millisekunden) später beginnt:
> mkvmerge --identify Ton.mkv | awk '/Track ID/&&/audio/ {sub(":",""); print $3}'
0
> mkvmerge -o Film.mkv Bild.mkv -y 0:21000,1/1 Ton.mkv
WICHTIG:
Man vermeidet Probleme, wenn man die Tonspur, die für einen Film gedacht ist, nicht in einen AAC-Container, sondern in einen MP4-Container verpackt!
Zum Beispiel so:
# faac -w --tns -q 160 -o Tonspur.m4a Tonspur.wav
