mkvpropedit -- Modifier les propriétés des fichiers Matroska(tm) existants sans un remultiplexage complet

# 1. Résumé

mkvpropedit options {source-filename} {actions}

# 2. Description

Ce logiciel analyse un fichier Matroska(tm) existant et modifie quelques unes de ses propriétés. Ensuite, il écrit ces modifications dans le fichier existant. Parmi les propriétés qui peuvent être modifiées figurent les éléments d'informations de segment (par ex. le titre) et les entêtes de piste (par ex. le code langue, l'indicateur « Piste par défaut » ou le nom).

Options :

Option | Description
--- | ---
-l, --list-property-names | Liste tous les noms de propriété connus et éditables, leur type (chaîne, entier, booléen, etc.) et une courte description. Après quoi le logiciel quitte. Par conséquent, le paramètre source-filename n'a pas à être fourni.
-p, --parse-mode mode | Définit le mode d'analyse. Le paramètre 'mode' peut soit être 'fast' (aussi par défaut) ou 'full'. Le mode 'fast' n'analyse pas le fichier entier mais utilise les éléments de positionnement méta pour situer les éléments nécessaires d'un fichier source. Dans 99% des cas, cela est suffisant. Mais pour les fichiers qui ne contiennent pas d'éléments de positionnement méta ou qui sont endommagés, l'utilisateur devrait définir le mode d'analyse 'full'. L'analyse complète d'un fichier peut prendre plusieurs minutes alors qu'une analyse rapide ne prend que quelques secondes.

Actions relatives aux pistes et propriétés d'informations de segment :

Option | Description
--- | ---
-e, --edit selecteur | Définit la section de fichier Matroska(tm) (informations de segment ou certaines entêtes de piste) sur lesquelles opèrent toutes les actions add, set et delete. Celle option peut être utilisée de multiples fois afin de modifier plus d'un élément. Par défaut mkvpropedit(1) éditera la section d'informations de segment. Voir la section sélecteurs d'édition pour une description complète de la syntaxe.
-a, --add name=value | Ajoute une propriété name avec la valeur value. La propriété sera ajoutée même si une telle propriété existe déjà. Note : la plupart des propriétés sont uniques et ne peuvent survenir plus d'une fois.
-s, --set name=value | Définit toutes les occurrences de la proprété name à la valeur value. Si une telle propriété n'existe pas, alors elle sera ajoutée.
-d, --delete name | Supprime toutes les occurrences de lapropriété name. Note : quelques propriétés sont requises et ne peuvent être supprimées.

Actions relatives aux balises et chapitres :

Option | Description
--- | ---
-t, --tags selector:filename | Ajoute ou remplace des balises dans le fichier avec ceux de filename ou les retire si filename est vide. mkvpropedit(1) lit les mêmes formats de balises XML que mkvmerge(1). Le sélecteur doit être l'un de ces mots all, global ou track. pour all mkvpropedit(1) remplacera ou retirera toutes les balises d'un fichier. Avec global seules les balises globales seront remplacées ou retirées. Avec track mkvpropedit(1) remplacera les balises pour une piste spécifique. De plus les balises lues depuis filename seront assignées à la même piste. La piste est spécifiée comme les sélecteurs d'édition sont spécifiés (voir ci-dessous), par ex. --tags track:a1:new-audio-tags.xml.
--add-track-statistics-tags | Calcule les statistiques pour toutes les pistes dans un fichier et ajoute des balises de statistiques pour elles. Si le fichier contient déjà de telles balises, alors elles seront mises à jour.
--delete-track-statistics-tags | Supprime toutes les balises de statistiques de pistes du fichier. Si le fichier n'en contient pas, alors il ne sera pas modifié.
-c, --chapters filename | Ajoute ou remplace des chapitres dans le fichier avec ceux de filename ou les retire si filename est vide. mkvpropedit(1) lit les mêmes formats de chapitres XML et simples que mkvmerge(1).

Actions sur les pièces jointes :

Option | Description
--- | ---
--add-attachment filename | Ajoute une nouvelle pièce jointe depuis filename. Si l'option --attachment-name a été utilisée avant cette option, alors sa valeur est utilisée comme nouveau nom de pièce jointe. Sinon il est dérivé de filename. Si l'option --attachment-mime-type a été utilisée avant cette option, alors sa valeur est utilisée comme nouveau type MIME de pièce jointe. Sinon il est auto-détecté depuis le contenu de filename. Si l'option --attachment-description a été utilisée avant cette option, alors sa valeur est utilisée comme nouvelle description de pièce jointe. Sinon aucune description ne sera définie. Si l'option --attachment-uid a été utilisée avant cette option, alors sa valeur est utilisée comme nouvel UID de pièce jointe. Sinon un UID aléatoire sera généré automatiquement.
--replace-attachment selector: filename | Remplace une ou plusieurs pièces jointes qui correspondent au selector avec le fichier filename. S'il existe plus d'une correspondance avec selector, alors tous leurs contenus seront remplacés par le contenu de filename. Le sélecteur peut avoir une de 4 formes possibles qui sont expliquées ci-dessous dans la section sélecteurs de pièce jointe. Si l'option --attachment-name a été utilisée avant cette option, alors sa valeur est définie comme nouveau nom pour chaque pièce jointe modifiée. Sinon les noms ne sont pas modifiés. Si l'option --attachment-mime-type a été utilisée avant cette option, alors sa valeur est définie comme nouveau type MIME pour chaque pièce jointe modifiée. Sinon les types MIME ne sont pas modifiés. Si l'option --attachment-description a été utilisée avant cette option, alors sa valeur est définie comme nouvelle description pour chaque pièce jointe modifiée. Sinon les descriptions ne sont pas modifiées. Si l'option --attachment-uid a été utilisée avant cette option, alors sa valeur est définie comme nouvel UID pour chaque pièce jointe modifiée. Sinon les UID ne sont pas modifiés.
--update-attachment selector | Définit les propriétés d'une pièce jointe ou plus qui correspond à selector. Si plus d'une pièce jointe existante correspond à selector alors toutes leurs propriétés seront mises à jour. Le sélecteur peut avoir une de 4 formes possibles qui sont expliquées ci-dessous dans la section sélecteurs de pièce jointe. Si l'option --attachment-name a été utilisée avant cette option, alors sa valeur est définie comme nouveau nom pour chaque pièce jointe modifiée. Sinon les noms ne sont pas modifiés. Si l'option --attachment-mime-type a été utilisée avant cette option, alors sa valeur est définie comme nouveau type MIME pour chaque pièce jointe modifiée. Sinon les types MIME ne sont pas modifiés. Si l'option --attachment-description a été utilisée avant cette option, alors sa valeur est définie comme nouvelle description pour chaque pièce jointe modifiée. Sinon les descriptions ne sont pas modifiées. Si l'option --attachment-uid a été utilisée avant cette option, alors sa valeur est définie comme nouvel UID pour chaque pièce jointe modifiée. Sinon les UID ne sont pas modifiés.
--delete-attachment selector | Supprime une pièce jointe ou plus qui correspond à selector. Le sélecteur peut avoir une de 4 formes possibles qui sont expliquées ci-dessous dans la section sélecteurs de pièce jointe.

Options pour les actions sur les pièces jointes :

Option | Description
--- | ---
--attachment-name name | Définit le nom à utiliser pour l'opération suivante --add-attachment ou --replace-attachment.
--attachment-mime-type mime-type | Définit le type MIME à utiliser pour l'opération suivante --add-attachment ou --replace-attachment.
--attachment-description description | Définit la description à utiliser pour l'opération suivante --add-attachment ou --replace-attachment.
--enable-legacy-font-mime-types | Active l'utilisation des anciens types MIME pour certains types de pièces jointes de polices de caractères. Par ex., « application/x-truetype-font » sera utilisé pour les polices TrueType au lieu de « fonts/ttf ». Ceci affecte l'ajout de nouvelles pièces jointes et le remplacement de celles existantes, mais seulement si le nouveau type MIME n'est pas spécifié. Les autres pièces jointes ne sont pas modifiées. Les types MIME affectés sont « font/sfnt », « font/ttf » et « font/collection ». Ils sont tous remplacés par « application/x-truetype-fonts ». « font/otf » est remplacé par « application/vnd.ms-opentype ».

Autres options :

Option | Description
--- | ---
--disable-language-ietf | Normalement quand l'utilisateur demande des modifications à la propriété d'entête de piste « language », mkvpropedit(1) applique les mêmes modifications au nouvel élément d'entête de piste LanguageIETF en plus de l'élément traditionnel Language. Si cette option est utilisée, la modification s'applique seulement à l'élément traditionnel Language. Cette option n'affecte pas les modifications demandées via la propriété d'entête de piste « language-ietf ».
--normalize-language-ietf mode | Active la normalisation de toutes les balises de langue IETF BCP 47 soit en leur forme canonique avec le mode 'canonique', soit en leur forme de sous-balises de langue étendue avec le mode 'extlang' soit en le désactivant avec le mode 'off'. Par défaut la normalisation en forme canonique est appliquée. Dans la forme canonique, toutes les sous-balises avec des valeurs préférées existantes sont remplacées par ces dernières. Ceci convertit par ex. 'zh-yue-jyutping' en 'yue-jyutping' ou 'fr-FX' en 'fr-FR'. Pour la forme des sous-balises de langue étendue, la forme canonique est d'abord construite. Ensuite toutes les langues primaires pour lesquelles des balises de langue étendue existent sont remplacées par cette sous-balises de langue étendue et son préfixe. Ceci reconvertit par ex. 'yue-jyutping' en 'zh-yue-jyutping' mais n'a pas d'effet sur 'fr-FR' car 'fr' n'est pas une sous-balise de langue étendue. Cette normalisation est seulement appliquée aux éléments réellement modifiés : En édition des entêtes de pistes, seuls les éléments de langues de pistes définis par d'édition des spécifications sont affectés. Les langues de pistes qui ne sont pas éditées ne sont pas modifiées. Éditer une piste en définissant seulement des propriétés autres que la langue n'affectera pas cette langue non plus. En édition de chapitres, tous les éléments de langues de tous les éléments de chapitres sont affectés parce que tous les chapitres existants sont toujours entièrement remplacés. En édition de balises, seuls les éléments de langues des balises réellement remplacés sont affectés. Par exemple, en remplaçant les balises globales les balises de pistes existantes ne sont pas affectées. La meilleure solution pour normaliser toutes les balises existantes d'un fichier est de le remultiplexer avec mkvmerge(1) en définissant son option « --normalize-language-ietf » selon le mode souhaité.
--command-line-charset character-set | Définit le jeu de caractères utilisé pour la conversion des chaînes fournies en ligne de commande. Par défaut, celui-ci correspond à celui donné par la « locale » du système.
--output-charset character-set | Définit le jeu de caractères dans lequel les chaînes en sortie sont converties. Par défaut, celui-ci correspond à celui donné par la « locale » du système.
-r, --redirect-output file-name | Écrit tous les messages vers le fichier file-name plutôt que vers la console. Bien que ceci puisse être réalisé facilement en redirection de sortie, il y a des cas dans lesquels cette option est requise : quand le terminal réinterprète la sortie avant de l'écrire vers un fichier. Le jeu de caractères défini avec --output-charset est honoré.
--no-bom | Les fichiers texte qui sont créés et encodés en UTF devraient normalement débuter avec un indicateur d'ordre des octets (BOM). Cette option désactive l'écriture de cet indicateur.
--ui-language code | Force les traductions pour la langue code à utiliser (par ex. 'fr_FR' pour les traductions françaises). Saisir 'list' comme code obligera le logiciel à générer la liste des traductions disponibles.
--abort-on-warnings | Demande au programme d'abandonner après le premier avertissement. Le code de fermeture sera égal à 1.
--debug topic | Activer le débogage pour une fonctionnalité spécifique. Cette option est utile uniquement pour les développeurs.
--engage feature | Active les fonctionnalités expérimentales. Une liste des fonctionnalités disponibles peut être demandées avec mkvpropedit --engage list. Ces fonctionnalités ne devraient pas être utilisées en situations normales.
--gui-mode | Active l'interface graphique utilisateur. Dans ce mode, des lignes spécialement formatées peuvent être générées et informer une GUI de la situation. Ces messages suivent le format '#GUI#message'. Le message peut être suivi d'une paire clé/valeur comme '#GUI#message#key1=value1#key2=value2…'. Ni les messages ni les clés ne sont traduits, et sont toujours générés en anglais.
-v, --verbose | Mode verbeux qui affiche tous les éléments Matroska(tm) importants à mesure qu'ils sont lus.
-h, --help | Affiche les informations d'utilisation et quitte.
-V, --version | Affiche les informations de version et quitte.
@options-file.json | Lit des arguments supplémentaires en ligne de commande depuis le fichier options-file. Pour une explication complète sur les formats pris en charge pour de tels fichiers, voir la section nommée « Fichiers d'options » sur la page man de mkvmerge(1).

# 3. Sélecteurs d'édition

L'option --edit définit la section de fichier Matroska(tm) (informations de segment ou certaines entêtes de pistes) sur lesquelles opèrent toutes les actions add, set et delete. Ceci reste valide jusqu'à temps que l'option --edit suivante soit trouvée. L'argument de cette option est appelé le sélecteur d'édition.

Par défaut mkvpropedit(1) éditera la section d'informations de segment.

## 3.1. Informations de segment

Les informations de segment peuvent être sélectionnées avec de ces trois mots : 'info', 'segment_info' ou 'segmentinfo'. Elles contiennent des propriétés comme le titre de segment ou l'UID de segment.

## 3.2. Entêtes de piste

Les entêtes de pistes peuvent être sélectionnées avec un sélecteur un peu plus complexe. Toutes les variations débutent avec 'track:'. Les propriétés d'entête de piste comprennent des éléments comme le code langue, l'indicateur « Piste par défaut » ou le nom de piste.

Option | Description
--- | ---
track: n | Si le paramètre n est un chiffre, alors la nième piste sera sélectionnée. L'ordre des pistes est le même que l'option --identify de mkvmerge(1). La numérotation démarre à 1.
track: tn | Si le paramètre débute avec un unique caractère t suivi par un n alors la nième piste d'un type de piste spécifique sera sélectionnée. Le paramètre de type de piste t doit être un de ces quatre caractères : 'a' pour une piste audio, 'b' pour une piste bouton, 's' pour une piste de sous-titre et 'v' pour une piste vidéo. L'ordre des pistes est le même que celui de l'option --identify de mkvmerge(1). La numérotation démarre à 1.
track:=uid | Si le paramètre débute avec un signe « = » suivi par un chiffre uid, la piste dont l'élément UID est égal à l'uid donné sera sélectionnée. Les UIDs de pistes peuvent être obtenus avec mkvinfo(1).
track:@number | Si le paramètre débute avec un signe « @ » suivi par un chiffre chiffre, la piste dont le numéro est égal à ce chiffre sera sélectionnée. Les numéros de pistes peuvent être obtenus avec mkvinfo(1).

## 3.3. Notes

Du fait de la nature des sélecteurs d'édition de piste, il est possible que plusieurs sélecteurs correspondent réellement aux mêmes entêtes de piste. Dans ces cas-là, toutes les actions pour ces sélecteurs d'édition seront combinées et exécutées dans l'ordre dans lequel ils sont fournis en ligne de commande.

# 4. Sélecteurs de pièce jointe

Un sélecteur de pièce jointe est utilisé avec ces deux actions --replace-attachment et --delete-attachment. Il peut avoir une des quatre formes suivantes :

1. Sélection par l'ID de pièce jointe. Dans cette forme, le sélecteur est simplement un chiffre, l'ID de pièce jointe tel que donné par la commande d'identification de mkvmerge(1).

2. Sélection par l'UID (ID unique) de pièce jointe. Dans cette forme, le sélecteur est le signe égal = suivi par un chiffre, l'UID de pièce jointe tel que donné par la commande d'identification verbeuse de mkvmerge(1).

3. Sélection par le nom de pièce jointe. Dans cette forme, le sélecteur est le mot littéral name: suivi par le nom de la pièce jointe existante. Si ce sélecteur est utilisé avec --replace-attachment alors les deux-points dans le nom à correspondre devront être échappés avec \c.

4. Sélection par le type MIME. Dans cette forme, le sélecteur est le mot littéral mime-type: suivi par le type MIME de la pièce jointe existante. Si ce sélecteur est utilisé avec --replace-attachment alors les deux-points dans le type MIME à correspondre devront être échappés avec \c.

# 5. Gestion des langues

Globalement, mkvpropedit(1) essaie de faire les choses correctement par défaut : lors de modifications de la propriété de langue, mkvpropedit(1) applique les mêmes modifications à l'élément « LanguageIETF » qu'à l'ancien élément « Language », de la même façon que mkvmerge(1) applique la langue à ces deux éléments. Par exemple, avec mkvpropedit movie.mkv --edit track:2 --set language=zh-TW l'élément « LanguageIETF » sera défini en zh-TW et l'ancien élément « Language » en chi.

De plus, il existe une nouvelle propriété d'entête de piste nommée language-ietf qui peut être définie ou retirée. Les modifications de cette propriété s'appliquent seulement au nouvel élément d'entête de piste « LanguageIETF ». Il faut noter ici que l'ancien élément d'entête de piste « Language » est un élément requis pour Matroska — ce qui signifie que même absent du fichier, il a une valeur implicite. Quand l'utilisateur définit seulement la propriété language-ietf mais pas la propriété language, mkvpropedit(1) ajoute l'ancien élément « Language » dans certains cas, et la définit à und (« undetermined », c'est-à-dire indéterminé) si l'utilisateur n'en a pas spécifié une valeur.

Lors de la lecture de fichiers XML de balises ou de chapitres, mkvpropedit(1) fonctionne comme mkvmerge(1).

La création des nouveaux éléments peut être complètement désactivée avec l'option en ligne de commande « --disable-language-ietf​ ». Elle prend effet sur les trois nouveaux éléments.

Il est possible de choisir la méthode de normalisation appliquée aux sous-balises de langue étendue avec le paramètre --normalize-language-ietf.

# 6. Exemples

L'exemple suivant édite un fichier nommé « movie.mkv ». Il définit le titre du segment et modifie le code de langue d'une piste audio et d'une piste de sous-titres. Noter que cet exemple peut être simplifié en omettant la 1ère option --edit parce que l'édition de l'élément d'informations du segment est dans tous les cas l'action par défaut pour toutes les options trouvées avant la 1ère option --edit.

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

Le deuxième exemple retire l'indicateur « Piste par défaut » de la 1ère piste de sous-titres et le définit pour la 2nde. Noter que mkvpropedit(1), à la différence de mkvmerge(1), ne définit pas l'indicateur « Piste par défaut » des autres pistes à « 0 » s'il est définit automatiquement à « 1 » pour piste différente.

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

Remplacer les balises pour la seconde piste de sous-titres dans un fichier ressemble à ceci :

    $ mkvpropedit movie.mkv --tags track:s2:new-subtitle-tags.xml

Supprimer toutes les balises nécessite d'omettre le nom de fichier :

    $ mkvpropedit movie.mkv --tags all:

Remplacer les chapitres dans un fichier ressemble à ceci :

    $ mkvpropedit movie.mkv --chapters new-chapters.xml

Supprimer tous les chapitres nécessite d'omettre le nom de fichier :

    $ mkvpropedit movie.mkv --chapters ''

Ajout d'un fichier de police (Arial.ttf) en pièce jointe :

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

Ajout d'un fichier de police (89719823.ttf) en pièce jointe et de quelques informations comme quoi ce n'est juste qu'Arial :

    $ mkvpropedit movie.mkv --attachment-name Arial.ttf --attachment-description 'La police Arial comme police TrueType' --attachment-mime-type application/x-truetype-font --add-attachment 89719823.ttf

Remplacement d'un fichier de police (Comic.ttf) en pièce jointe avec un autre (Arial.ttf) :

    $ mkvpropedit movie.mkv --attachment-name Arial.ttf --attachment-description 'La police Arial comme police TrueType' --replace-attachment name:Comic.ttf:Arial.ttf

Suppression du second fichier en pièce jointe, quel qu'il soit :

    $ mkvpropedit movie.mkv --delete-attachment 2

Suppression de toutes les polices en pièces jointes de type MIME :

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

# 7. Codes de fermeture

mkvpropedit(1) ferme avec l'un de ces 3 codes de fermeture :

- 0 -- Ce code de sortie signifie que la modification s'est correctement terminée.

- 1 -- Dans ce cas mkvpropedit(1) a émis au moins un avertissement, mais la modification a continué. Un avertissement est préfixé avec le texte « Avertissement : ». Selon le problème, les fichiers résultants pourront être valides ou non. L'utilisateur est vivement encouragé à vérifier et l'avertissement et les fichiers résultants.

- 2 -- Ce code de fermeture est utilisé lorsqu'une erreur survient. mkvpropedit(1) abandonne juste après le message d'erreur. Les messages d'erreurs vont des arguments erronés en ligne de commande aux fichiers corrompus en passant par les erreurs en lecture/écriture.

# 8. Fichiers texte et conversions de jeux de caractères

Pour une discussion approfondie sur la gestion des conversions de jeux de caractères des outils de la suite MKVToolNix, de l'encodage source/cible, de l'encodage de la ligne de commande, de l'encodage de la console, merci de voir les sections respectives nommées pareillement des pages man de mkvmerge(1).

# 9. Variables d'environment

mkvpropedit(1) utilise les variables par défaut qui déterminent la « locale » du système (par ex. LANG et la famille LC_*). Variables additionnelles :

Option | Description
--- | ---
MKVPROPEDIT_DEBUG, MKVTOOLNIX_DEBUG et sa forme courte MTX_DEBUG | Le contenu est traité comme s'il a été passé par l'option --debug.
MKVPROPEDIT_ENGAGE, MKVTOOLNIX_ENGAGE and its short form MTX_ENGAGE | Le contenu est traité comme s'il a été passé par l'option --engage.

# 10. Voir aussi

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

# 11. WWW

La dernière version peut toujours être trouvée à la page d'accueil de MKVToolNix.