Benutzer-Werkzeuge

Webseiten-Werkzeuge


mkvtoolnix

Dies ist eine alte Version des Dokuments!


MKVToolnix

siehe auch: MP4

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%

MP4 zusammen bauen

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:

  1. Track ID (ich verwende hier immer die ID der Audiospur)
  2. Verschiebepunkt (beide Spuren sind gleich lang aber zueinander versetzt)
  3. 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".

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
/home/http/wiki/data/attic/mkvtoolnix.1544457450.txt · Zuletzt geändert: von manfred