mkvmerge -- fügt Multimedia-Datenströme in eine Matroska(tm)-Datei zusammen.

# 1. Übersicht

mkvmerge globale Optionen {-o Ausgabe} Optionen1 {Datei1} Optionen2 {Datei2} @Optionendatei.json

# 2. Beschreibung

Dieses Programm nimmt die Eingabe von mehreren Mediendateien und vereinigt ihre Datenströme (alle oder nur eine Auswahl) in eine Matroska(tm)-Datei. Siehe die Matroska-Website.

Important:

Die Reihenfolge der Befehlszeilenoptionen ist wichtig. Bitte lesen Sie den Abschnitt »Reihenfolge der Optionen«, falls sie ein neuer Nutzer des Programms sind.

## 2.1. Globale Optionen

Option | Description
--- | ---
-v, --verbose | erhöht die Detailstufe.
-q, --quiet | unterdrückt die Statusausgabe.
-o, --output Dateiname | schreibt in die Datei Dateiname. Falls Aufteilung benutzt wird, wird dieser Parameter etwas anders behandelt. Einzelheiten finden Sie in der Erläuterung der Option --split.
-w, --webm | erstellt eine WebM-konforme Datei. Dies wird auch eingeschaltet, falls die Namensendung der Ausgabedatei »webm« ist. Dieser Modus erzwingt mehrere Einschränkungen. Die einzigen erlauben Codecs sind VP8-, VP9-Video und Opus-, Vorbis-Tonspuren. Das Kopfelement DocType wird in »webm« geändert. 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 | setzt den allgemeinen Titel für die Ausgabedatei, z.B. den Namen des Films.
--default-language Sprachcode | Setzt das Standard-Sprachkürzel, das für alle Spuren benutzt wird, für die keine Sprache mit der Option --language angegeben wurde und für die der Quellcontainer keine Sprache bereitstellt. Das Standard-Sprachkürzel ist das für »undefiniert« stehende »und«.

## 2.2. Handhabung von Segmentinformationen (globale Optionen)

Option | Description
--- | ---
--segmentinfo Dateiname.xml | liest Segmentinformationen aus einer XML-Datei. Diese Datei kann die Segmentfamilie UID enthalten, die Segment-UID und die vorherigen und nächsten Segment-UID-Elemente. Eine Beispieldatei und ein DTD sind in dem veröffentlichten MKVToolNix enthalten. Einzelheiten finden Sie im Abschnitt weiter unten über Segmentinformations-XML-Dateien.
--segment-uid SID1,SID2,… | setzt die zu verwendenden UIDs. Dies ist eine durch Kommas getrennte Liste von 128-Bit-Sgement-UIDs in der gewöhnlichen UID-Form: Hexadezimalzahlen mit oder ohne Präfix »0x«, mit oder ohne Leerzeichen, exakt 32 Ziffern lang. 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.

## 2.3. Handhabung von Kapiteln und Tags (globale Optionen)

Option | Description
--- | ---
--chapter-language Sprachcode | setzt den ISO-639-2-Sprachcode, der für jeden Kapiteleintrag geschrieben wurde. Voreinstellung ist »eng«. Einzelheiten finden Sie im nachfolgenden Abschnitt über Kapitel. 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 | setzt den Zeichensatz, der für die Umwandlung einfacher Kapiteldateien in UTF-8 verwendet wird. Eine Erklärung, wie mkvmerge(1) Zeichensätze umwandelt, finden Sie im Abschnitt über Textdateien und Zeichensätze. 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]] | passt die Zeitstempel von Kapiteln in der folgenden Quelldatei um d ms an. Alternativ kann die Option --sync mit der speziellen Spur-ID -2 benutzt werden (siehe Abschnitt Spezielle Spur-IDs)." 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 | mkvmerge(1) kann automatisch Kapitel erzeugen. Die folgenden zwei Modi werden momentan unterstützt: 'when-appending' – Dieser Modus erzeugt ein Kapitel am Anfang sowie ein weiteres Kapitel jedes Mal, wenn eine Datei angehängt wird. 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). Note: mkvmerge(1) benötigt eine Video- oder Audio-Spur, um feststellen zu können, wann eine neue Datei angehängt wird. Falls eine oder mehr Videospuren gemuxt werden, so wird die erste davon benutzt. Andernfalls wird die erste Audio-Spur benutzt. 'interval: Zeit-Spec' – Dieser Modus erzeugt ein Kapitel in festen Zeitabständen, die durch Zeit-Spec angegeben werden. Das Format folgt entweder der Form HH:MM:SS.nnnnnnnnn, oder es ist eine Zahl gefolgt von einer der Einheiten 's', 'ms' oder 'us'. 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 | Dies setzt die Vorlage für durch die Option --generate-chapters erzeugte Kapitelnamen. Falls die Option nicht angegeben wurde, wird der Standardwert 'Kapitel <NUM:2>' benutzt. 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: %h – Stunden %H – Stunden, mit Nullen auf zwei Stellen aufgefüllt %m – Minuten %M – Minuten, mit Nullen auf zwei Stellen aufgefüllt %s – Sekunden %S – Sekunden, mit Nullen auf zwei Stellen aufgefüllt %n – Nanosekunden mit neun Stellen %<1-9>n – Nanosekunden mit bis zu neun Stellen (z.B. drei Stellen mit %3n)
--cue-chapter-name-format Format | mkvmerge(1) unterstützt das Lesen von CUEsheets für Audiodateien als Eingabe für Kapitel. CUEsheets enthalten normalerweise für jeden Indexeintrag die Einträge PERFORMER (»Interpret«) und TITLE (»Titel«). mkvmerge(1) benutzt diese beiden Zeichenketten, um den Kapitelnamen aufzubauen. Mit dieser Option kann das für diesen Namen verwendete Format gesetzt werden. 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: %p wird durch die Zeichenkette PERFORMER des aktuellen Eintrags ersetzt, %t wird durch die Zeichenkette TITLE des aktuellen Eintrags ersetzt, %n wird durch die aktuelle Spurnummer ersetzt und %N wird durch die aktuelle Spurnummer, aufgefüllt mit einer führenden Null, falls sie kleiner als zehn ist, ersetzt.
--chapters Dateiname | liest Kapitelinformationen aus der Datei Dateiname. Einzelheiten finden Sie im nachfolgenden Abschnitt über Kapitel.
--global-tags Dateiname | liest globale Tags aus der Datei Dateiname. Einzelheiten finden Sie im nachfolgenden Abschnitt über Tags.

## 2.4. Allgemeine Ausgabesteuerung (fortgeschrittene globale Optionen)

Option | Description
--- | ---
--track-order FID1:TID1,FID2:TID2,… | Diese Option ändert die Reihenfolge, in der die Spuren für eine Eingabedatei erstellt werden. Das Argument ist eine durch Kommas getrennte Liste von ID-Paaren. Jedes Paar enthält zuerst die Datei-ID (FID1), die einfach die Zahl ist, an welcher Stelle auf der Befehlszeile, beginnend bei 0, die Datei erscheint. Als zweites kommt die Spur-ID (TID1) dieser Datei. Falls irgendwelche Spuren weggelassen werden, dann werden diese Spuren erstellt, nachdem die mit dieser Option angegebenen erstellt wurden.
--cluster-length Spezifikation | begrenzt die Anzahl von Datenblöcken oder die Laufzeit von Daten in jedem Cluster. Der Parameter Spezifikation kann entweder eine Zahl n ohne eine Einheit oder eine Zahl d sein, der »ms« folgt. 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 | sagt mkvmerge(1), dass es ein Metasuchelement am Ende der Datei erstellen soll, das alle Cluster enthält. Siehe auch den Abschnitt über das Matroska-Datei-Layout.
--timestamp-scale Faktor | erzwingt den Faktor Faktor für die Zeitstempelskala. Gültige Werte sind im Bereich 1000..10000000 und der Spezialwert -1. 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 | schreibt die Laufzeiten für alle Blöcke. Dies erhöht die Größe der Datei und bietet dem, der es abspielt, im Moment keinen zusätzlichen Wert.
--no-cues | teilt mkvmerge(1) mit, dass es die Indexdaten nicht erzeugen und schreiben soll, die mit einem Index in einem AVI verglichen werden können. Matroska(tm)-Dateien können ohne die Indexdaten abgespielt werden, aber das Durchsuchen ist möglicherweise ungenauer und langsamer. Benutzen Sie dies nur, falls Sie wirklich dringend Platz brauchen oder für Testzwecke. Siehe auch die Option --cues, die für jede Eingabedatei angegeben werden kann.
--no-date | Standardmäßig setzt mkvmerge(1) das "Datum"-Segment-Informationen-Feld auf die Uhrzeit & Datum, als das Multiplexen gestartet wurde. Mit dieser Option wird das Feld gar nicht geschrieben.
--disable-lacing | deaktiviert das Zusammenbinden aller Spuren, Dies erhöht die Größe der Datei, insbesondere dann, wenn es viele Tonspuren gibt. Diese Option ist nicht für den täglichen Gebrauch gedacht.
--disable-track-statistics-tags | Normalerweise schreibt mkvmerge(1) bestimmte Tags mit Statistiken für jede Spur. Falls solche Tags bereits existieren, werden sie überschrieben. Die Tags lauten BPS, DURATION, NUMBER_OF_BYTES und NUMBER_OF_FRAMES. 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 | Normalerweise schreibt mkvmerge(1) die beiden neuen LanguageIETF-Spurkopfdaten- und ChapLanguageIETF-Kapitel-Elemente in Ergänzung zu den alten Language- und ChapLanguage-Elementen. Wenn diese Option benutzt wird, so werden nur die beiden alten Elemente geschrieben.

## 2.5. Datei aufteilen, verknüpfen, anhängen und verketten (weitere globale Optionen)

Option | Description
--- | ---
--split Spezifikation | teilt die Ausgabedatei nach der angegebenen Größe oder Zeit auf. Bitte beachten Sie, dass Spuren nur kurz vor einem Schlüsselbild geteilt werden können. Daher kann sich der Aufteilungspunkt ein wenig von dem unterscheiden, den der Benutzer angegeben hat. Derzeit unterstützt mkvmerge(1) vier verschiedene Modi. Aufteilen anhand der Größe 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. Aufteilen nach einer Laufzeit 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. Aufteilen nach bestimmten Zeitstempeln 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. Aufbewahren bestimmter Teile durch die Angabe von Zeitstempelbereichen, während andere verworfen werden Syntax: --split parts: Start1-Ende1[,[+]Start2-Ende2[,[+]Start3-Ende3…]] Beispiele: --split parts:00:01:20-00:02:45,00:05:50-00:10:30 --split parts:00:01:20-00:02:45,+00:05:50-00:10:30 --split parts:-00:02:45,00:05:50- 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. Note: Beachten Sie, dass mkvmerge(1) nur Entscheidungen über das Aufteilen an Schlüsselbildpositionen trifft. Dies gilt sowohl für den Anfang als auch das Ende von jedem Bereich. Daher wird mkvmerge(1) sogar dann mit der Ausgabe der Bilder bis vor das nächste Bild fortfahren, wenn der Zeitstempel zwischen zwei Schlüsselbildern liegt. Aufbewahren bestimmter Teile durch Angabe von Bild-/Feldnummerbereichen während andere verworfen werden Syntax: --split parts-frames: Start1-Ende1[,[+]Start2-Ende2[,[+]Start3-Ende3…]] Beispiele: --split parts-frames:137-258,548-1211 --split parts-frames:733-912,+1592-2730 --split parts-frames:-430,2512- 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. Note: Beachten Sie, dass mkvmerge(1) nur Entscheidungen über das Aufteilen an Schlüsselbildpositionen trifft. Dies gilt sowohl für den Anfang als auch das Ende jedes Bereichs. Daher wird mkvmerge(1) sogar dann mit der Ausgabe der Bilder bis vor das nächste Bild fortfahren, wenn die Bild-/Feldnummer zwischen zwei Schlüsselbildern liegt. Im Beispiel 1 wird mkvmerge(1) zwei Dateien erstellen. Die erste wird den Inhalt beginnend beim ersten Schlüsselbild bei oder nach 137 bis vor das erste Schlüsselbild bei oder nach 258 enthalten. Die zweite Datei wird den Inhalt beginnend bei 548 bis 1211 enthalten. 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. Note: Die mit diesem Argument angegebenen Zahlen werden basierend auf der Zahl der ausgegebenen Matroska(tm)-Blöcke interpretiert. Ein einzelner Matroska(tm)-Block enthält entweder ein komplettes Bild (für fortlaufenden Inhalt) oder ein einzelnes Feld (für Inhalt im Halbbildverfahren). mkvmerge(1) unterscheidet nicht zwischen diesen beiden und zählt einfach nur die Anzahl der Blöcke. Zum Beispiel: Falls jemand nach dem 25. kompletten Bild bei Inhalt im Halbbildverfahren aufteilen möchte, müsste er 50 als Aufteilungspunkt benutzen (zwei Felder pro komplettem Bild). Aufteilen nach bestimmten Bildern/Feldern 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. Note: Die mit diesem Argument angegebenen Zahlen werden basierend auf der Zahl der ausgegebenen Matroska(tm)-Blöcke interpretiert. Ein einzelner Matroska(tm)-Block enthält entweder ein komplettes Bild (für fortlaufenden Inhalt) oder ein einzelnes Feld (für Inhalt im Halbbildverfahren). mkvmerge(1) unterscheidet nicht zwischen diesen beiden und zählt einfach nur die Anzahl der Blöcke. Zum Beispiel: Falls jemand nach dem 25. kompletten Bild bei Inhalt im Halbbildverfahren aufteilen möchte, müsste er 50 als Aufteilungspunkt benutzen (zwei Felder pro komplettem Bild). Aufteilen vor bestimmten Kapiteln 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. Note: Das Matroska-Dateiformat unterstützt beliebig tief verschachtelte Kapitelstrukturen, »Editionseinträge« und »Kapitelelemente« genannt. Dieser Modus betrachtet allerdings nur die obersten Ebenen der Kapitel über alle Editionseinträge hinweg. 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 | verknüpft Dateien mit anderen, wenn die Ausgabedatei aufgeteilt wird. Einzelheiten finden Sie im nachfolgenden Kapitel über das Verknüpfen von Dateien.
--link-to-previous Segment-UID | verknüpft die erste Ausgabedatei an das Segment mit der durch den Parameter Segment-UID angegebenen Segment-UID. Einzelheiten finden Sie im nachfolgenden Abschnitt über das Verknüpfen von Dateien. 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 | verknüpft die letzte Ausgabedatei an das Segment mit der durch den Parameter Segment-UID angegebenen Segment-UID. Einzelheiten finden Sie im nachfolgenden Kapitel über das Verknüpfen von Dateien. 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 | legt fest, wie Zeitstempel beim Anhängen von Dateien berechnet werden. Der Parameter Modus kann zwei Werte annehmen: »file«, der auch die Voreinstellung ist, und »track«. 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[,…] | Diese Option steuert, an welche Spur eine andere Spur angehängt wird. Jede Spezifikation enthält vier IDs: eine Datei-ID, eine Spur-ID, eine zweite Datei-ID und eine zweite Spur-ID. Das erste Paar aus »Quelldatei-ID« und »Quellspur-ID« kennzeichnet die Spur, die angehängt wird. Das zweite Paar aus »Zieldatei-ID« und »Zielspur-ID« kennzeichnet die Spur, an die die erste angehängt wird. 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.
+ | Ein einzelnes »+« führt dazu, dass die nächste Datei angehängt statt hinzugefügt wird. Das »+« kann außerdem vor den nächsten Dateinamen gesetzt werden. Daher sind die beiden folgenden Befehle identisch:
    $ mkvmerge -o vollständig.mkv Datei1.mkv + Datei2.mkv
    $ mkvmerge -o vollständig.mkv Datei1.mkv +Datei2.mkv
[ Datei1 Datei2 ] | Falls mehrere Dateinamen in eckigen Klammern stehen, dann werden die zweite und alle folgenden Dateien an die erste in den Klammern stehende Datei angehängt. 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 ']'
= | Normalerweise sucht mkvmerge(1) im selben Verzeichnis nach Dateien wie eine Eingabedatei, die den gleichen Basisnamen hat und sich nur in ihrer fortlaufenden Nummer unterscheidet (z.B. »VTS_01_1.VOB«, »VTS_01_2.VOB«, »VTS_01_3.VOB«, etc.) und behandelt alle diese Dateien, als ob sie zu einer einzigen großen Datei verbunden wären. Diese Option, ein einzelnes »=«, veranlasst mkvmerge(1), nicht nach diesen zusätzlichen Dateien zu suchen. 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 ) | Falls mehrere Dateinamen in runden Klammern stehen, dann werden diese Dateien so behandelt, als ob sie in einer einzigen großen Datei verbunden wären, die aus dem Inhalt jeder der Dateien besteht, einer nach der anderen. 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: Sowohl nach der öffnenden als auch vor der schließenden runden Klammer müssen Leerzeichen stehen. Jeder Parameter in runden Klammern wird als Dateiname interpretiert. Daher müssen alle Optionen, die auf diese logische Datei angewandt werden, vor der öffnenden runden Klammer aufgeführt werden. Einige Shells behandeln runde Klammern als Sonderzeichen. Daher müssen Sie sie maskieren oder wie im oben gezeigten Beispiel in Anführungszeichen setzen.

## 2.6. Unterstützung von Anhängen (weitere globale Optionen)

Option | Description
--- | ---
--attachment-description Beschreibung | Klarschriftbeschreibung des folgenden Anhangs. Gilt für die nächste Option --attach-file oder --attach-file-once.
--attachment-mime-type MIME-Typ | MIME-Typ des folgenden Anhangs. Gilt für die nächste Option --attach-file oder --attach-file-once. Eine Liste offiziell anerkannter MIME-Typen kann z.B. auf der IANA-Homepage gefunden werden. Der MIME-Typ ist für einen Anhang vorgeschrieben.
--attachment-name Name | setzt den Namen, der in der Ausgabedatei für diesen Anhang gespeichert wird. Falls diese Option nicht angegeben ist, wird der Name vom Dateinamen des Anhangs abgeleitet, der mit der Option --attach-file oder der Option --attach-file-once vorgegeben wird.
--attach-file Dateiname, --attach-file-once Dateiname | erstellt einen Dateianhang innerhalb der Matroska(tm)-Datei. Der MIME-Typ muss gesetzt worden sein, bevor diese Option benutzt werden kann. Der Unterschied zwischen diesen beiden Formen besteht darin, dass während der Aufteilung die mit --attach-file angehängten Dateien an alle Ausgabedateien angehängt werden, während die mit der Option --attach-file-once angehängten nur an die erste erstellte Datei angehängt werden. Falls keine Aufteilung benutzt wird, tun beide dasselbe. mkvextract(1) kann benutzt werden, um angehängte Dateien aus einer Matroska(tm)-Datei zu extrahieren.

## 2.7. Optionen, die für jede Eingabedatei verwendet werden können

Option | Description
--- | ---
-a, --audio-tracks [!]n,m,… | kopiert die Tonspuren n, m etc. Die Zahlen sind Spur-IDs, die über den Schalter --identify abgefragt werden können. Sie sind nicht nur einfach die Spurnummern (siehe den Abschnitt Spur-IDs). Voreinstellung: alle Tonspuren kopieren. 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,… | kopiert die Videospuren n, m etc. Die Zahlen sind Spur-IDs, die über den Schalter --identify abgefragt werden können. Sie sind nicht nur einfach die Spurnummern (siehe den Abschnitt Spur-IDs). Voreinstellung: alle Videospuren kopieren. 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,… | kopiert die Untertitelspuren n, m etc. Die Zahlen sind Spur-IDs, die über den Schalter --identify abgefragt werden können. Sie sind nicht nur einfach die Spurnummern (siehe den Abschnitt Spur-IDs). Voreinstellung: alle Untertitelspuren kopieren. 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,… | kopiert die Button-Spuren n, m etc. Die Zahlen sind Spur-IDs, die über den Schalter --identify abgefragt werden können. Sie sind nicht nur einfach die Spurnummern (siehe den Abschnitt Spur-IDs). Voreinstellung: alle Button-Spuren kopieren. 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,… | kopiert die Tags für Spuren n, m etc. Die Zahlen sind Spur-IDs, die über den Schalter --identify abgefragt werden können. Sie sind nicht nur einfach die Spurnummern (siehe den Abschnitt Spur-IDs). Voreinstellung: Tags für alle Spuren kopieren. 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],… | kopiert die Anhänge mit den IDs n, m etc. in alle Ausgabedateien oder nur in die erste. Jeder ID kann entweder »:all« folgen (was Voreinstellung ist, wenn nichts eingegeben wird) oder »:first«. Falls Aufteilen aktiv ist, dann werden diese Anhänge, deren IDs mit »:all« angegeben wurden, in alle resultierenden Ausgabedateien kopiert, während die anderen nur in die erste Ausgabedatei kopiert werden. Falls kein Aufteilen aktiv ist, dann haben beide Varianten dieselben Auswirkungen. 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 | keine Tonspur aus dieser Datei kopieren
-D, --no-video | keine Videospur aus dieser Datei kopieren
-S, --no-subtitles | keine Untertitelspur aus dieser Datei kopieren
-B, --no-buttons | keine Button-Spur aus dieser Datei kopieren
-T, --no-track-tags | keine spurspezifischen Tags aus dieser Datei kopieren
--no-chapters | keine Kapitel aus dieser Datei kopieren
-M, --no-attachments | keine Anhänge aus dieser Datei kopieren
--no-global-tags | keine globalen Tags aus dieser Datei kopieren
-y, --sync TID:d[,o[/p]] | passt die Zeitstempel der Spur mit der ID TID um d ms an. Die Spur-IDs sind dieselben, wie die mit --identify angegebenen (siehe den Abschnitt Spur-IDs). 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 | steuert, für welchen Spurenindex Einträge für die angegebene Spur erstellt werden (siehe den Abschnitt Spur-IDs). »none« verhindert das Erstellen von Indexeinträgen. Für »iframes« werden nur Blöcke ohne Vorwärts- oder Rückwärtsbezüge (= IFrames in Videospuren) in das Cuesheet abgelegt. »all« veranlasst mkvmerge(1), Indexeinträge für alle Blöcke zu erstellen, wodurch die Datei sehr groß wird. 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] | setzt den Standardschalter für die angegebene Spur (siehe den Abschnitt Spur-IDs), falls das optionale Argument bool nicht vorhanden ist. Falls der Anwender nicht explizit selbst eine Spur auswählt, dann sollte das Abspielprogramm die Spur bevorzugen, für die der Standardschalter gesetzt ist. Nur eine Spur jeder Art (Ton, Video, Untertitel, Buttons) kann einen gesetzten »Standard«-Schalter haben. Falls der Anwender nicht möchte, dass der Standardspurschalter gesetzt ist, muss er bool für alle Spuren auf 0 setzen. 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] | setzt den Schalter »Abspielen erzwingen« für die angegebene Spur (siehe den Abschnitt Spur-IDs), falls das optionale Argument bool nicht vorhanden ist. Ein Abspielprogramm muss alle Spuren abspielen, für die der Schalter auf 1 gesetzt wurde. 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 | behält für die angegebene Spur nur die BlockAdditions bis hinauf zur Stufe Stufe. Standardmäßig werden alle Stufen aufbewahrt. Diese Option beeinflusst nur bestimmte Arten von Codecs wie WAVPACK4.
--track-name TID:Name | setzt den Spurnamen für die angegebene Spur (siehe den Abschnitt Spur-IDs) auf Name.
--language TID:Sprache | setzt die Sprache der angegebenen Spur (siehe den Abschnitt Spur-IDs). Es sind sowohl ISO 639-2-Sprachcodes als auch ISO 639-1-Ländercodes erlaubt. Die Ländercodes werden automatisch in die Sprachcodes umgewandelt. Alle Sprachcodes einschließlich ihrer ISO 639-2-Codes können mit der Option --list-languages aufgeführt werden. 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 | liest Tags für die Spur mit der Nummer TID aus der Datei Dateiname. Einzelheiten finden Sie im nachfolgenden Abschnitt über Tags.
--aac-is-sbr TID[:0|1] | teilt mkvmerge(1) mit, dass die Spur mit der ID TID vom Typ SBR AAC ist (auch als HE-AAC oder AAC+ bekannt). Diese Option wird benötigt, falls a) die Quelldatei eine AAC-Datei ist (nicht für eine Matroska(tm)-Datei) und b) die AAC-Datei »SBR AAC«-Daten enthält. Der Grund für diesen Schalter ist, dass es technisch unmöglich ist, normale AAC-Daten von SBR AAC zu unterscheiden, ohne das komplette AAC-Bild zu entschlüsseln. Da es mehrere Patentprobleme mit AAC-Entschlüsselungsprogrammen gibt, wird mkvmerge(1) diese Entschlüsselungsstufe niemals enthalten. Daher ist dieser Schalter für SBR AAC-Dateien zwingend notwendig. Die resultierende Datei kann möglicherweise nicht korrekt oder gar nicht wiedergegeben werden, wenn der Schalter weggelassen wird. 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 | Einige Audio-Codecs enthalten einen verlustbehafteten Kern und implementieren verlustfreies Decodieren durch Erweiterungen. Diese Option weist mkvmerge(1) an, nur den Kern zu kopieren, nicht aber die Erweiterungen. Standardmäßig kopiert mkvmerge(1) sowohl den Kern als auch die Erweiterungen. 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 | Einige Audio-Codecs enthalten Kopfdatenfelder, die den Decoder oder das Abspielprogramm anweisen, eine (normalerweise negative) Signalverstärkung für Dialognormalisierung anzuwenden. Diese Option weist mkvmerge(1) an, diese Signalverstärkung zu entfernen oder zu minimieren, indem die entsprechenden Kopfdatenfelder verändert werden. Momentan werden nur AC-3-, DTS- und TrueHD-Spuren von dieser Option beeinflusst.
--timestamps TID:Dateiname | Die Zeitstempel, die für eine bestimmte Spur-ID von Dateiname benutzt werden, werden gelesen. Diese Zeitstempel erzwingen das Überschreiben der normalerweise von mkvmerge(1) berechneten Zeitstempel. Lesen Sie den Abschnitt über externe Zeitstempeldateien.
--default-duration TID:x | erzwingt, dass die Standarddauer einer gegebenen Spur den angegebenen Wert annimmt. Außerdem werden die Zeitstempel der Spur so geändert, dass sie zur Standarddauer passen. Dem Argument x muss »s«, »ms«, »us«, »ns«, »fps«, »p« oder »i« folgen, um die Dauer in Sekunden, Millisekunden, Mikrosekunden, Nanosekunden, Bildern pro Sekunde, fortlaufenden Bildern pro Sekunde beziehungsweise Halbbildern pro Sekunde anzugeben. Die Zahl x selbst kann eine Fließkommazahl oder ein Bruch sein. 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] | Normalerweise ändert mkvmerge(1) nicht die Zeiteinteilungsinformation (Bild-/Feldrate), die im Video-Bitstrom gespeichert ist. Mit dieser Option wird diese Information angepasst, damit sie zur Zeiteinteilungsinformation des Containers passt. Die Zeiteinteilungsinformation des Containers kann aus verschiedenen Quelle stammen: von der Befehlszeile (siehe die Option --default-duration), dem Quell-Container oder kann aus dem Bitstrom abgeleitet sein. Note: Dies wurde bisher nur für AVC/H.264-Videospuren implementiert.
--nalu-size-length TID:n | erzwingt eine Länge der NALU-Größe von n Byte. Dieser Parameter wird nur benutzt, falls der einfache AVC/H.264-Datenströme verwendet wird. Falls er weggelassen wird, ist die Voreinstellung 4 Byte, es gibt aber Dateien, die Bilder oder Teile enthalten, die alle kleiner als 65536 Byte sind. Für derartige Dateien können Sie diesen Parameter benutzen und die Größe auf 2 vermindern.
--compression TID:n | wählt die Komprimierungsmethode aus, die für diese Spur benutzt wird. Beachten Sie, dass das Abspielprogramm diese Methode ebenfalls unterstützen muss. Gültige Werte sind »none«, »zlib« und »mpeg4_p2«/»mpeg4p2«. 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.

## 2.8. Optionen, die nur für Videospuren gelten

Option | Description
--- | ---
-f, --fourcc TID:FourCC | erzwingt, dass FourCC den angegebenen Wert annimmt; funktioniert nur bei Videospuren im »MS-Kompatibilitätsmodus«.
--display-dimensions TID:BreitexHöhe | Matroska(tm)-Dateien enthalten zwei Werte, die die Anzeigeeigenschaften setzen, auf die ein Abspielprogramm das Bild bei der Wiedergabe skalieren sollte: Anzeigebreite und Anzeigehöhe. Diese Werte können mit dieser Option gesetzt werden, z.B. »1:640x480«. 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 | Matroska(tm)-Dateien enthalten zwei Werte, die die Anzeigeeigenschaften setzen, auf die ein Abspielprogramm das Bild bei der Wiedergabe skalieren sollte: Anzeigebreite und Anzeigehöhe. Mit dieser Option wird mkvmerge(1) automatisch die Anzeigebreite und Anzeigehöhe basierend auf der Originalbreite und -höhe berechnen und das mit dieser Option angegebene Seitenverhältnis berücksichtigen. Das Verhältnis kann entweder als Fließkommazahl Verhältnis oder als Bruch »Breite/Höhe«, z.B. »16/9«, angegeben werden. 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, das Seitenverhältnis zu setzen, ist die Angabe eines Faktors. Das Originalseitenverhältnis wird zuerst mit diesem Faktor multipliziert und hinterher als Zielseitenverhältnis benutzt. 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 | setzt die Parameter für das Abschneiden von Bildpunkten einer Videospur auf die angegebenen Werte.
--colour-matrix TID:n | Setzt die Matrix-Koeffizienten des Videos, die benutzt werden, um Helligkeits- und Farbton-/Sättigungs-Werte von den Primärfarben Rot, Grün und Blau abzuleiten. Der Parameter n ist eine Ganzzahl zwischen 0 und 10 inklusive. 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 | Setzt die Anzahl codierter Bits für einen Farbkanal. Der Wert 0 zeigt an, dass die Anzahl nicht spezifiziert ist.
--chroma-subsample TID:hori,vert | Die Anzahl der in den Cr- und Cb-Kanälen horizontal und vertikal zu entfernenden Pixel für jeden nicht entfernten Pixel. 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 | Die Anzahl der im Cb-Kanal horizontal und vertikal zu entfernenden Pixel für jeden nicht entfernten Pixel. Dies gilt zuzüglich zu --chroma-subsample. 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 | Setzt, wie Farbton/Sättigung horizontal und vertikal positioniert ist (0: nicht spezifiziert, 1: oben angeordnet, 2: halb).
--colour-range TID:n | Setzt das Abschneiden des Farbbereiches (0: nicht spezifiziert, 1: Broadcast-Bereich, 2: voller Bereich (kein Abschneiden), 3: durch Matrix-Koeffizienten/Transfer-Charakteristiken definiert).
--colour-transfer-characteristics TID:n | Die Charakteristiken der Farbton-Übertragung. 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 | Setzt die Primärfarben des Videos. 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 | Maximale Helligkeit eines einzelnen Pixels (maximales Lichtlevel des Inhalts) in Candela pro Quadratmeter (cd/m²). Der Wert n sollte eine nicht negative ganze Zahl sein.
--max-frame-light TID:n | Maximaler Durchschnittswert für das Lichtlevel eines vollen Bildes in Candela pro Quadratmeter (cd/m²). Der Wert n sollte eine nicht negative ganze Zahl sein.
--chromaticity-coordinates TID:rot-x,rot-y,grün-x,grün-y,blau-x,blau-y | Setzt die Rot-/Grün-/Blau-Koordinaten für Farbton & Sättigung, wie sie in CIE 1931 definiert werden.
--white-colour-coordinates TID:x,y | Setzt die Koordinaten der weißen Farbe, wie sie in CIE 1931 definiert sind.
--max-luminance TID:Fließkommazahl | Setzt die maximale Helligkeit in Candela pro Quadratmeter (cd/m²). Der Wert sollte kleiner als 9999.99 sein.
--min-luminance TID:Fließkommazahl | Setzt die minimale Helligkeit in Candela pro Quadratmeter (cd/m²). Der Wert sollte kleiner als 999.9999 sein.
--projection-type TID:Methode | Setzt die benutzte Videoprojektionsmethode. Gültige Werte sind 0 (Rektangularprojektion), 1 (gleichseitige Rektangularprojektion), 2 (Würfelprojektion) und 3 (Gitterprojektion).
--projection-private TID:Daten | Setzt private Daten, die nur zu einer bestimmten Projektion gehören. Die Daten müssen als Hexadezimalzahlen mit oder ohne Präfix »0x«, mit oder ohne Leerzeichen angegeben werden.
--projection-pose-yaw TID:Fließkommazahl | Gibt einen Gierwinkel zur Projektion an.
--projection-pose-pitch TID:Fließkommazahl | Gibt einen Drehwinkel zur Projektion an.
--projection-pose-roll TID:Fließkommazahl | Gibt einen Rollwinkel zur Projektion an.
--field-order TID:n | setzt die Feldreihenfolge für die Videospur mit der Spur-ID TID. Die Reihenfolge muss eine der folgenden Zahlen sein: 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 | setzt den Stereomodus für die Videospur mit der Spur-ID TID. Der Modus kann entweder eine Zahl n zwischen 0 und 14 oder eines dieser Schlüsselwörter sein: »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«

## 2.9. Optionen, die nur für Untertitelspuren gelten

Option | Description
--- | ---
--sub-charset TID:Zeichensatz | setzt den Zeichensatz für die Umwandlung nach UTF-8 für UTF-8-Untertitel der angegebenen Spur-ID. Ist er nicht angegeben, wird der Zeichensatz von den aktuellen Locale-Einstellungen abgeleitet. Beachten Sie, dass für Untertitel, die aus Matroska(tm)-Dateien oder Kate-Datenströmen stammen, kein Zeichensatz erforderlich ist, da diese immer in UTF-8 gespeichert werden. Ein Erklärung, wie mkvmerge(1) Zeichensätze umwandelt, finden Sie im Abschnitt über Textdateien und Zeichensätze. 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.

## 2.10. Weitere Optionen

Option | Description
--- | ---
-i, --identify Dateiname | wird mkvmerge(1) veranlassen, die einzelne Datei eingehend zu untersuchen und ihren Typ, die in der Datei enthaltenen Spuren und ihre Spur-IDs zu melden. Falls diese Option benutzt wird, ist der Dateiname die einzige weitere erlaubte Option. Das für die Ergebnisse benutze Ausgabeformat kann mit der Option --identification-format geändert werden.
-J Dateiname | Dies ist ein bequemer Alias für "--identification-format json --identify Dateiname".
-F, --identification-format Format | Legt das Format für die Ausgabe der Option --identify fest. Die folgenden Formate werden unterstützt: text (das Standardformat, wenn diese Option nicht genutzt wird) und json. Das Format text ist kurz und menschenlesbar. Es aus einer Zeile pro gefundenem Element (Container, Spuren, Anhänge etc.). 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). Das Format json ist eine maschinenlesbares JSON-Repräsentation. Dieses Format folgt dem JSON-Schema, das in der folgenden Datei beschrieben wird: mkvmerge-identification-output-schema-v12.json Alle Versionen des JSON-Schemas sind sowohl online als auch in den veröffentlichen Quellcodearchiven verfügbar.
--probe-range-percentage Prozentsatz | Dateitypen wie MPEG Programm- und Transportströme (.vob, .m2ts) erfordern, dass eine gewisse Menge Daten untersucht werden, um alle Spuren zu erkennen, die in der Datei enthalten sind. Diese Menge ist standardmäßig 0.3% der Quelldateigröße bzw. 10 MB, je nachdem, welcher Werte höher ist. 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 | führt unterstützte Eingabedateitypen auf.
--list-languages | Führt alle Sprachen und ihren ISO 639-2-Code auf, die mit der Option --language benutzt werden können.
--priority Priorität | setzt die Prozesspriorität, mit der mkvmerge(1) ausgeführt wird. Gültige Werte sind »lowest«, »lower«, »normal«, »higher« und »highest«. Falls nichts angegeben wurde, wird »normal« benutzt. Auf Unix-ähnlichen Systemen wird mkvmerge(1) die Funktion nice(2) verwenden. Daher kann nur der Superuser »higher« und »highest« benutzen. Auf Windows sind alle Werte für jeden Anwender benutzbar. 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 | setzt den Zeichensatz, um auf der Befehlszeile angegebene Zeichenketten umzuwandeln. Voreinstellung ist der Zeichensatz der aktuellen Locale des Systems. Diese Einstellung gilt für Argumente der folgenden Optionen: --title, --track-name und --attachment-description.
--output-charset Zeichensatz | setzt den Zeichensatz, in den Zeichenketten zur Ausgabe umgewandelt werden. Voreinstellung ist der Zeichensatz der aktuellen Locale des Systems.
-r, --redirect-output Dateiname | schreibt alle Nachrichten in die Datei Dateiname statt auf die Konsole. Obwohl dies einfach durch Ausgabeumleitung erledigt werden kann, gibt es Fälle, in denen diese Option benötigt wird: wenn das Terminal die Ausgabe vor dem Schreiben in eine Datei neu auswertet. Der mit --output-charset gesetzte Zeichensatz wird dabei berücksichtigt.
--flush-on-close | Weist mkvmerge an, alle gepufferten Daten auf den Datenspeicher zu schreiben, wenn eine zum Schreiben geöffnete Datei geschlossen wird. Das kann benutzt werden, um Datenverlust bei Stromausfall vorzubeugen oder bestimmte Probleme im Betriebssystem oder Treibern zu vermeiden. Der Nachteil ist, dass das Multiplexen länger dauert, da mkvmerge vor dem Beenden wartet, bis alle Daten auf den Datenspeicher geschrieben wurden. Siehe Probleme #2469 und #2480 im MKVToolNix-Bugtracker für eine tiefergehende Diskussion der Vor- und Nachteile.
--ui-language Code | Erzwingt, dass die Übersetzungen für die Sprache Code benutzt werden (z.B. »de_DE« für die deutschen Übersetzungen). Bei der Eingabe von »list« als Code gibt das Programm eine Liste der verfügbaren Übersetzungen aus.
--abort-on-warnings | Weist das Programm an abzubrechen, nachdem die erste Warnung ausgegeben wurde. Der Rückgabewert des Programms wird in dem Fall 1 sein.
--deterministic Initialwert | Aktiviert das Erzeugen von Byte für Byte identischen Dateien, sofern die selbe Version von mkvmerge(1) mit den selben Quelldateien, den selben Optionen und dem selben Initialwert benutzt werden. Beachten Sie, dass das "Datum"-Segment-Informationen-Feld in diesem Modus nicht geschrieben wird. 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 selbe Version von mkvmerge(1), gebaut mit den selben Versionen von libEBML und libMatroska, wird benutzt. Die Quelldateien sind Byte für Byte identisch. Die selben Kommandozeilenoptionen werden in der selben Reihenfolge benutzt (mit der expliziten Ausnahme der Option --output …). 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 | schaltet die Fehlersuche für eine bestimmte Funktionalität ein. Diese Option ist nur für Entwickler nützlich.
--engage Funktionalität | schaltet experimentelle Funktionalitäten ein. Eine Liste verfügbarer Funktionalitäten kann mit mkvmerge --engage list abgefragt werden. Diese Funktionalitäten sind nicht für die Verwendung in Alltagssituationen gedacht.
--gui-mode | Schaltet den Modus für graphische Benutzeroberflächen an. In diesem Modus können auf bestimmte Art formatierte Zeilen ausgegeben werden, die einem aufrufenden Programm mitteilen, was mkvmerge(1) gerade tut. Diese Nachrichten haben das folgende Format: '#GUI#Nachricht'. Der Nachricht folgen potenziell Schlüssel/Wert-Paare wie z.B. '#GUI#Nachricht#schluessel1=wert1#schluessel2=wert2…'. Weder die Nachricht selber noch die Schlüssel werden jemals übersetzt sondern immer in Englisch ausgegeben.
@Optionsdatei.json | liest zusätzliche Befehlszeilenargumente aus der Datei Optionsdatei. Weitere Informationen finden Sie im Abschnitt über Optionsdateien.
--capabilities | führt Informationen über optionale Funktionalitäten auf, die einkompiliert wurden, und beendet sich. Die erste ausgegebene Zeile wird die Versionsinformation sein. Alle folgenden Zeilen enthalten genau ein Wort, dessen Vorhandensein anzeigt, dass die Funktionalität einkompiliert wurde. Diese Funktionalitäten sind: »FLAC« – Lesen roher FLAC-Dateien und Handhabung von FLAC-Spuren in anderen Containern, z.B. Ogg(tm) oder Matroska(tm).
-h, --help | zeigt Benutzungsinformationen und beendet sich.
-V, --version | zeigt Versionsinformationen und beendet sich.

# 3. Aufruf

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.

Important:

Die Reihenfolge der Befehlszeilenoptionen ist wichtig. Bitte lesen Sie den Abschnitt »Reihenfolge der Optionen«, falls sie ein neuer Nutzer des Programms sind.

# 4. Reihenfolge der Optionen

Die Reihenfolge, in der die Optionen eingegeben werden, ist für einige Optionen wichtig. Optionen fallen unter zwei Kategorien:

1. Optionen, die das ganze Programm beeinflussen und nicht an irgendeine Eingabedatei gebunden sind. Dies sind unter anderem --command-line-charset, --output oder --title. Diese können überall auf der Befehlszeile erscheinen.

2. Optionen, die eine einzelne Eingabedatei oder eine einzelne Spur in einer Eingabedatei beeinflussen. Diese Optionen gelten für die auf der Befehlszeile folgende Datei. Alle Optionen, die für dieselbe Eingabedatei (oder für Spuren derselben Eingabedatei) gelten, können in jeder Reihenfolge geschrieben werden, solange sie alle vor dem Namen dieser Eingabedatei erschienen. Beispiele für Optionen, die für eine Eingabedatei gelten, sind --no-chapters oder --chapter-charset. Beispiele für Optionen, die für eine einzelne Spur gelten, sind --default-duration oder --language.

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

# 5. Beispiele

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:

1. Extrahieren eines rohen Untertiteldatenstroms aus der Quelle:

       $ tccat -i /Pfad/zur/kopierten/DVD/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o MeinFilm

2. Umwandlung der resultierenden PGM-Bilder in Text mit Gocr:

       $ pgm2txt MeinFilm

3. Rechtschreibprüfung der resultierenden Textdateien:

       $ ispell -d american *txt

4. Umwandlung der Textdateien in eine SRT-Datei:

       $ 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

# 6. Spur-IDs

## 6.1. Normale Spur-IDs

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
    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:

- AVI-Dateien: Die Videospur hat die ID 0. Die Tonspuren bekommen IDs in aufsteigender Reihenfolge, beginnend bei 1.

- AAC-, AC-3-, MP3-, SRT- und WAV-Dateien: Die einzige »Spur« der Datei erhält die ID 0.

- Die meisten anderen Dateien: Die Spur-IDs werden in der Reihenfolge zugeteilt, in der die Spuren in der Datei gefunden werden, beginnend bei 0.

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.

## 6.2. Spezielle Spur-IDs

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.

# 7. Umwandlungen von Textdateien und Zeichensätzen

Note:

Dieser Abschnitt gilt für alle Programme in MKVToolNix, wenn auch nur von mkvmerge(1) die Rede ist.

## 7.1. Einleitung

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.

## 7.2. Byte-Reihenfolge-Markierungen (engl. BOM)

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.

## 7.3. Linux und Unixoide Betriebssysteme inklusive macOS

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.

## 7.4. Windows

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:

1. Falls die Ausgabe mittels der Option --redirect-output umgeleitet wurde, so ist der Zeichensatz UTF-8. Dies kann mit der Option --output-charset geändert werden.

   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).

## 7.5. Kommandozeilenoptionen

Die folgenden Optionen, die die Angabe des Zeichensatzes ermöglichen, existieren:

- --sub-charset für Textuntertiteldateien und -spuren, die in Containerformaten gespeichert sind, deren Zeichensatz nicht eindeutig bestimmt werden können (z.B. OGG-Dateien),

- --chapter-charset für Kapiteltextdateien, sowie Kapitel- und Dateititel, die in Containerformaten gespeichert sind, deren Zeichensatz nicht eindeutig bestimmt werden kann (z.B. Ogg-Dateien für Kapitelinformationen, Spur- und Dateititel etc.; MP4-Dateien für Kapitelinformationen),

- --command-line-charset für alle Zeichenketten auf der Befehlszeile,

- --output-charset für alle auf die Konsole oder in eine Datei geschriebenen Zeichenketten, falls die Ausgabe mit der Option --redirect-output umgeleitet wurde. Auf anderen Systemen als Windows ist der Standardzeichensatz derjenige, den das System aktuell verwendet. Unter Windows ist der Standard sowohl für die Umleitung mittels --redirect-output als auch durch cmd.exe selber, e.g. mkvinfo file.mkv > info.txt, der Zeichensatz UTF-8.

# 8. Optionsdateien

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 (RFC 7159) 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"
    ]

# 9. Verknüpfen von Dateien

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.

# 10. Vorgabewerte

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.

# 11. Anhänge

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.

# 12. Kapitel

Das Matroska(tm)-Kapitelsystem ist leistungsfähiger als das alte bekannte System, das von OGM-Dateien benutzt wird. Die vollständige Spezifikation ist auf der Matroska-Website 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).

## 12.1. Das einfache Kapitelformat

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.

## 12.2. Das XML-basierte Kapitelformat

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:

1. Der Zeitstempel für das Ende des Kapitels kann gesetzt werden.

2. Kapitel können verschachtelt werden.

3. Die Sprache und das Land können gesetzt werden.

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)

## 12.3. Kapitel von Blu-rays lesen

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

## 12.4. Kapitel von DVDs lesen

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

## 12.5. Allgemeine Hinweise

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).

# 13. Tags

## 13.1. Einleitung

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.

## 13.2. Geltungsbereich der Tags

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 Matroska-Spezifikation 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.

## 13.3. Beispiel

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

## 13.4. Format der Tag-Datei

mkvmerge(1) unterstützt ein XML-basiertes Tag-Dateifomat. Das Format ist sehr eng an die Matroska-Spezifikation 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 äußerste Element muss <Tags> sein.

- Ein logischer Tag ist innerhalb eines Paares von <Tag>-XML-Tags enthalten.

- Leerzeichen direkt vor und hinter Tag-Inhalt werden ignoriert.

## 13.5. Datentypen

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.

## 13.6. Bekannte Tags des XML-Dateiformats

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)

# 14. Die Segmentinformations-XML-Dateien

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)

# 15. Matroska-Dateilayout

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:

- »meta seek #1« beinhaltet nur eine kleine Zahl von Elementen der Stufe eins und das nur, falls sie tatsächlich existieren: Anhänge, Kapitel, Indizes, Tags, »meta seek #2«. Ältere Versionen von mkvmerge(1) legten auch die Cluster in dieses Metasuchelement ab. Daher wurden einige ungenaue Annahmen nötig, um ausreichend Platz zu reservieren. Dies schlug oft fehl. Nun werden nur die Cluster in »meta seek #2« gespeichert und »meta seek #1« verweist auf das Metasuchelement #2.

- Anhang-, Kapitel- und Tag-Elemente sind nur vorhanden, falls sie hinzugefügt wurden.

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.

# 16. Externe Zeitstempeldateien

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.

## 16.1. Zeitstempeldateiformat v1

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

## 16.2. Zeitstempeldateiformat v2

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

## 16.3. Zeitstempeldateiformat v3

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

## 16.4. Zeitstempeldateiformat v4

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.

# 17. Rückgabewerte

mkvmerge(1) beendet sich mit einem von drei Rückgabewerten:

- 0 – dieser Rückgabewert bedeutet, dass das Muxing erfolgreich abgeschlossen wurde.

- 1 – in diesem Fall hat mkvmerge(1) mindestens eine Warnung ausgegeben, das Muxing wurde aber fortgesetzt. Einer Warnung wird der Text »Warning:« vorangestellt. Abhängig von den aufgetretenen Problemen können die resultierenden Dateien in Ordnung sein oder nicht. Dem Anwender wird nachdrücklich geraten, sowohl die Warnung als auch die resultierende Datei zu überprüfen.

- 2 – dieser Rückgabewert wird benutzt, nachdem ein Fehler aufgetreten ist. mkvmerge(1) wird gleich nach der Ausgabe der Fehlermeldung abgebrochen. Fehlermeldungen reichen von falschen Befehlszeilenargumenten über Lese-/Schreibfehler bis hin zu beschädigten Dateien.

# 18. Umgebungsvariablen

mkvmerge(1) verwendet die Standardvariablen, die die Locale des System bestimmen (d.h. LANG und die LC_*-Familie). Zusätzliche Variablen:

Option | Description
--- | ---
MKVMERGE_DEBUG, MKVTOOLNIX_DEBUG und ihre Kurzform MTX_DEBUG | Der Inhalt wird behandelt, als ob er mit der Option --debug übergeben worden wäre.
MKVMERGE_ENGAGE, MKVTOOLNIX_ENGAGE und ihre Kurzform MTX_ENGAGE | Der Inhalt wird behandelt, als ob er mit der Option --engage übergeben worden wäre.

# 19. Siehe auch

mkvinfo(1), mkvextract(1), mkvpropedit(1), mkvtoolnix-gui(1)

# 20. WWW

Die neuste Version kann immer auf der MKVToolNix-Homepage gefunden werden.