Die Reihenfolge der Befehlszeilenoptionen ist wichtig. Bitte lesen Sie den Abschnitt »Reihenfolge der Optionen«, falls sie ein neuer Nutzer des Programms sind.
-v, --verbose
-q, --quiet
-o, --output Dateiname
-w, --webm
Bei Kapiteln und Tags ist nur eine Untermenge aller Elemente erlaubt. mkvmerge(1) entfernt automatisch alle Elemente, die laut Spezifikation nicht erlaubt sind.
--title Titel
--default-language Sprachcode
Das Standard-Sprachkürzel ist das für »undefiniert« stehende »und«.
--segmentinfo Dateiname.xml
Einzelheiten finden Sie im Abschnitt weiter unten über Segmentinformations-XML-Dateien.
--segment-uid SID1,SID2,...
Falls SID mit einem = beginnt, so wird der Rest als Name einer Matroska-Datei interpretiert, deren Segment-UID gelesen und benutzt wird.
Jede erstellte Datei enthält ein Segment und jedes Segment hat eine Segment-UID. Falls mehr Segment-UIDs angegeben als Segmente erstellt werden, werden die überschüssigen UIDs ignoriert. Falls weniger Segment-UIDs angegeben als Segmente erstellt werden, dann werden für diese Segmente zufällige UIDs erzeugt.
--chapter-language Sprachcode
Diese Option kann sowohl für einfache Kapiteldateien als auch für Quelldateien benutzt werden, die Kapitel enthalten, aber keine Informationen über die Sprache der Kapitel, z.B. MP4- und OGM-Dateien.
Die mit dieser Option gesetzte Sprache wird ebenfalls beim Erzeugen von Kapiteln mit Hilfe der Option --generate-chapters benutzt.
--chapter-charset Zeichensatz
Dieser Schalter gilt auch für Kapitel, die aus bestimmten Containertypen kopiert werden, z.B. Ogg/OGM- und MP4-Dateien. Einzelheiten finden Sie im nachfolgenden Abschnitt über Kapitel.
--chapter-sync d[,o[/p]]
o/p: passen die Zeitstempel um o/p an, um lineare Verschiebungen zu beheben. Falls p weggelassen wird, ist sie standardmäßig 1. Sowohl o als auch p können Fließkommazahlen sein.
Voreinstellung: keine manuelle Synchronisationskorrektur (was dasselbe wie d = 0 und o/p = 1.0ist).
Diese Option kann mehrfach für eine Eingabedatei benutzt werden und gilt für mehrere Spuren, indem jedesmal eine andere Spur-ID ausgewählt wird.
--generate-chapters Modus
Dieser Modus funktioniert ebenfalls mit den Aufteilungsmodi »parts:« und »parts-frames:«. Für diese Modi wird je ein Kapitel für jeden angehängten Zeitstempelbereich erzeugt (diejenigen, deren Startzeitstempel mit »+« beginnt).
Beispiel: --generate-chapters interval:45s
Die Namen der neu erzeugten Kapitel werden durch die Option --generate-chapters-name-template kontrolliert. Die Sprache wird mittels der Option --chapter-language festgelegt, welche vor --generate-chapters erscheinen muss.
--generate-chapters-name-template Vorlage
Es gibt mehrere Variablen, die in der Vorlage benutzt werden können und die durch ihre tatsächlichen Werte ersetzt werden, sobald ein Kapitel erzeugt wird. Die Zeichenkette '<NUM>' wird durch die Kapitelnummer ersetzt. Die Zeichenkette '<START>' wird durch den Startzeitpunkt des Kapitels ersetzt.
Die Zeichenketten »>FILE_NAME>« und »<FILE_NAME_WITH_EXT>« sind nur bei der Kapitelerzeugung beim Anhängen von Dateien gesetzt. Sie werden durch den Namen der gerade angehängten Datei ohne bzw. mit der Erweiterung ersetzt. Beachten Sie, dass ausschließlich der Basisname und Erweiterung eingefügt werden, nicht aber die Verzeichnis- oder Laufwerkskomponenten.
Sie können mit »<NUM:Stellen>« eine Mindestanzahl von Stellen für die Kapitelnummer angeben, z.B. »<NUM:3>«. Die Nummer wird mit führenden Nullen aufgefüllt, falls die Stellenanzahl geringer als angegeben ist.
Sie können das für den Startzeitstempel benutzte Format mit <START:format> anpassen. Als Format wird standardmäßig '%H:%M:%S' genommen, falls keines angegeben wird. Gültige Formatanweisungen sind:
--cue-chapter-name-format Format
Falls diese Option nicht angegeben wurde, ist das Format »%p - %t« (der Interpret gefolgt von einem Leerzeichen, einem Gedankenstrich, einem weiteren Leerzeichen und dem Titel) die Voreinstellung von mkvmerge(1).
Falls das Format angegeben wurde, dann wird alles außer den folgenden Metazeichen, so wie es ist, kopiert und die Metazeichen werden wie folgt ersetzt:
--chapters Dateiname
--global-tags Dateiname
--track-order FID1:TID1,FID2:TID2,...
--cluster-length Spezifikation
Falls keine Einheit benutzt wird, wird mkvmerge(1) höchstens n Datenblöcke in jeden Cluster ablegen. Die maximale Anzahl von Blöcken liegt bei 65535.
Falls der Zahl d ein »ms« folgt, dann wird mkvmerge(1) höchstens d Millisekunden Daten in jeden Cluster ablegen. Das Minimum für d liegt bei »100ms« und das Maximum bei »32000ms«.
Standardmäßig legt mkvmerge(1) höchstens 65535 Datenblöcke und 5000 ms Daten in einen Cluster.
Programme, die versuchen, ein bestimmtes Bild zu finden, können nur einen Cluster direkt suchen und müssen danach den ganzen Cluster lesen. Daher kann das Erstellen großer Cluster zu ungenauem oder langsamem Durchsuchen führen.
--clusters-in-meta-seek
--timestamp-scale Faktor
Normalerweise wird mkvmerge(1) einen Wert von 1000000 benutzen. Das bedeutet, dass Zeitstempel und Laufzeiten die Genauigkeit von 1 ms haben. Für Dateien, die keine Videospuren aber mindestens eine Tonspur enthalten, wird mkvmerge(1) automatisch einen Faktor der Zeitstempelskala so wählen, dass alle Zeitstempel und Laufzeiten die Genauigkeit eines Audio-Samples bekommen. Dies verursacht einen größeren Aufwand, ermöglicht aber genaueres Suchen und Extrahieren.
Falls der Spezialwert -1 benutzt wird, dann wird mkvmerge(1) die Genauigkeit des Samples auch dann verwenden, wenn eine Videospur vorhanden ist.
--enable-durations
--no-cues
--no-date
--disable-lacing
--disable-track-statistics-tags
Mit dieser Option wird mkvmerge(1) angewiesen, keine solchen Tags zu schreiben und bereits existierende Tags mit denselben Namen nicht zu verändern.
--disable-language-ietf
--split Spezifikation
Derzeit unterstützt mkvmerge(1) vier verschiedene Modi.
Syntax: --split [size:]d[k|m|g]
Beispiele: --split size:700m oder --split 150000000
Der Parameter d kann mit »k«, »m« oder »g« enden, um anzuzeigen, ob die Größe in kB, MB beziehungsweise GB vorliegt. Andernfalls wird von einer Größe in Byte ausgegangen. Nachdem die aktuelle Ausgabedatei diese Größenbegrenzung erreicht hat, wird eine neue angefangen.
Das Präfix »size:« kann aus Kompatibilitätsgründen weggelassen werden.
Syntax: --split [duration:]HH:MM:SS.nnnnnnnnn|ds
Beispiele: --split duration:00:60:00.000 oder --split 3600s
Der Parameter muss entweder die Form HH:MM:SS.nnnnnnnnn haben, um die Laufzeit mit einer Genauigkeit bis zu einer Nanosekunde anzugeben, oder eine Zahl d gefolgt vom Buchstaben »s« sein, um eine Laufzeit in Sekunden anzugeben. HH ist die Anzahl der Stunden, MM die Anzahl der Minuten, SS die Anzahl der Sekunden und nnnnnnnnn die Anzahl der Nanosekunden. Sowohl die Zahl der Stunden als auch die der Nanosekunden kann weggelassen werden. Es könnnen bis zu neun Nachkommastellen vorliegen. Nachdem der Laufzeit des Inhalts in der aktuellen Ausgabe diese Begrenzung erreicht hat, wird eine neue Ausgabedatei begonnen.
Das Präfix »duration:« darf aus Kompatibilitätsgründen weggelassen werden.
Syntax: --split timestamps:A[,B[,C...]]
Beispiel: --split timestamps:00:45:00.000,01:20:00.250,6300s
Die Parameter A, B, C etc. müssen alle das gleiche Format wie das haben, das für die Laufzeit benutzt wurde (siehe oben). Die Liste der Zeitstempel wird durch Kommas getrennt. Nachdem der Eingabestrom den Zeitstempel des nächsten Aufteilungspunkts erreicht hat, wird eine neue Datei erstellt. Dann wird der nächste Aufteilungspunkt in der Liste benutzt.
Das Präfix »timestamps:« darf nicht weggelassen werden.
Syntax: --split parts:Start1-Ende1[,[+]Start2-Ende2[,[+]Start3-Ende3...]]
Beispiele:
Der Modus parts teilt mkvmerge(1) mit, dass bestimmte Zeitstempelbereiche aufbewahrt werden, während andere verworfen werden. Die Bereiche, die aufbewahrt werden sollen, müssen nach dem Schlüsselwort parts: aufgeführt und durch Kommas getrennt werden. Ein Bereich selbst besteht aus einem Start- und Endzeitstempel im selben Format, wie dem, das andere Variationen von --split akzeptieren (z.B. beziehen sich sowohl 00:01:20 als auch 80s auf den selben Zeitstempel).
Falls ein Startzeitstempel weggelassen wurde, wird er standardmäßig auf das Ende des vorherigen Zeitstempelbereichs gesetzt. Falls es keinen vorherigen Bereich gab, dann wird er standardmäßig auf den Dateianfang gesetzt (siehe Beispiel 3).
Falls ein Endzeitstempel weggelassen wird, dann wird dies standardmäßig das Ende der Quelldateien, wodurch mkvmerge(1) im Prinzip mitgeteilt wird, dass es den Rest behalten soll (siehe Beispiel 3).
Normalerweise wird jeder Bereich in eine neue Datei geschrieben. Dies kann so geändert werden, dass aufeinanderfolgende Bereiche in dieselbe Datei geschrieben werden. Dafür muss der Benutzer dem Startzeitstempel ein + voranstellen. Dies teilt mkvmerge(1) mit, dass es keine neue Datei erstellen und den Bereich stattdessen an dieselbe Datei anhängen soll, in die der letzte Bereich geschrieben wurde. Zeitstempel werden angepasst, so dass es in der Ausgabedatei keine Lücke gibt, selbst wenn es in den beiden Bereichen in der Eingabedatei eine Lücke gab.
Im Beispiel 1 wird mkvmerge(1) zwei Dateien erstellen. Die erste wird den Inhalt beginnend bei 00:01:20 bis 00:02:45 enthalten. Die zweite Datei wird den Inhalt von 00:05:50 bis 00:10:30 enthalten.
Im Beispiel 2 wird mkvmerge(1) nur eine Datei erstellen. Diese Datei wird den Inhalt beginnend bei 00:01:20 bis 00:02:45 und den Inhalt beginnend bei 00:05:50 bis 00:10:30 enthalten.
Im Beispiel 3 wird mkvmerge(1) zwei Dateien erstellen. Die erste wird den Inhalt vom Anfang der Quelldateien bis 00:02:45 enthalten. Die zweite Datei wird den Inhalt beginnend bei 00:05:50 bis zum Ende der Quelldatei enthalten.
Syntax: --split parts-frames:Start1-Ende1[,[+]Start2-Ende2[,[+]Start3-Ende3...]]
Beispiele:
Der Modus parts-frames teilt mkvmerge(1) mit, dass bestimmte Bereiche von Bild-/Feldnummern aufbewahrt werden, während andere verworfen werden. Die Bereiche, die aufbewahrt werden sollen, müssen nach dem Schlüsselwort parts-frames: aufgeführt und durch Kommas getrennt werden. Ein Bereich selbst besteht aus einer Start- und Endbildnummer. Die Nummerierung beginnt bei 1.
Falls eine Startnummer weggelassen wird, wird sie standardmäßig auf die Endnummer des vorherigen Bereichs gesetzt. Falls es keinen vorherigen Bereich gibt, wird sie standardmäßig zum Dateianfang (siehe Beispiel 3).
Falls eine Endnummer weggelassen wird, dann wird dies standardmäßig das Ende der Quelldateien, wodurch mkvmerge(1) im Prinzip mitgeteilt wird, dass es den Rest behalten soll (siehe Beispiel 3).
Normalerweise wird jeder Bereich in eine neue Datei geschrieben. Dies kann so geändert werden, dass aufeinanderfolgende Bereiche in dieselbe Datei geschrieben werden. Dafür muss der Benutzer der Startnummer ein + voranstellen. Dies teilt mkvmerge(1) mit, dass es keine neue Datei erstellen und den Bereich stattdessen an dieselbe Datei anhängen soll, in die der letzte Bereich geschrieben wurde. Zeitstempel werden so angepasst, dass es in der Ausgabedatei keine Lücke gibt, auch dann nicht, wenn es in den beiden Bereichen in der Eingabedatei eine Lücke gab.
Im Beispiel 2 wird mkvmerge(1) nur eine Datei erstellen. Diese Datei wird den Inhalt beginnend bei 733 bis 912 und den Inhalt beginnend bei 1592 bis 2730 enthalten.
Im Beispiel 3 wird mkvmerge(1) zwei Dateien erstellen. Die erste wird den Inhalt vom Anfang der Quelldateien bis 430 enthalten. Die zweite Datei wird den Inhalt beginnend bei 2512 bis zum Ende der Quelldatei enthalten.
Dieser Modus betrachtet nur die erste Videospur, die ausgegeben wird. Falls keine Videospur ausgegeben wird, wird es keine Aufteilung geben.
Syntax: --split frames:A[,B[,C...]]
Beispiel: --split frames:120,237,891
Die Parameter A, B, C etc. müssen jeweils positive Ganzzahlen sein. Die Nummerierung beginnt bei 1. Die Liste der Bild-/Feldnummern wird durch Kommas getrennt. Nachdem der Eingabedatenstrom die Bild-/Feldnummer des aktuellen Aufteilungspunkts erreicht hat, wird eine neue Datei erstellt. Dann wird der nächste in der Liste angegebene Aufteilungspunkt benutzt.
Das Präfix »frames:« darf nicht weggelassen werden.
Dieser Modus betrachtet nur die erste Videospur, die ausgegeben wird. Falls keine Videospur ausgegeben wird, wird es keine Aufteilung geben.
Syntax: --split chapters:all oder --split chapters:A[,B[,C...]]
Beispiel: --split chapters:5,8
Die Parameter A, B, C etc. müssen jeweils positive Ganzzahlen sein. Die Nummerierung beginnt bei 1. Die Liste der Kapitel wird durch Kommas getrennt. Die Aufteilung wird kurz vor dem ersten Schlüsselbild auftreten, dessen Zeitstempel größer oder gleich dem Startzeitstempel für die Kapitel ist, deren Nummern aufgelistet wurden. Ein Kapitel, das bei 0s beginnt, wird niemals für das Aufteilen berücksichtigt und stillschweigend verworfen.
Anstatt alle Kapitelnummern manuell aufzuführen, kann das Schlüsselwort all benutzt werden.
Das Präfix »chapters:« darf nicht weggelassen werden.
Bei diesem Aufteilungsmodus wird der Ausgabedateiname anderes als im normalen Betrieb behandelt. Er kann einen Ausdruck »%d« enthalten, ähnlich wie printf, einschließlich einer Feldbreite, z.B. »%02d«. Falls dies der Fall ist, wird die aktuelle Dateizahl entsprechend formatiert und an der Stelle im Dateinamen eingesetzt. Falls kein derartiges Muster vorkommt, dann wird vom Muster »-%03d« direkt vor der Dateinamenserweiterung ausgegangen: »-o Ausgabe.mkv« würde zu »Ausgabe-001.mkv« führen und so weiter. Falls es keine Dateinamenserweiterung gibt, wird »-%03d« an den Namen angehängt.
Ein weiterer möglicher Ausdruck ist »%c«, der durch den Namen des ersten Kapitels in der Datei ersetzt wird. Beachten Sie, dass der Ausdruck »-%03d« nicht automatisch hinzugefügt wird, falls »%c« bereits vorhanden ist.
--link
--link-to-previous Segment-UID
Falls SID mit einem = beginnt, so wird der Rest als Name einer Matroska-Datei interpretiert, deren Segment-UID gelesen und benutzt wird.
--link-to-next Segment-UID
Falls SID mit einem = beginnt, so wird der Rest als Name einer Matroska-Datei interpretiert, deren Segment-UID gelesen und benutzt wird.
--append-mode Modus
Wenn mkvmerge(1) eine Spur (von nun an »track2_1« genannt) von einer zweiten Datei (»file2« genannt) an eine Spur (»track1_1« genannt) von der ersten Datei (»file1« genannt) anhängt, dann müssen alle Zeitstempel für »track2_1« um einen Betrag versetzt werden. Im Modus »file« ist dies der höchste in »file1« aufgetretene Betrag, auch wenn dieser Zeitstempel von einer anderen Spur als »track1_1« stammt. Im Modus »track« ist der Versatz der höchste Zeitstempel aus »track1_1«.
Unglücklicherweise kann mkvmerge(1) nicht bestimmen, welcher Modus zuverlässig benutzt werden kann. Daher ist der Modus »file« die Voreinstellung. Der Modus »file« funktioniert normalerweise bei Dateien besser, die unabhängig von anderen erstellt wurden, z.B. wenn AVI- oder MP4-Dateien angehängt werden. Der Modus »track« funktioniert möglicherweise besser bei Quellen, die eigentlich nur Teile einer großen Datei sind, z.B. bei VOB- und EVO-Dateien.
Untertitelspuren werden immer so behandelt, als sei der Modus »file« aktiv, sogar dann, wenn tatsächlich der Modus »track« aktiv ist.
--append-to SFID1:STID1:DFID1:DTID1[,...]
Falls diese Option weggelassen wurde, wird eine Standardzuordnung benutzt. Diese Standardzuordnung hängt jede Spur der aktuellen Datei an eine Spur der vorherigen Datei mit derselben Spur-ID an. Dies ermöglicht einfaches Anhängen mit dem Befehl mkvmerge -o Ausgabe.mkv Teil1.mkv +Teil2.mkv, falls ein Film in zwei Teile geschnitten wurde und beide Dateien dieselbe Anzahl von Spuren und Spur-IDs haben.
+
$ mkvmerge -o vollständig.mkv Datei1.mkv + Datei2.mkv $ mkvmerge -o vollständig.mkv Datei1.mkv +Datei2.mkv
[ Datei1 Datei2 ]
Dies ist eine alternative Syntax dafür, Dateinamen mit »+« zwischen ihnen aufzulisten. Deshalb sind die zwei folgenden Befehle gleichwertig:
$ mkvmerge -o vollständig.mkv Datei1.mkv + Datei2.mkv $ mkvmerge -o vollständig.mkv '[' Datei1.mkv Datei2.mkv ']'
=
Das »=« kann kann außerdem vor den nächsten Dateinamen gesetzt werden. Daher entsprechen die beiden folgenden Befehle einander:
$ mkvmerge -o vollständig.mkv = Datei1.mkv $ mkvmerge -o vollständig.mkv =Datei1.mkv
( Datei1 Datei2 )
Dies kann z.B. für VOB-Dateien benutzt werden, die von einer DVD oder MPEG-Transportdatenströmen stammen. Es kann nicht verwendet werden, falls jede Datei einen eigenen Kopfdatensatz enthält, was normalerweise bei eigenständigen Dateien wie AVI oder MP4 der Fall ist.
Einen Dateinamen in runde Klammern zu stecken verhindert auch, dass mkvmerge(1) nach zusätzlichen Dateien mit dem selben Basisnamen sucht. Dies wird bei der Option = beschrieben. Daher entsprechen die beiden folgenden Befehlszeilen einander:
$ mkvmerge -o Ausgabe.mkv = Datei.mkv $ mkvmerge -o Ausgabe.mkv '(' Datei.mkv ')'
Es ist auf mehrere Dinge zu achten:
--attachment-description Beschreibung
--attachment-mime-type MIME-Typ
--attachment-name Name
--attach-file Dateiname, --attach-file-once Dateiname
mkvextract(1) kann benutzt werden, um angehängte Dateien aus einer Matroska(TM)-Datei zu extrahieren.
-a, --audio-tracks [!]n,m,...
Anstelle von Spur-IDs können auch ISO 639-2-Sprachcodes verwendet werden. Dies funktioniert nur bei Quelldateien, die Sprachcodes für ihre Spuren bereithalten.
Standard: alle Spuren diesen Typs kopieren
Falls den IDs ein ! vorangestellt ist, ist ihre Bedeutung umgekehrt: alle Spuren dieses Typs kopieren außer den nach ! aufgeführten.
-d, --video-tracks [!]n,m,...
Anstelle von Spur-IDs können auch ISO 639-2-Sprachcodes verwendet werden. Dies funktioniert nur bei Quelldateien, die Sprachcodes für ihre Spuren bereithalten.
Falls den IDs ein ! vorangestellt ist, ist ihre Bedeutung umgekehrt: alle Spuren dieses Typs kopieren außer den nach ! aufgeführten.
-s, --subtitle-tracks [!]n,m,...
Anstelle von Spur-IDs können auch ISO 639-2-Sprachcodes verwendet werden. Dies funktioniert nur bei Quelldateien, die Sprachcodes für ihre Spuren bereithalten.
Falls den IDs ein ! vorangestellt ist, ist ihre Bedeutung umgekehrt: alle Spuren dieses Typs kopieren außer den nach ! aufgeführten.
-b, --button-tracks [!]n,m,...
Anstelle von Spur-IDs können auch ISO 639-2-Sprachcodes verwendet werden. Dies funktioniert nur bei Quelldateien, die Sprachcodes für ihre Spuren bereithalten.
Falls den IDs ein ! vorangestellt ist, ist ihre Bedeutung umgekehrt: alle Spuren dieses Typs kopieren außer den nach ! aufgeführten.
--track-tags [!]n,m,...
Falls den IDs ein ! vorangestellt ist, ist ihre Bedeutung umgekehrt: alles kopieren außer den nach ! aufgeführten IDs.
-m, --attachments [!]n[:all|first],m[:all|first],...
Standardmäßig werden alle Anhänge in alle Ausgabedateien kopiert.
Falls den IDs ein ! vorangestellt ist, ist ihre Bedeutung umgekehrt: alles kopieren außer den nach ! aufgeführten IDs.
-A, --no-audio
-D, --no-video
-S, --no-subtitles
-B, --no-buttons
-T, --no-track-tags
--no-chapters
-M, --no-attachments
--no-global-tags
-y, --sync TID:d[,o[/p]]
o/p: passen die Zeitstempel um o/p an, um lineare Verschiebungen zu beheben. Falls p weggelassen wird, ist sie standardmäßig 1. Sowohl o als auch p können Fließkommazahlen sein.
Voreinstellung: keine manuelle Synchronisationskorrektur (was dasselbe wie d = 0 und o/p = 1.0ist).
Diese Option kann mehrfach für eine Eingabedatei benutzt werden und gilt für mehrere Spuren, indem jedesmal eine andere Spur-ID ausgewählt wird.
--cues TID:none|iframes|all
Für Video- und Untertitelspuren ist die Voreinstellung »iframes«, für Audiospuren »none«. Siehe auch die Option --no-cues, die das Erstellen von Indexeinträgen verhindert, ohne die benutzten --cues-Optionen zu berücksichtigen.
Diese Option kann mehrfach für eine Eingabedatei benutzt werden und gilt für mehrere Spuren, indem jedesmal eine andere Spur-ID ausgewählt wird.
--default-track TID[:bool]
Diese Option kann mehrfach für eine Eingabedatei benutzt werden und gilt für mehrere Spuren, indem jedesmal eine andere Spur-ID ausgewählt wird.
--forced-track TID[:bool]
Diese Option kann mehrfach für eine Eingabedatei benutzt werden und gilt für mehrere Spuren, indem jedesmal eine andere Spur-ID ausgewählt wird.
--blockadd TID:Stufe
--track-name TID:Name
--language TID:Sprache
Diese Option kann mehrfach für eine Eingabedatei benutzt werden und gilt für mehrere Spuren, indem jedesmal eine andere Spur-ID ausgewählt wird.
-t, --tags TID:Dateiname
--aac-is-sbr TID[:0|1]
Falls die Quelldatei eine Matroska(TM)-Datei ist, sollte die CodecID ausreichen, um SBR AAC zu bestimmen. Falls die CodecID jedoch falsch ist, kann der Schalter benutzt werden, um dies zu korrigieren.
Falls mkvmerge(1) fälschlicherweise feststellt, dass eine AAC SBR ist, können Sie »:0« zur Spur-ID hinzufügen.
--reduce-to-core TID
Momentan werden nur DTS-Spuren von dieser Option beeinflusst. TrueHD-Spuren, die einen eingebetteten AC-3-Kern enthalten, werden statt dessen als zwei einzelne Spuren präsentiert, für die der Anwender separat entscheiden kann, welche kopiert werden sollen. Bei DTS würde das nicht funktionen, da HD-Erweiterungen nicht alleinstehend decodiert werden können - anders als bei TrueHD-Daten.
--remove-dialog-normalization-gain TID
Momentan werden nur AC-3-, DTS- und TrueHD-Spuren von dieser Option beeinflusst.
--timestamps TID:Dateiname
--default-duration TID:x
Falls die Standarddauer nicht erzwungen wird, dann wird mkvmerge(1) versuchen, die Standarddauer der Spur, des Containers und/oder des codierten Bitstroms bei bestimmten Spurtypen, z.B. AVC/H.264 oder MPEG-2, abzuleiten.
Diese Option kann auch benutzt werden, um die BpS von Videospuren zu ändern, ohne eine externe Zeitstempeldatei zu verwenden.
--fix-bitstream-timing-information TID[:0|1]
--nalu-size-length TID:n
--compression TID:n
Die Komprimierungsmethode »mpeg4_p2«/»mpeg4p2« ist eine besondere Komprimierungsmethode, genannt »Kopfdaten entfernen«, die nur für MPEG4-Teil-2-Videospuren verfügbar ist.
Für einige Untertiteltypen ist die Voreinstellung »zlib«-Komprimierung. Diese Komprimierungsmethode ist außerdem jene, die die meisten, wenn nicht sogar alle Abspielprogramme unterstützen. Für andere Komprimierungsmethoden außer »none« kann keine Unterstützung zugesichert werden.
-f, --fourcc TID:FourCC
--display-dimensions TID:BreitexHöhe
Eine weitere Möglichkeit, die Werte anzugeben, ist die Verwendung der Option --aspect-ratio oder --aspect-ratio-factor (siehe unten). Diese Optionen schließen sich gegenseitig aus.
--aspect-ratio TID:Verhältnis|Breite/Höhe
Eine weitere Möglichkeit, die Werte anzugeben, ist die Verwendung der Option --aspect-ratio-factor oder --display-dimensions (siehe oben und unten). Diese Optionen schließen sich gegenseitig aus.
--aspect-ratio-factor TID:Faktor|n/d
Eine weitere Möglichkeit, die Werte anzugeben, ist die Verwendung der Option --aspect-ratio oder --display-dimensions (siehe oben). Diese Optionen schließen sich gegenseitig aus.
--cropping TID:links,oben,rechts,unten
--colour-matrix TID:n
Gültige Werte und ihre Bedeutung sind:
0: GBR, 1: BT709, 2: nicht spezifiziert, 3: reserviert, 4: FCC, 5: BT470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: YCOCG, 9: BT2020 nicht konstante Helligkeit, 10: BT2020 konstante Helligkeit
--colour-bits-per-channel TID:n
--chroma-subsample TID:hori,vert
Beispiel: Für ein Video mit 4:2:0-Farbon-/Sättigungs-Unterabtastung sollte der Parameter auf TID:1,1 gesetzt werden.
--cb-subsample TID:hori,vert
Beispiel: für ein Video mit 4:2:1-Farbon-/Sättigungs-Unterabtastung sollte der Parameter --chroma-subsample auf TID:1,0 und Cb-Unterabtastung auf TID:1,0 gesetzt werden.
--chroma-siting TID:hori,vert
--colour-range TID:n
--colour-transfer-characteristics TID:n
Gültige Werte und ihre Bedeutung sind:
0: reserviert, 1: ITU-R BT.709, 2: nicht spezifiziert, 3: reserviert, 4: Gamma-2.2-Kurve, 5: Gamma-2.8-Kurve, 6: SMPTE 170M, 7: SMPTE 240M, 8: linear, 9: logarithmisch, 10: logarithmisch Quadratwurzel, 11: IEC 61966-2-4, 12: ITU-R BT.1361 erweiterte Farbskala, 13: IEC 61966-2-1, 14: ITU-R BT.2020 10 bit, 15: ITU-R BT.2020 12 bit, 16: SMPTE ST 2084, 17: SMPTE ST 428-1; 18: ARIB STD-B67 (HLG)
--colour-primaries TID:n
Gültige Werte und ihre Bedeutung sind:
0: reserviert, 1: ITU-R BT.709, 2: nicht spezifiziert, 3: reserviert, 4: ITU-R BT.470M, 5: ITU-R BT.470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: FILM, 9: ITU-R BT.2020, 10: SMPTE ST 428-1, 22: JEDEC P22 phosphors
--max-content-light TID:n
--max-frame-light TID:n
--chromaticity-coordinates TID:rot-x,rot-y,grün-x,grün-y,blau-x,blau-y
--white-colour-coordinates TID:x,y
--max-luminance TID:Fließkommazahl
--min-luminance TID:Fließkommazahl
--projection-type TID:Methode
--projection-private TID:Daten
--projection-pose-yaw TID:Fließkommazahl
--projection-pose-pitch TID:Fließkommazahl
--projection-pose-roll TID:Fließkommazahl
--field-order TID:n
0: progressiv; 1: Halbbildverfahren mit oberem Feld zuerst angezeigt und oberem Feld zuerst gespeichert; 2: nicht spezifizierte Feldreihenfolge; 6: Halbbildverfahren mit unterem Feld zuerst angezeigt und unterem Feld zuerst gespeichert; 9: Halbbildverfahren mit unterem Feld zuerst angezeigt und oberem Feld zuerst gespeichert; 14: Halbbildverfahren mit oberem Feld zuerst angezeigt und unterem Feld zuerst gespeichert
--stereo-mode TID:n|Schlüsselwort
»mono«, »side_by_side_left_first«, »top_bottom_right_first«, »top_bottom_left_first«, »checkerboard_right_first«, »checkerboard_left_first«, »row_interleaved_right_first«, »row_interleaved_left_first«, »column_interleaved_right_first«, »column_interleaved_left_first«, »anaglyph_cyan_red«, »side_by_side_right_first«, »anaglyph_green_magenta«, »both_eyes_laced_left_first«, »both_eyes_laced_right_first«
--sub-charset TID:Zeichensatz
Diese Option kann mehrfach für eine Eingabedatei benutzt werden und gilt für mehrere Spuren, indem jedesmal eine andere Spur-ID ausgewählt wird.
-i, --identify Dateiname
Das für die Ergebnisse benutze Ausgabeformat kann mit der Option --identification-format geändert werden.
-J Dateiname
-F, --identification-format Format
Dieses Format wurde nicht dafür entworfen, geparset zu werden. Die Ausgabe wird in die von mkvmerge(1) benutzte Sprache übersetzt (siehe auch --ui-language).
m[blue]mkvmerge-identification-output-schema-v12.jsonm[][3]
Alle Versionen des JSON-Schemas sind sowohl online als auch in den veröffentlichen Quellcodearchiven verfügbar.
--probe-range-percentage Prozentsatz
Falls Spuren bekanntermaßen enthalten sind aber nicht gefunden werden, so kann der zu untersuchende Prozentsatz hier geändert werden. Das Minimum von 10 MB ist fest eingebaut und kann nicht geändert werden.
-l, --list-types
--list-languages
--priority Priorität
Die Auswahl von »lowest« veranlasst mkvmerge(1) außerdem, zusätzlich zur niedrigsten möglichen Prozesspriorität eine Leerlauf-E/A-Priorität zu wählen.
--command-line-charset Zeichensatz
--output-charset Zeichensatz
-r, --redirect-output Dateiname
--flush-on-close
--ui-language Code
--abort-on-warnings
--deterministic Initialwert
Der Initialwert kann eine beliebige Zeichenkette und muss keine Zahl sein.
Das Ergebnis von Byte für Byte identischen Dateien wird nur unter den folgenden Bedingungen garantiert:
Die Nutzung anderer Versionen von mkvmerge(1) oder andere Kommandozeilenoptionen kann ebenfalls zu einer Byte für Byte identischen Datei führen, was aber nicht garantiert wird.
--debug Thema
--engage Funktionalität
--gui-mode
@Optionsdatei.json
--capabilities
-h, --help
-V, --version
Für jede Datei kann der Benutzer auswählen, welche Spuren mkvmerge(1) nehmen soll. Sie alle werden in eine mit -o angegebene Datei abgelegt. Eine Liste bekannter (und unterstützter) Quellformate kann mit der Option -l abgefragt werden.
Die Reihenfolge der Befehlszeilenoptionen ist wichtig. Bitte lesen Sie den Abschnitt »Reihenfolge der Optionen«, falls sie ein neuer Nutzer des Programms sind.
Die Reihenfolge, in der die Optionen eingegeben werden, ist für einige Optionen wichtig. Optionen fallen unter zwei Kategorien:
Die Optionen werden von links nach rechts verarbeitet. Falls eine Option mehrfach innerhalb desselben Geltungsbereichs erscheint, dann wird das letzte Auftreten benutzt. Daher wird der Titel im folgenden Beispiel auf »Etwas anderes« gesetzt:
$ mkvmerge -o Ausgabe.mkv --title 'Dies und das' Eingabe.avi --title 'Etwas anderes'
Das folgende Beispiel zeigt die zweimalige Verwendung der Option --language, die in Ordnung ist, da sie in unterschiedlichen Geltungsbereichen liegen. Obwohl sie für dieselbe Spur-ID gelten, gelten sie für verschiedene Eingabedateien und haben daher unterschiedliche Geltungsbereiche:
$ mkvmerge -o Ausgabe.mkv --language 0:fre français.ogg --language 0:deu deutsch.ogg
Angenommen, Sie haben eine Datei namens MeinFilm.avi und die Tonspur in einer separaten Datei, z.B. »MeinFilm.wav«. Als erstes möchten Sie den Ton in OggVorbis(TM) codieren:
$ oggenc -q4 -oMeinFilm.ogg MeinFilm.wav
Nach ein paar Minuten können Sie Video und Ton kombinieren:
$ mkvmerge -o MeinFilm-mit-Ton.mkv MeinFilm.avi MeinFilm.ogg
Falls Ihr AVI bereits eine Tonspur enthält, dann wird sie ebenfalls kopiert (wenn mkvmerge(1) das Audioformat unterstützt). Um dies zu verhindern, tun Sie einfach Folgendes:
$ mkvmerge -o MeinFilm-mit-Ton.mkv -A MeinFilm.avi MeinFilm.ogg
Nach einigen Minuten Überlegung rippen Sie eine andere Tonspur, z.B. die Kommentare des Regisseurs oder eine weitere Sprache für MeinFilm-fügt-Ton-hinzu.wav. Codieren Sie ihn erneut und kombinieren Sie ihn mit der anderen Datei:
$ oggenc -q4 -oMeinFilm-fügt-Ton-hinzu.ogg MeinFilm-fügt-Ton-hinzu.wav $ mkvmerge -o MM-komplett.mkv MeinFilm-mit-Ton.mkv MeinFilm-fügt-Ton-hinzu.ogg
Dasselbe Ergegnis kann erzielt werden durch
$ mkvmerge -o MM-komplett.mkv -A MeinFilm.avi MeinFilm.ogg MeinFilm-fügt-Ton-hinzu.ogg
Werfen Sie nun mplayer(TM) an und genießen Sie. Falls Sie mehrere Tonspuren (oder sogar Videospuren) haben, dann können Sie mplayer(TM) mit den Optionen »-vid und »-aid« sagen, welche Spuren er abspielen soll. Diese sind nullbasiert und unterscheiden nicht zwischen Video und Ton.
Falls Sie eine synchronisierte Tonspur benötigen, können Sie dies einfach erledigen. Finden Sie zuerst die Spur-ID der Vorbis-Spur heraus mittels
$ mkvmerge --identify Unsynchron.ogg
Nun können Sie diese ID in der folgenden Befehlszeile benutzen:
$ mkvmerge -o Synchron.mkv -A Quelle.avi -y 12345:200 Unsynchron.ogg
dies würde 200 ms Stille an den Anfang der Tonspur mit der ID 12345, die aus »Unsynchron.ogg« stammt, hinzufügen.
Einige Filme starten korrekt synchronisiert, verlieren jedoch langsam ihre Synchronisierung. Für diese Art von Filmen können Sie einen Verzögerungsfaktor angeben, der für alle Zeitstempel gilt - es werden keine Daten hinzugefügt oder entfernt. Falls Sie diesen Faktor zu groß oder zu klein wählen, erhalten Sie schlechte Ergebnisse. Ein Beispiel war eine umcodierte Episode, die am Ende des 77340 Bilder langen Films um 0,2 Sekunden von der Synchronizität abwich. Bei 29,97 BpS entsprechen 0,2 Sekunden ungefähr 6 Bildern. Also machte ich Folgendes:
$ mkvmerge -o Synchron.mkv -y 23456:0,77346/77340 Unsynchron.mkv
Das Resultat war gut.
Die Synchronisationsoptionen können auf die gleiche Weise auch für Untertitel benutzt werden.
Für Textuntertitel können Sie entweder irgendwelche Windows-Software (wie SubRipper(TM)) oder das Paket subrip(TM) nehmen, das Sie in den Quellen von transcode(1) im Verzeichnis »contrib/subrip« finden. Allgemein läuft dies so ab:
$ tccat -i /Pfad/zur/kopierten/DVD/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o MeinFilm
$ pgm2txt MeinFilm
$ ispell -d american *txt
$ srttool -s -w -i MeinFilm.srtx -o MeinFilm.srt
Die resultierende Datei kann als weitere Eingabedatei für mkvmerge(1) benutzt werden:
$ mkvmerge -o MeinFilm.mkv MeinFilm.avi MeinFilm.srt
Falls Sie die Sprache für eine gegebene Spur angeben möchten, geht dies einfach. Finden Sie zuerst den ISO 639-2-Sprachcode Ihrer Sprache heraus. mkvmerge(1) kann all diese Codes für Sie aufführen:
$ mkvmerge --list-languages
Durchsuchen Sie die Liste nach den Sprachen, die Sie benötigen. Angenommen, Sie haben zwei Tonspuren in eine Matroska(TM)-Datei abgelegt, möchten ihre Sprachcodes setzen und wollen, dass ihre Spur-IDs 2 und 3 sind. Dies können Sie wie folgt erreichen:
$ mkvmerge -o mit-Sprachcodes.mkv --language 2:ger --language 3:dut ohne_Sprachcodes.mkv
Wie Sie sehen, können Sie den Schalter --language mehrfach verwenden.
Vielleicht wollen Sie auch, dass das Abspielprogramm die niederländische Sprache als Standardsprache verwendet. Sie haben außerdem zusätzliche Untertitel, z.B. auf Englisch und Französisch und möchten, dass das Abspielprogramm sie standardmäßig auf Französisch anzeigt. Dies können Sie wie folgt erreichen:
$ mkvmerge -o mit-Sprachcodes.mkv --language 2:ger --language 3:dut --default-track 3 ohne-Sprachcodes.mkv --language 0:eng english.srt --default-track 0 --language 0:fre french.srt
Falls Sie in der Ausgabe von mkvinfo(1) nicht die Sprache oder die Standardspurschalter sehen, die Sie angegeben haben, dann lesen Sie bitte den Abschnitt über Vorgabewerte.
Schalten Sie die Komprimierung für eine Eingabedatei aus.
$ mkvmerge -o Unkomprimiert.mkv --compression -1:none MeinFilm.avi --compression -1:none MeinFilm.srt
Einige der Optionen für mkvmerge(1) benötigen eine Spur-ID als Angabe, für welche Spur sie gelten. Diese Spur-IDs werden durch die Leseprogramme beim demuxen (Trennen der Datenströme) der aktuellen Datei oder wenn mkvmerge(1) mit der Option --identify aufgerufen wird, ausgegeben. Ein Beispiel für einer derartige Ausgabe:
$ mkvmerge -i v.mkv Datei »v.mkv«: Container: Matroska(TM) Spur-ID 0: Video (V_MS/VFW/FOURCC, DIV3) Spur-ID 1: Ton (A_MPEG/L3)
Verwechseln Sie nicht die Spur-IDs, die den Spuren zugewiesen sind, die in der Ausgabe-MKV-Datei abgelegt wurden mit den Spur-IDs der Eingabedateien. Nur die Spur-IDs der Eingabedateien werden für Optionen benutzt, die diese Werte benötigen.
Beachten Sie auch, dass jede Eingabedatei ihre eigene Gruppe von Spur-IDs hat. Daher ändert sich die Spur-ID für die Datei »Datei1.ext«, die von »mkvmerge --identify« gemeldet wurde, nicht, unabhängig davon, wie viele andere Eingabedateien es gibt oder an welcher Stelle »Datei1.ext« benutzt wird.
Spur-IDs werden wie folgt zugeteilt:
Die Optionen, die die Spur-IDs benutzen, enthalten in der Beschreibung »TID«. Die folgenden Optionen verwenden die Spur-IDs ebenfalls: --audio-tracks, --video-tracks, --subtitle-tracks, --button-tracks und --track-tags.
Es gibt mehrere IDs, die eine spezielle Bedeutung haben und nicht in der Ausgabe während der Identifikation auftauchen.
Die spezielle Spur-ID »-1« ist ein Platzhalter und wendet den angegebenen Schalter auf alle Spuren an, die aus einer Eingabedatei gelesen werden.
Die spezielle Spur-ID »-2« bezieht sich auf die Kapitel einer Quelldatei. Momentan unterstützt nur die Option --sync diese spezielle ID. Die Option --chapter-sync ... kann alternativ zu --sync -2:... benutzt werden.
Dieser Abschnitt gilt für alle Programme in MKVToolNix, wenn auch nur von mkvmerge(1) die Rede ist.
Jedweder Text in einer Matroska(TM)-Datei wird in UTF-8 codiert. Das bedeutet, dass mkvmerge(1) jede Textdatei, die es liest, ebenso wie jeden auf der Befehlszeile angegebenen Text, von einem Zeichensatz nach UTF-8 umwandeln muss. Im Umkehrschluss bedeutet das auch, dass die Ausgaben von mkvmerge(1) von UTF-8 in diesen Zeichensatz zurück umgewandelt werden müssen, z.B. falls eine nicht englische Übersetzung mit --ui-language benutzt wird oder für einen Text, der aus einer Matroska(TM)-Datei stammt.
mkvmerge(1) erledigt dies automatisch, basierend auf dem Vorhandensein einer Byte-Reihenfolgenmarkierung, kurz BOM (Byte Order Marker) oder der aktuellen Locale des Systems. Wie der Zeichensatz von der Locale geschlussfolgert wird, hängt vom Betriebssystem ab, auf dem mkvmerge(1) läuft.
Textdateien, die mit einem BOM beginnen, sind bereits in einer Erscheinungsform von UTF codiert. mkvmerge(1) untersützt die folgenden fünf Modi: UTF-8, UTF-16 Little und Big Endian sowie UTF-32 Little- und Big Endian. Textdateien mit einem BOM werden automatisch in UTF-8 umgewandelt. Alle Parameter, die andernfalls den Zeichensatz einer solchen Datei ändern würden (z.B. --sub-charset), werden stillschweigend irgnoriert.
Auf UNIX-artigen Systemen benutzt mkvmerge(1) den Systemaufruf setlocale(3), der wiederum die Umgebungsvariablen LANG, LC_ALL und LC_CYPE verwendet. Der resultierende Zeichensatz stammt oft aus der UTF-8- oder der ISO-8859-*-Familie und wird für alle Textdateitransaktionen und für das Codieren aller Zeichenketten auf der Befehlszeile, sowie die Ausgabe an die Konsole benutzt.
Unter Windows wird der für die Konvertierung von Textdateien benutzte Zeichensatz durch einen Aufruf der Systemfunktion GetACP() ermittelt.
Das Auslesen der Kommandozeile geschieht mit der Funktion GetCommandLineW(), die bereits eine Unicode-Zeichenkette zurückliefert. Deshalb wird die Option --command-line-charset unter Windows ignoriert.
Die Konsolenausgabe umfasst drei Szenarien:
Falls die Ausgabe durch cmd.exe selber umgeleitet wurde, wie z.B. mit mkvinfo file.mkv > info.txt, dann wird immer der Zeichensatz UTF-8 benutzt, was nicht geändert werden kann.
Wenn hingegen direkt auf die Konsole geschrieben wird, so wird die Windows-Funktion WriteConsoleW() dafür benutzt, und die Option --output-charset wird ignoriert. Die Konsole sollte in der Lage sein, alle Unicode-Zeichen auszugeben, für deren entsprechende Sprache Sprachunterstützung installiert ist (z.B. könnten chinesische Zeichen in englischen Windows-Versionen nicht ausgegeben werden).
Die folgenden Optionen, die die Angabe des Zeichensatzes ermöglichen, existieren:
Ein Optionsdatei ist eine Datei aus der mkvmerge(1) zusätzliche Befehlszeilenargumente lesen kann. Diese kann benutzt werden, um bestimmte Beschränkungen der Shell oder des Betriebssystems wie eine begrenzte Länge der Befehlszeile zu umgehen, wenn externe Programme ausgeführt werden.
Eine Options-Datei enthält Daten im JSON-Format. Ihr Inhalt muss aus einem gültigen JSON-Array bestehen, das ausschließlich JSON-Zeichenketten enthält. Der Kodierung der Datei muss UTF-8 sein. Die Datei sollte nicht mit einer Byte-Reihenfolgemarkierung (BOM) beginnen; tut sie es aber doch, so wird die Markierung übersprungen.
Die Regeln für das Maskieren spezieller Zeichen innerhalb der JSON-Daten sind diejenigen, die in der offiziellen JSON-Spezifikation (m[blue]RFC 7159m[][4]) genannt werden.
Die Befehlszeile »mkvmerge -o "Meine Datei.mkv" -A "ein Film.avi" Ton.ogg« kann in die folgende JSON-Optionsdatei mit z.B. dem Namen 'Optionen.json' umgewandelt werden:
[ "-o", "c:\\Matroska\\meine Datei.mkv", "--title", "#65", "-A", "ein Film.avi", "Ton.ogg" ]
Matroska(TM) unterstützt das Verknüpfen von Dateien, was einfach heißt, dass eine bestimmte Datei der Vorgänger oder Nachfolger der aktuellen Datei ist. Genauer ausgedrückt werden die Dateien nicht wirklich verknüpft, sondern die Matroska(TM)-Segmente. Da die meisten Dateien wahrscheinlich nur ein Matroska(TM)-Segment enthalten werden, benutzen die folgenden Erklärungen den Begriff »Verknüpfen von Dateien«, obwohl es eigentlich »Verknüpfen von Segmenten« heißen müsste.
Jedes Segment wird durch eine eindeutige 128 Bit lange Segment-UID bezeichnet. Diese UID wird automatisch von mkvmerge(1) erzeugt. Das Verknüpfen wird in erster Linie durch Ablegen der Segment-UIDs (kurz: SID) der vorherigen/nächsten Datei in die Segmentkopfdateninformationen erledigt. mkvinfo(1) gibt diese SIDs aus, falls es sie findet.
Falls eine Datei in mehrere kleinere unterteilt wurde und Verknüpfen verwendet wird, dann werden die Zeitstempel nicht wieder bei 0 beginnen. Sie werden dort fortfahren, wo die letzte Datei aufhörte. Auf diese Weise wird auch dann die absolute Zeit vorgehalten, wenn die vorhergehenden Dateien nicht verfügbar sind (z.B. beim Übertragen). Falls kein Verknüpfen verwendet wird, dann sollten die Zeitstempel für jede Datei bei 0 beginnen. Standardmäßig verwendet mkvmerge(1) kein Verknüpfen von Dateien. Falls Sie es einschalten möchten, können Sie dies mit der Option --link einschalten. Diese Option ist nur nützlich, falls das Aufteilen ebenfalls aktiviert ist.
Unabhängig davon, ob Aufteilung aktiv ist oder nicht, kann der Anwender mkvmerge(1) mitteilen, dass die erstellten Dateien mit speziellen SIDs verknüpft werden sollen. Dies kann mit den Optionen --link-to-previous und --link-to-next erreicht werden. Diese Optionen akzeptieren eine Segment-SID in dem von mkvinfo(1) ausgegebenen Format: 16 hexadezimalen Zahlen zwischen 0x00 und 0xff, denen jeweils »0x« vorangestellt wurde, z.B. »0x41 0xda 0x73 0x66 0xd9 0xcf 0xb2 0x1e 0xae 0x78 0xeb 0xb4 0x5e 0xca 0xb3 0x93«. Alternativ kann eine kürzere Form benutzt werden: 16 hexadezimalen Zahlen zwischen 0x00 und 0xff ohne das vorangestellte »0x« und ohne die Leerzeichen, z.B. »41da7366d9cfb21eae78ebb45ecab393«.
Falls Aufteilen benutzt wird, dann wird die erste Datei mit der durch --link-to-previous und die letzte mit der durch --link-to-next angegebenen SID verknüpft. Falls kein Aufteilen benutzt wird, dann wird die einzige Ausgabedatei mit beiden SIDs verknüpft.
Die Matroska(TM)-Spezifikation legt fest, dass einige Elemente Vorgabewerte haben. Normalerweise wird ein Element, um Platz zu sparen, nicht in die Datei geschrieben, falls sein Wert dem Vorgabewert entspricht. Die Elemente, die der Anwender vielleicht in der Ausgabe von mkvinfo(1) vermisst, sind Sprache und Standardspurschalter. Der Vorgabewert für die Sprache ist Englisch (»eng«) und der Vorgabewert für den Standardspurschalter ist true. Daher wird eine Spur, falls Sie --language 0:eng dafür verwenden, nicht in der Ausgabe von mkvinfo(1) erscheinen.
Vielleicht wollen Sie ein paar Fotos zusammen mit Ihrer Matroska(TM)-Datei aufbewahren oder Sie benutzen SSA-Untertitel und benötigen eine bestimmte TrueType(TM)-Schrift, die wirklich selten vorkommt. In diesen Fällen können Sie die Dateien an die Matroska(TM)-Datei anhängen. Sie werden nicht nur an die Datei angehängt, sondern darin eingebettet. Ein Abspielprogramm kann dann diese Dateien (im Fall mit den Fotos) anzeigen oder sie zum Rendern der Untertitel (im Fall mit der TrueType(TM)-Schrift) verwenden.
Hier nun ein Beispiel, wie eine Foto und eine TrueType(TM)-Schrift an die Ausgabedatei angehängt werden:
$ mkvmerge -o Ausgabe.mkv -A Video.avi Ton.ogg \ --attachment-description "Die Band und ich hinter der Bühne bei einer kleinen Zusammenkunft" \ --attachment-mime-type image/jpeg \ --attach-file Die_Band_und_ich.jpg \ --attachment-description "Die wirkliche seltene und unglaublich gutaussehende Schrift" \ --attachment-mime-type application/octet-stream \ --attach-file wirkliche_coole_Schrift.ttf
Falls eine Matroska(TM)-Datei, die Anhänge enthält, als Eingabedatei benutzt wird, dann wird mkvmerge(1) die Anhänge in die neue Datei kopieren. Die Auswahl, welche Anhänge kopiert werden, kann mit den Optionen --attachments und --no-attachments geändert werden.
Das Matroska(TM)-Kapitelsystem ist leistungsfähiger als das alte bekannte System, das von OGM-Dateien benutzt wird. Die vollständige Spezifikation ist auf m[blue]der Matroska(TM)-Websitem[][1] zu finden.
mkvmerge(1) unterstützt als Eingabe zwei Arten von Kapiteldateien. Das erste Format, »einfaches Kapitelformat« genannt, ist dasselbe, das die OGM-Werkzeuge erwarten. Das zweite Format ist ein XML-basiertes Kapitelformat, das alle Kapitelfunktionalitäten von Matroska(TM) unterstützt.
Abgesehen von dedizierten Kapiteldateien kann mkvmerge(1) Kapitel auch aus anderen Dateiformaten lesen (z.B. MP4, Ogg, Blu-rays oder DVDs).
Dieses Format besteht aus Zeilenpaaren, die mit »CHAPTERxx=« beziehungsweise »CHAPTERxxNAME=« beginnen. Das erste enthält den Startzeitstempel, während das zweite den Titel enthält. Hier ein Beispiel:
CHAPTER01=00:00:00.000 CHAPTER01NAME=Einleitung CHAPTER02=00:02:30.000 CHAPTER02NAME=Baby bereitet sich vor zu rocken CHAPTER03=00:02:42.300 CHAPTER03NAME=Baby stellt das Haus auf den Kopf
mkvmerge(1) wird jedes Zeilenpaar in ein Matroska(TM)-ChapterAtom umwandeln. Es setzt keine ChapterTrackNumber, das heißt, dass alle Kapitel für alle Spuren in der Datei gelten.
Falls dies eine Textdatei ist, muss möglicherweise eine Umwandlung des Zeichensatzes durchgeführt werden. Eine Erklärung, wie mkvmerge(1) Zeichensätze umwandelt, finden Sie im Abschnitt über Textdateien und Zeichensätze.
Das XML-basierte Kapitelformat sieht wie in diesem Beispiel aus:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Chapters SYSTEM "Matroska-Kapitel.dtd"> <Chapters> <EditionEntry> <ChapterAtom> <ChapterTimeStart>00:00:30.000</ChapterTimeStart> <ChapterTimeEnd>00:01:20.000</ChapterTimeEnd> <ChapterDisplay> <ChapterString>Ein kurzes Kapitel</ChapterString> <ChapterLanguage>eng</ChapterLanguage> </ChapterDisplay> <ChapterAtom> <ChapterTimeStart>00:00:46.000</ChapterTimeStart> <ChapterTimeEnd>00:01:10.000</ChapterTimeEnd> <ChapterDisplay> <ChapterString>Ein Teil dieses kurzen Kapitels</ChapterString> <ChapterLanguage>eng</ChapterLanguage> </ChapterDisplay> </ChapterAtom> </ChapterAtom> </EditionEntry> </Chapters>
Mit diesem Format sind drei Dinge möglich, die mit dem einfachen Kapitelformat nicht möglich sind:
Die Mkvtoolnix-Distribution enthält einige Beispieldateien im Unterverzeichnis doc, die als Basis benutzt werden können.
Im Folgenden werden unterstützte XML-Tags, ihre Datentypen und, falls zweckmäßig, der gültige Bereich für ihre Werte aufgeführt:
Chapters (master) EditionEntry (master) EditionUID (unsigned integer, valid range: 1 <= value) EditionFlagHidden (unsigned integer, valid range: 0 <= value <= 1) EditionFlagDefault (unsigned integer, valid range: 0 <= value <= 1) EditionFlagOrdered (unsigned integer, valid range: 0 <= value <= 1) ChapterAtom (master) ChapterAtom (master) ChapterUID (unsigned integer, valid range: 1 <= value) ChapterTimeStart (unsigned integer) ChapterTimeEnd (unsigned integer) ChapterFlagHidden (unsigned integer, valid range: 0 <= value <= 1) ChapterFlagEnabled (unsigned integer, valid range: 0 <= value <= 1) ChapterSegmentUID (binary, valid range: 1 <= length in bytes) ChapterSegmentEditionUID (unsigned integer, valid range: 1 <= value) ChapterPhysicalEquiv (unsigned integer) ChapterTrack (master) ChapterTrackNumber (unsigned integer, valid range: 1 <= value) ChapterDisplay (master) ChapterString (UTF-8 string) ChapterLanguage (UTF-8 string) ChapterCountry (UTF-8 string) ChapterProcess (master) ChapterProcessCodecID (unsigned integer) ChapterProcessPrivate (binary) ChapterProcessCommand (master) ChapterProcessTime (unsigned integer) ChapterProcessData (binary)
mkvmerge(1) kann Kapitel aus unverschlüsselten Blu-rays lesen. Dafür können Sie den Pfad zu einer der MPLS-Abspiellisten mit dem Parameter --chapters angeben.
Beispiel: --chapters /srv/blurays/BigBuckBunny/BDMV/PLAYLIST/00001.mpls
Wenn MKVToolNix mit der libdvdread(TM)-Bibliothek compiliert wurde, kann mkvmerge(1) Kapitel von DVDs lesen. Dafür können Sie den Pfad zu einer der Dateien oder Ordner auf der DVD mit dem Parameter --chapters angeben. Da DVDs mehr als einen Titel enthalten können und jeder Titel seinen eigenen Satz an Kapitel enthält, können Sie einen Doppelpunkt und die gewünschte Titelnummer an das Ende des Dateinamenarguments anhängen. Die Titelnummer ist standardmäßig 1.
Beispiel: --chapters /srv/dvds/BigBuckBunny/VIDEO_TS:2
Beim Aufteilen von Dateien wird mkvmerge(1) die Kapitel ebenfalls korrekt anpassen. Dies bedeutet, dass jede Datei nur die Kapiteleinträge beinhaltet, die für die gelten, und dass die Zeitstempel versetzt werden, damit sie zu den neuen Zeitstempeln jeder Ausgabedatei passen.
mkvmerge(1) kann Kapitel aus Matroska(TM)-Quelldateien kopieren, es sei denn, dies wurde explizit mit der Option --no-chapters deaktiviert. Die Kapitel aus allen Quellen (Matroska(TM)-Dateien, Ogg-Dateien, MP4-Dateien, Kapiteltextdateien) werden üblicherweise nicht zusammengefügt, landen aber in separaten ChapterEditions. Nur falls Kapitel aus mehreren Matroska(TM)- oder XML-Dateien gelesen werden, die dieselbe Fassung von UIDs gemeinsam benutzen, werden Kapitel in eine einzige ChapterEdition-Datei zusammengefügt. Falls ein derartiges Zusammenfügen in anderen Situationen ebenfalls erwünscht ist, dann muss der Anwender zuerst die Kapitel aus allen Quellen mit mkvextract(1) extrahieren, die XML-Dateien zusammenfügen und sie dann hinterher multiplexen (ihre Datenströme zusammenfügen).
Matroska(TM)s Tag-System ist den von anderen Containern verwendeten Systemen ähnlich: ein Satz aus SCHLÜSSEL=WERT-Paaren. In Matroska(TM) können diese Tags jedoch ebenfalls verschachtelt werden, und sowohl SCHLÜSSEL als auch WERT sind Elemente für sich. Die Beispieldatei example-tags-2.xml zeigt, wie dieses System benutzt wird.
Matroska(TM)-Tags gelten nicht automatisch für die gesamte Datei. Sie können, aber sie können auch für unterschiedliche Teile der Datei gelten: für eine oder mehrere Spuren, für ein oder mehrere Kapitel oder sogar für eine Kombination von beiden. Die m[blue]Matroska(TM)-Spezifikationm[][5] liefert weitere Einzelheiten zu diesem Umstand.
Eine wichtige Tatsache ist, dass Tags mit Spuren oder Kapiteln anhand des Tag-Elements Targets verknüpft werden und dass die für diese Verknüpfungen verwendeten UIDs nicht die sonst überall von mkvmerge(1) benutzten Spur-IDs sind. Stattdessen sind die verwendeten Nummern die UIDs, die mkvmerge(1) automatisch berechnet (falls die Spur aus einer Datei stammt, die ein anderes Format als Matroska(TM) hat) oder die aus der Quelldatei kopiert wurden, falls die Quelldatei der Spur eine Matroska(TM)-Datei ist. Daher ist es schwierig zu wissen, welche UIDs in dem Tag benutzt werden sollen, bevor die Datei an mkvmerge(1) übergeben wurde.
mkvmerge(1) kennt zwei Optionen, mit denen Sie Matroska(TM)-Dateien Tags hinzufügen können: die Optionen --global-tags und --tags. Der Unterschied besteht darin, dass erstere, --global-tags, dafür sorgen wird, dass die Tags für die gesamte Datei gelten, indem diese oben erwähnten Targets-Elemente entfernt werden. Die letztere Option, --tags, fügt automatisch die UID hinzu, die mkvmerge(1) für den mit dem TID-Teil der Option --tags angegebenen Tag erzeugt.
Sagen wir mal, Sie möchten einer aus einem AVI gelesenen Videospur Tags hinzufügen. mkvmerge --identify Datei.avi teilt Ihnen mit, dass die ID der Videospur 0 ist (verwechseln Sie diese ID nicht mit der UID). Deshalb erstellen Sie Ihre Tag-Datei, lassen alle Targets-Elemente weg und rufen mkvmerge(1) auf:
$ mkvmerge -o Datei.mkv --tags 0:Tags.xml Datei.avi
mkvmerge(1) unterstützt ein XML-basiertes Tag-Dateifomat. Das Format ist sehr eng an die m[blue]Matroska(TM)-Spezifikationm[][5] angelehnt. Sowohl die Binär- als auch die Quelldistribution von MKVToolNix bringen eine Musterdatei namens example-tags-2.xml mit, die einfach alle bekannten Tags aufführt und als Basis für Tag-Dateien in der Praxis benutzt werden kann.
Die Grundlagen sind:
Das neue Tag-System vom Matroska(TM) kennt nur zwei Datentypen, eine UTF-8-Zeichenkette und einen binären Typ. Erstere wird für den Namen und das Element <String> des Tags benutzt, während der binäre Typ für das Element <Binary> verwendet wird.
Da die binären Daten selbst nicht in eine XML-Datei passen würden, unterstützt mkvmerge(1) zwei weitere Methoden zum Speichern binärer Daten. Falls der Inhalt eines XML-Tags mit einem »@« beginnt, wird der folgende Text als ein Dateiname angesehen. Der zugehörige Inhalt der Datei wird in das Matroska(TM)-Element kopiert.
Andernfalls wird erwartet, dass die Daten Base64-codiert vorliegen. Dies ist eine Codierung, die binäre Daten in einen eingeschränkten Satz von ASCII-Zeichen umwandelt und z.B. in E-Mail-Programmen benutzt wird. mkvextract(1) wird für binäre Elemente Base64-codierte Daten ausgeben.
Das missbilligte Tag-System kennt ein paar weitere Datentypen, die in der offiziellen Matroska(TM)-Tag-Spezifikation zu finden sind. Da mkvmerge(1) dieses System nicht mehr unterstützt, werden diese Typen hier nicht beschrieben.
Im Folgenden werden unterstützte XML-Tags, ihre Datentypen und, falls zweckmäßig, der gültige Bereich für ihre Werte aufgeführt:
Tags (master) Tag (master) Targets (master) TargetTypeValue (unsigned integer) TargetType (UTF-8 string) TrackUID (unsigned integer) EditionUID (unsigned integer) ChapterUID (unsigned integer) AttachmentUID (unsigned integer) Simple (master) Simple (master) Name (UTF-8 string) TagLanguage (UTF-8 string) DefaultLanguage (unsigned integer) String (UTF-8 string) Binary (binary)
Mit einer Segmentinformations-XML-Datei ist es möglich, bestimmte Werte im Kopffeld »segment information« einer Matroska(TM)-Datei zu setzen. Alle diese Werte können nicht über andere Befehlszeilenoptionen gesetzt werden.
Andere »segment information«s-Kopffelder können über Befehlszeilenoptionen gesetzt werden, jedoch nicht über die XML-Datei. Dies umfasst z.B. die Optionen --title und --timestamp-scale.
Es gibt andere Elemente, die weder über Befehlszeilenoptionen noch über die XML-Dateien gesetzt werden können. Dies beinhaltet die folgenden Elemente: DateUTC (auch als »muxing date« bekannt), MuxingApp, WritingApp und Duration. Sie werden immer von mkvmerge(1) selbst gesetzt.
Im Folgenden werden unterstützte XML-Tags, ihre Datentypen und, falls zweckmäßig, der gültige Bereich für ihre Werte aufgeführt:
Info (master) SegmentUID (binary, valid range: length in bytes == 16) SegmentFilename (UTF-8 string) PreviousSegmentUID (binary, valid range: length in bytes == 16) PreviousSegmentFilename (UTF-8 string) NextSegmentUID (binary, valid range: length in bytes == 16) NextSegmentFilename (UTF-8 string) SegmentFamily (binary, valid range: length in bytes == 16) ChapterTranslate (master) ChapterTranslateEditionUID (unsigned integer) ChapterTranslateCodec (unsigned integer) ChapterTranslateID (binary)
Das Matroska(TM)-Dateilayout ist ziemlich flexibel. mkvmerge(1) wird eine Datei auf eine vordefinierte Art erzeugen. Die resultierende Datei sieht wie folgt aus:
[EBML head] [segment {meta seek #1} [segment information] [track information] {attachments} {chapters} [cluster 1] {cluster 2} ... {cluster n} {cues} {meta seek #2} {tags}]
Die Elemente in geschweiften Klammern sind optional und hängen vom Inhalt und den benutzten Optionen ab. Ein paar Anmerkungen:
Die kürzest mögliche Matroska(TM)-Datei würde etwa so aussehen:
[EBML head] [segment [segment information] [track information] [cluster 1]]
Dies könnte bei reinen Tondateien der Fall sein.
mkvmerge(1) erlaubt dem Benutzer, die Zeitstempel für eine bestimmte Spur selbst auszuwählen. Dies kann benutzt werden, um Dateien mit variabler Videobildrate zu erstellen oder Lücken in den Ton einzuarbeiten. In diesem Fall ist ein Bild die Einheit, die mkvmerge(1) separat pro Matroska(TM)-Block erstellt. Für Video ist dies genau ein Bild, für Ton ist dies ein Paket des speziellen Audiotyps. Dies wäre z.B. für AC-3 ein Paket, das 1536-Samples enthält.
Zeitstempeldateien, die benutzt werden, wenn Spuren aneinander angehängt werden, dürfen nur für den ersten Teil in einer Kette von Spuren angegeben werden. Falls Sie zum Beispiel zwei Dateien, v1.avi und v2.avi, anhängen und dabei Zeitstempel verwenden möchten, muss Ihre Befehlszeile etwa so aussehen:
$ mkvmerge ... --timestamps 0:meine_Zeitstempel.txt v1.avi +v2.avi
Es gibt vier Formate, die mkvmerge(1) bekannt sind. Die erste Zeile enthält immer die Versionsnummer. Leere Zeilen, Zeilen, die nur Leerräume enthalten und Zeilen, die mit »#« beginnen, werden ignoriert.
Dieses Format beginnt mit der Versionszeile. Die zweite Zeile deklariert die Standardanzahl von Bildern pro Sekunde (BpS). Alle folgenden Zeilen enthalten drei durch Kommas getrennte Zahlen: das Startbild (0 ist das erste Bild), das Endbild und die Anzahl der Bilder in diesem Bereich. Die BpS sind eine Fließkommazahl mit dem Punkt ».« als Dezimalpunkt. Die Bereiche können Lücken enthalten, für die die Standard-BpS benutzt werden. Ein Beispiel:
# Zeitstempelformat v1 assume 27.930 800,1000,25 1500,1700,30
In diesem Format enthält jede Zeile einen Zeitstempel für das zugehörige Bild. Dieser Zeitstempel muss mit einer Genauigkeit von Millisekunden angegeben werden. Er kann eine Fließkommazahl sein, muss aber nicht. Sie müssen mindestens so viele Zeitstempelzeilen angeben, wie es Bilder in der Spur gibt. Die Zeitstempel müssen sortiert sein. Beispiel für 25 bps:
# Zeitstempelformat v2 0 40 80
In diesem Format enthält jede Zeile eine Dauer in Sekunden, gefolgt von einer optionalen Zahl von Bildern pro Sekunde. Beide können Fließkommazahlen sein. Falls die Zahl der Bilder pro Sekunde nicht vorliegt, wird die Voreinstellung benutzt. Für Audio sollten Sie den Codec die Bildzeitstempel selbst berechnen lassen. Dazu sollten Sie 0,0 als Anzahl der Bilder pro Sekunde verwenden. Sie können auch Lücken im Datenstrom erzeugen, indem Sie das Schlüsselwort »gap« gefolgt von der Dauer der Lücke benutzen. Beispiel einer Audiodatei:
# Zeitstempelformat v3 assume 0.0 25.325 7.530,38.236 gap, 10.050 2.000,38.236
Dieses Format ist identisch mit dem Format v2. Der einzige Unterschied besteht darin, dass Zeitstempel nicht sortiert werden müssen. Dieses Format sollte so gut wie nie benutzt werden.
mkvmerge(1) beendet sich mit einem von drei Rückgabewerten:
mkvmerge(1) verwendet die Standardvariablen, die die Locale des System bestimmen (d.h. LANG und die LC_*-Familie). Zusätzliche Variablen:
MKVMERGE_DEBUG, MKVTOOLNIX_DEBUG und ihre Kurzform MTX_DEBUG
MKVMERGE_ENGAGE, MKVTOOLNIX_ENGAGE und ihre Kurzform MTX_ENGAGE
mkvinfo(1), mkvextract(1), mkvpropedit(1), mkvtoolnix-gui(1)
Die neuste Version kann immer auf m[blue]der MKVToolNix-Homepagem[][6] gefunden werden.
Moritz Bunkus <moritz@bunkus.org>