mkvpropedit -- Ändert Eigenschaften von existierenden Matroska(tm)-Dateien ohne ein komplett neues Muxing.

# 1. Übersicht

mkvpropedit Optionen {Quelldateiname} {Aktionen}

# 2. Beschreibung

Dieses Programm analysiert eine existierende Matroska(tm)-Datei und ändert einige ihrer Eigenschaften. Dann schreibt es diese Änderungen in die existierende Datei. Unter den Eigenschaften, die geändert werden können, sind die Segmentinformationselemente (z.B. der Titel) und die Spurenkopfdaten (z.B. der Sprachcode, der Scahlter »Standardspur« oder der Name).

Optionen:

Option | Description
--- | ---
-l, --list-property-names | Führt alle bekannten und bearbeitbaren Eigenschaftsnamen, ihren Typ (Zeichenkette, Ganzzahl, Boolean etc.) und eine kurze Beschreibung auf. Das Programm beendet sich anschließend. Daher muss der Parameter Quelldateiname nicht mitgegeben werden.
-p, --parse-mode Modus | Setzt den Auswertungsmodus. Der Parameter Modus kann entweder »fast« (was auch die Voreinstellung ist) oder »full« sein. Der Modus »fast« wertet nicht die ganze Datei aus, benutzt aber die Metasuchelemente zum Orten der benötigten Elemente der Quelldatei. In 99% der Fälle reicht dies. Aber für Dateien, die keine Metasuchelemente enthalten oder beschädigt sind, kann es notwendig sein, dass der Auswertungsmodus »full« benutzt wird. Ein vollständiger Scan einer Datei kann ein paar Minuten in Anspruch nehmen, während ein schneller Scan nur Sekunden dauert.

Aktionen, die mit Eigenschaften von Spur- und Segmentinformationen umgehen:

Option | Description
--- | ---
-e, --edit Selektor | Setzt den Matroska(tm)-Dateiabschnitt (Segmentinformationen oder die Kopfdaten einer bestimmten Spur), mit der alle nachfolgenden add-, set- und delete-Aktionen arbeiten. Diese Option kann mehrfach benutzt werden, um Änderungen an mehr als einem Element vorzunehmen. Standardmäßig wird mkvpropedit(1) den Segmentinformationsabschnitt bearbeiten. Eine vollständige Beschreibung der Syntax finden Sie im Abschnitt über Selektoren zur Bearbeitung.
-a, --add Name=Wert | Fügt die Eigenschaft Name mit dem Wert Wert hinzu. Die Eigenschaft wird selbst dann hinzugefügt, wenn eine derartige Eigenschaft bereits existiert. Beachten Sie, dass die meisten Eigenschaften eindeutig sind und nicht öfter als einmal auftreten können.
-s, --set Name=Wert | Setzt alle Vorkommen der Eigenschaft Name auf den Wert Wert. Falls keine derartige Eigenschaft existiert, wird sie hinzugefügt.
-d, --delete Name | Löscht alle Vorkommen der Eigenschaft Name. Beachten Sie, dass einige Eigenschaften benötigt werden und nicht gelöscht werden können.

Aktionen, die mit Tags und Kapitel umgehen:

Option | Description
--- | ---
-t, --tags Selektor:Dateiname | Fügt in der Datei Tags hinzu, ersetzt sie durch die aus Dateiname oder entfernt sie, falls Dateiname leer ist. mkvpropedit(1) liest dasselbe XML-Tag-Format, das auch mkvmerge(1) liest. Der Selektor muss eines der Wörter all, global oder track sein. Bei all wird mkvpropedit(1) alle Tags in einer Datei ersetzen oder entfernen. Bei global werden nur globale Tags ersetzt oder entfernt. Bei track wird mkvpropedit(1) Tags für eine bestimmte Spur ersetzen. Zusätzlich werden die aus Dateiname gelesenen Tags derselben Spur zugeteilt. Die Spur wird auf dieselbe Weise angegeben wie die Selektoren zur Bearbeitung (siehe unten), z.B. --tags track:a1:neue-Audio-Tags.xml.
--add-track-statistics-tags | Berechnet Statistiken für alle Spuren in einer Datei und legt für sie neue Statistik-Tags an. Wenn die Datei solche Tags bereits enthält, so werden sie aktuelisiert.
--delete-track-statistics-tags | Löscht alle vorhandenen Tags mit Spur-Statistiken aus einer Datei. Falls die Datei keine Spur-Statistik-Tags enthält, so wird sie nicht verändert.
-c, --chapters Dateiname | Fügt in der Datei Kapitel aus Dateiname hinzu, ersetzt sie dadurch oder entfernt sie, falls Dateiname leer ist. mkvpropedit(1) liest dieselben XML- und Kapitelformate, die auch mkvmerge(1) liest.

Aktionen für den Umgang mit Anhängen:

Option | Description
--- | ---
--add-attachment Dateiname | Fügt einen neuen Anhang aus Dateiname hinzu. Falls die Option --attachment-name vor dieser Option benutzt wurde, wird ihr Wert als Name des neuen Anhangs verwendet. Andernfalls wird er aus Dateiname abgeleitet. Falls die Option --attachment-mime-type vor dieser Option benutzt wurde, wird ihr Wert als MIME-Typ des neuen Anhangs verwendet. Andernfalls wird er automatisch anhand des Inhalts von Dateiname bestimmt. Falls die Option --attachment-description vor dieser Option benutzt wurde, wird ihr Wert als Beschreibung des neuen Anhangs verwendet. Andernfalls wird keine Beschreibung hinterlegt. Falls die Option --attachment-uid vor dieser Option benutzt wurde, wird ihr Wert als UID des neuen Anhangs verwendet. Andernfalls wird automatisch eine zufällige UID erzeugt.
--replace-attachment Selektor:Dateiname | Ersetzt einen oder mehrere Anhänge, die zum Selektor passen, durch die Datei Dateiname. Falls mehr als ein existierender Anhang zum Selektor passt, werden alle ihre Inhalte durch den Inhalt von Dateiname ersetzt. Der Selektor kann eine von vier Formen haben. Sie werden unten im Abschnitt Anhangauswahlpunkte erklärt. Falls die Option --attachment-name vor dieser Option benutzt wurde, wird ihr Wert als Name für alle veränderten Anhänge verwendet. Andernfalls werden die Namen nicht geändert. Falls die Option --attachment-mime-type vor dieser Option benutzt wurde, wird ihr Wert als MIME-Typ aller veränderten Anhänge verwendet. Andernfalls werden die MIME-Typen nicht geändert. Falls die Option --attachment-description vor dieser Option benutzt wurde, wird ihr Wert als Beschreibung aller veränderten Anhänge verwendet. Andernfalls werden die Beschreibungen nicht geändert. Falls die Option --attachment-uid vor dieser Option benutzt wurde, wird ihr Wert als UID aller veränderten Anhänge verwendet. Andernfalls werden die UIDs nicht geändert.
--update-attachment Selektor | Aktualisiert die Eigenschaften eines oder mehrere Anhänge, die zum Selektor passen. Falls mehr als ein existierender Anhang zum Selektor passt, werden all ihre Eigenschaften aktualisiert. Der Selektor kann eine von vier Formen haben. Sie werden unten im Abschnitt Anhangauswahlpunkte erklärt. Falls die Option --attachment-name vor dieser Option benutzt wurde, wird ihr Wert als Name für alle veränderten Anhänge verwendet. Andernfalls werden die Namen nicht geändert. Falls die Option --attachment-mime-type vor dieser Option benutzt wurde, wird ihr Wert als MIME-Typ aller veränderten Anhänge verwendet. Andernfalls werden die MIME-Typen nicht geändert. Falls die Option --attachment-description vor dieser Option benutzt wurde, wird ihr Wert als Beschreibung aller veränderten Anhänge verwendet. Andernfalls werden die Beschreibungen nicht geändert. Falls die Option --attachment-uid vor dieser Option benutzt wurde, wird ihr Wert als UID aller veränderten Anhänge verwendet. Andernfalls werden die UIDs nicht geändert.
--delete-attachment Selektor | Löscht einen oder mehrere Anhänge, die zum Selektor passen. Der Selektor kann eine von vier Formen haben. Sie werden unten im Abschnitt Anhangauswahlpunkte erklärt.

Optionen für Aktionen mit Anhängen:

Option | Description
--- | ---
--attachment-name Name | Setzt den Namen, der für die nachfolgende --add-attachment- oder --replace-attachment-Transaktion benutzt wird.
--attachment-mime-type MIME-Typ | Setzt den MIME-Typ, der für die nachfolgende -add-attachment- oder --replace-attachment-Transaktion benutzt wird.
--attachment-description Beschreibung | Setzt die Beschreibung, die für die nachfolgende -add-attachment- oder --replace-attachment-Transaktion benutzt wird.
--enable-legacy-font-mime-types | Aktiviert die Nutzung veralteter MIME-Typen für bestimme Arten von Schriftart-Dateianhängen. Beispielsweise wird »application/x-truetype-font« für TrueType-Schriftarten anstelle von »fonts/ttf« benutzt." Dies betrifft sowohl das Hinzufügen neuer Dateianhänge als auch das Ersetzen vorhandener Anhänge, aber nur, wenn der MIME-Typ nicht angegeben wurde. Andere existierende Dateianhänge werden nicht verändert. Die betroffenen MIME-Typen sind »font/sfnt«, »font/ttf« und »font/collection«, die alle durch »application/x-truetype-fonts« ersetzt werden, sowie »font/otf«, das durch »application/vnd.ms-opentype« ersetzt wird."

Weitere Optionen:

Option | Description
--- | ---
--disable-language-ietf | Wenn Änderungen an der Eigenschaft »language« vorgenommen werden, nimmt mkvpropedit(1) normalerweise dieselben Änderungen am neuen LanguageIETF-Spurkopfdaten-Element in Ergänzung zum alten Language-Element vor. Wenn diese Option benutzt wird, so wird die Änderung nur auf das alte Language-Element angewendet. Diese Option hat keinen Einfluss auf Änderungen, die über die Spurkopfdaten-Eigenschaft »language-ietf« angefragt werden.
--normalize-language-ietf Modus | Aktiviert die Normalisierung aller IETF-BCP-47-Sprach-Tags zu entweder ihrer kanonischen Form mit Modus »canonical«, zu ihrer Erweiterte-Sprach-Unterelemente-Form mit Modus »extlang« oder deaktiviert die Normalisierung mit Modus »off«. Standardmäßig wird eine Normalisierung zur kanonischen Form durchgeführt. In der kanonischen Form werden alle Unterelemente, für die bevorzugte Werte existieren, durch diese bevorzugten Werte ersetzt. Dies wandelt z.B. »zh-yue-jyutping« in »yue-jyutping« oder »fr-FX« in »fr-FR« um. Für die Erweiterte-Sprach-Unterelemente-Form wird zuerst die kanonische Form gebildet. Anschließend werden alle primären Sprachelemente, für die es erweiterte Sprach-Unterlemente gibt, durch diese erweiterten Sprach-Unterelemente und das dazugehörige Präfix ersetzt. Dies wandelt z.B. »yue-jyutping« zurück in »zh-yue-jyutping« um, hat aber keine Auswirkung auf »fr-FR«, weil es für »fr« kein erweitertes Sprach-Unterelement gibt. Diese Normalisierung wird nur auf Elemente angewendet, die tatsächlich verändert werden: Beim Bearbeiten von Spurkopfdaten sind nur Sprachelemente von Spuren betroffen, die über Bearbeitungs-Spezifikationen gesetzt werden. Sprachen von Spuren, die gar nicht bearbeitet werden, werden nicht geändert. Wird eine Spur bearbeitet, aber nur andere Elemente als die Sprache geändert, hat dies ebenfalls keine Auswirkung auf die Sprache. Beim Bearbeiten von Kapiteln sind die Sprachelemente aller Kapitelelemente betroffen, da Kapitel nur als Ganzes ersetzt werden. Beim Bearbeiten von Tags sind nur Sprachelemente derjenigen Tags betroffen, die tatsächlich ersetzt werden. Werden beispielsweise globale Tags ersetzt, so sind existierenden Spur-Tags nicht betroffen. Der beste Weg zur Normalisierung aller vorhandenen Sprachelemente ist, die Datei mit mkvmerge(1) zu remuxen und dabei die Option »--normalize-language-ietf« auf den gewünschten Modus zu setzen.
--command-line-charset Zeichensatz | Setzt den Zeichensatz, um auf der Befehlszeile angegebene Zeichenketten umzuwandeln. Voreinstellung ist der Zeichensatz der aktuellen Locale des Systems.
--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.
--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.
--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 mkvpropedit --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.
-v, --verbose | Aktiviert detaillierte Ausgabe und zeigt alle wichtigen Matroska(tm)-Elemente an, sobald sie gelesen wurden.
-h, --help | Zeigt Benutzungsinformationen und beendet sich.
-V, --version | Zeigt Versionsinformationen und beendet sich.
@Optionsdatei.json | Liest zusätzliche Befehlszeilenargumente aus der Datei Optionsdatei. Eine ausführliche Erläuterunge über die unterstützten Formate finden Sie im Abschnitt "Optionsdateien" in der Handbuchseite zu mkvmerge(1).

# 3. Selektoren zur Bearbeitung

Die Option --edit setzt den Matroska(tm)-Dateiabschnitt (Segmentinformationen oder die Kopfdaten einer bestimmten Spur) so, dass alle nachfolgenden add-, set- und delete-Aktionen damit arbeiten. Dies bleibt gültig, bis die nächste --edit-Option gefunden wird. Das Argument für diese Option wird Selektor zur Bearbeitung genannt.

Standardmäßig wird mkvpropedit(1) den Segmentinformationsabschnitt bearbeiten.

## 3.1. Segmentinformation

Die Segmentinformation kann mit einem dieser drei Wörter ausgewählt werden: »info«, »segment_info« oder »segmentinfo«. Sie enthält Eigenschaften wie den Segmenttitel oder die UID des Segments.

## 3.2. Spurenkopfdaten

Spurenkopfdaten können mit einem etwas komplexeren Selektor ausgewählt werden. Alle Varianten beginnen mit »track:«. Die Spurenkopfdaten beinhalten Elemente wie den Sprachcode, den »Standardspur«-Schalter oder den Namen der Spur.

Option | Description
--- | ---
track:n | Falls der Parameter n eine Zahl ist, wird die n. Spur ausgewählt. Die Reihenfolge der Spuren ist dieselbe, die die Option --identify von mkvmerge(1) ausgibt. Die Nummerierung beginnt bei 1.
track:t n | Falls der Parameter mit einem einzelnen Zeichen t gefolgt von einem n beginnt, wird die n. Spur eines speziellen Spurtyps ausgewählt. Der Spurtypparameter t muss eines der folgenden Zeichen sein: »a« für eine Tonspur, »b« für eine Button-Spur »s« für eine Untertitelspur und »v« für eine Videospur. Die Reihenfolge der Spuren ist diesselbe wie die der Ausgabe der mkvmerge(1)-Option --identify. Die Nummerierung beginnt bei 1.
track:=UID | Falls der Parameter mit einem »=« gefolgt von einer Zahl UID beginnt, wird die Spur ausgewählt, deren Spur-UID dieser UID entspricht. Spur-UIDs können mit mkvinfo(1) abgefragt werden.
track:@Nummer | Falls der Parameter mit einem »@« gefolgt von einer Nummer Nummer beginnt, wird die Spur ausgewählt, deren Spurnummer dieser Nummer entspricht. Spurnummern können mit mkvinfo(1) abgefragt werden.

## 3.3. Hinweise

Aufgrund der Natur der Spurauswahlpunkte zur Bearbeitung ist es möglich, dass tatsächlich mehrere Selektoren zu den Kopfdaten derselben Spur passen. In diesen Fällen werden alle Aktionen für diese Selektoren zur Bearbeitung kombiniert und in der Reihenfolge ausgeführt, in der sie auf der Befehlszeile angegeben wurden.

# 4. Selektoren für Anhänge

Ein Selektor für Anhänge wird in den beiden Aktionen --replace-attachment und --delete-attachment benutzt. Er kann eine der folgenden vier Formen haben:

1. Auswahl über die ID des Anhangs. In dieser Form ist der Selektor einfach eine Nummer, die ID des Anhangs, wie sie vom Identifizierungsbefehl von mkvmerge(1) ausgegeben wird.

2. Auswahl über die UID (eindeutig ID) des Anhangs. In dieser Form ist der Selektor das Gleichheitszeichen = gefolgt von einer Nummer, der eindeutigen ID des Anhangs, wie sie vom Identifizierungsbefehl von mkvmerge(1) ausgegeben wird.

3. Auswahl über den Namen des Anhangs. In dieser Form ist der Selektor das Wort name: gefolgt vom existierenden Namen des Anhangs. Falls dieser Selektor mit --replace-attachment benutzt wird, müssen Doppelpunkte innerhalb des Namens als \c maskiert werden.

4. Auswahl über den MIME-Typ. In dieser Form ist der Selektor das Wort mime-type: gefolgt vom existierenden MIME-Typ des Anhangs. Falls dieser Selektor mit --replace-attachment benutzt wird, müssen Doppelpunkte innerhalb des MIME-Typs als \c maskiert werden.

# 5. Beispiele

Das folgende Beispiel bearbeitet eine Datei namens »Film.mkv«. Es setzt den Segmenttitel und ändert den Sprachcode einer Ton- und Untertitelspur. Beachten Sie, dass dieses Beispiel durch Weglassen der ersten Option --edit verkürzt werden kann, da das Bearbeiten der Segmentinformation ohnehin für alle Optionen, die vor dem ersten --edit gefunden werden, die Voreinstellung ist.

    $ mkvpropedit Film.mkv --edit info --set "title=Der Film" --edit track:a1 --set language=fre --edit track:a2 --set language=ita

Das zweite Beispiel entfernt den Standardspurschalter« von der ersten Untertitelspur und setzt ihn für die zweite. Beachten Sie, dass mkvpropedit(1) im Gegensatz zu mkvmerge(1) nicht den »Standardspurschalter« von anderen Spuren auf »0« setzt, falls es für eine andere Spur automatisch auf »1« gesetzt wird.

    $ mkvpropedit Film.mkv --edit track:s1 --set flag-default=0 --edit track:s2 --set flag-default=1

Das Ersetzen der Tags für die zweite Untertitelspur in einer Datei sieht so aus:

    $ mkvpropedit Film.mkv --tags track:s2:Neue-Untertitel-Tags.xml

Entfernen aller Tags erfordert das Weglassen des Dateinamens:

    $ mkvpropedit Film.mkv --tags all:

Das Ersetzen der Kapitel in einer Datei sieht so aus:

    $ mkvpropedit Film.mkv --chapters Neue-Kapitel.xml

Entfernen aller Kapitel erfordert das Weglassen des Dateinamens:

    $ mkvpropedit Film.mkv --chapters ''

Hinzufügen einer Schriftdatei (Arial.ttf) als Anhang:

    $ mkvpropedit Film.mkv --add-attachment Arial.ttf

Hinzufügen einer Schriftdatei (89719823.ttf) als Anhang und Bereitstellen von ein paar Informationen, dass es sich wirklich nur um Arial handelt:

    $ mkvpropedit Film.mkv --attachment-name Arial.ttf --attachment-description 'Die Schrift Arial als eine TrueType-Schrift' --attachment-mime-type application/x-truetype-font --add-attachment 89719823.ttf

Ersetzen einer angehängten Schriftdatei (Comic.ttf) durch eine andere (Arial.ttf):

    $ mkvpropedit Film.mkv --attachment-name Arial.ttf --attachment-description 'Die Schrift Arial als eine TrueType-Schrift' --replace-attachment name:Comic.ttf:Arial.ttf

Löschen der zweiten angehängten Datei, egal worum es sich handelt:

    $ mkvpropedit Film.mkv --delete-attachment 2

Löschen aller angehängten Schriften anhand des MIME-Typs:

    $ mkvpropedit Film.mkv --delete-attachment mime-type:application/x-truetype-font

# 6. Rückgabewerte

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

- 0 – dieser Rückgabewert bedeutet, dass die Änderung erfolgreich abgeschlossen wurde.

- 1 – in diesem Fall hat mkvpropedit(1) mindestens eine Warnung ausgegeben, das Ändern 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. Es wird nachdrücklich geraten, sowohl die Warnung als auch die resultierenden Dateien zu überprüfen.

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

# 7. Umwandlungen von Textdateien und Zeichensätzen

Für eine tiefer gehende Diskussion darüber, wie die Programme in der MKVToolNix-Sammlung die Umwandlung von Zeichensätzen, Eingabe-/Ausgabecodierung, Kommandozeilenzeichensätze und Konsolenzeichensätze handhaben, sei auf den Abschnitt »Umwandlungen von Textdateien und Zeichensätzen« in der Handbuchseite von mkvmerge(1) verwiesen.

# 8. Umgebungsvariablen

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

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

# 9. Siehe auch

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

# 10. WWW

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