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 Anwender den Auswertungsmodus »full« benutzt. 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.
-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.
--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 des ersetzten Anhangs verwendet. Andernfalls wird der Name nicht geändert. Falls die Option --attachment-mime-type vor dieser Option benutzt wurde, wird ihr Wert als MIME-Typ des ersetzten Anhangs verwendet. Andernfalls wird der MIME-Typ nicht geändert. Falls die Option --attachment-description vor dieser Option benutzt wurde, wird ihr Wert als Beschreibung des ersetzten Anhangs verwendet. Andernfalls wird die Beschreibung 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.

Weitere Optionen:

Option | Description
--- | ---
--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). Vorzugsweise sollten jedoch die Umgebungsvariablen LANG, LC_MESSAGES und LC_ALL benutzt werden. Die Eingabe von »list« als Code wird mkvextract(1) veranlassen, eine Liste der verfügbaren Übersetzungen auszugeben.
--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 | detaillierte Ausgabe, zeigt alle wichtigen Matroska(tm)-Elemente, so wie sie gelesen wurden.
-h, --help | zeigt Benutzungsinformationen und beendet sich.
-V, --version | zeigt Versionsinformationen und beendet sich.
--check-for-updates | prüft online durch Herunterladen der URL http://mkvtoolnix-releases.bunkus.org/latest-release.xml, ob es neue Veröffentlichungen gibt. Vier Zeilen werden im Stil Schlüssel=Wert ausgegeben: die URL, von der die Informationen bezogen wurden (Schlüssel version_check_url), die aktuell laufende Version (Schlüssel running_version), die Version der neusten Veröffentlichung (Schlüssel available_version) und die Download-URL (Schlüssel download_url). Anschließend beendet sich das Programm mit einem Rückgabewert von 0, falls keine neuere Veröffentlichung verfügbar ist, mit 1, wenn eine neuere Veröffentlichung verfügbar ist und mit 2, falls ein Fehler auftritt (z.B., wenn die Aktualisierungsinformationen nicht abgefragt werden konnten). Diese Option ist nur verfügbar, falls das Programm mit Unterstützung für Libcurl gebaut wurde.
@Optionsdatei | liest zusätzliche Befehlszeilenargumente aus der Datei Optionsdatei. Zeilen, deren erstes Nichtleerraumzeichen ein Rautenzeichen (»#«) ist, werden als Kommentare betrachtet und ignoriert. Leerräume am Anfang und Ende einer Zeile werden abgeschnitten. Jede Zeile darf genau eine Option enthalten. Verschiedene Zeichen können maskiert werden, z.B. falls Sie möchten, dass eine Nichtkommentarzeile mit einem »#« beginnt. Die Regeln werden im Abschnitt über Maskieren von Text beschrieben. Die Befehlszeile »mkvpropedit Quelle.mkv --edit track:a2 --set name=Kommentare« kann in die folgende Optionsdatei umgewandelt werden:
    # Quelle.mkv ändern
    Quelle.mkv
    # die zweite Tonspur bearbeiten
    --edit
    track:a2
    # und den Titel auf »Kommentare« setzen
    --set
    name=Kommentare

# 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. Dem Anwender 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. Sonderzeichen in Text maskieren

Es gibt ein paar Stellen, an denen Sonderzeichen in Text maskiert werden müssen oder sollen. Die Regeln zum Maskieren sind einfach: Jedes Zeichen, das maskiert werden soll, wird durch einen Rückwärtsschrägstrich gefolgt von einem weiteren Zeichen ersetzt.

Die Regeln lauten: » « (ein Leerzeichen) wird »\s«, »"« (doppeltes Anführungszeichen) wird »\2«, »:« wird »\c«, »#« wird »\h« und »\« (ein einfacher Rückwärtsschrägstrich selbst) wird »\\«.

# 9. 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.
MKVPROPEDIT_OPTIONS, MKVTOOLNIX_OPTIONS und ihre Kurzform MTX_OPTIONS | Der Inhalt wird bei Leerräumen aufgeteilt. Die resultierenden Teilzeichenketten werden behandelt, als ob sie als Befehlszeilenoptionen übergeben worden wären. Falls Sie Sonderzeichen übergeben möchten (z.B. Leerzeichen), müssen Sie sie maskieren (siehe den Abschnitt über Maskieren von Sonderzeichen in Text).

# 10. Siehe auch

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

# 11. WWW

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