====== MKVToolnix ====== siehe auch: [[MP4]] Das Video-Container-Format mit dem Namen "Matroska" ist komplett frei, streaming fähig und das kompatiebelste überhaupt. * [[http://www.bunkus.org/videotools/mkvtoolnix/]] 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#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. * [[http://privatstrand.dirkschmidtke.de/2011/03/14/o-matroska-mkv-dateien-schneiden-und-demuxen/]] * [[https://encodingwissen.de/praxis/handarbeit/muxing/mkvmerge/]] ==== 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 [[http://www.bunkus.org/videotools/mkvtoolnix/doc/mkvmerge-gui.html|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 [[multimedia#film-lauflaengen-problematik|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 soll, wobei die Tonspur im Film erst 21 Sekunden (21000 Millisekunden) später beginnen soll: > 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: ===== * [[http://www.bunkus.org/videotools/mkvtoolnix/doc/mkvmerge-gui.html]] * [[http://www.sanitarium.net/golug/Linux_Multimedia.html]] 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