MKVMERGE(1) | Commandes utilisateur | MKVMERGE(1) |
mkvmerge - Fusionne les flux multimédia en un fichier Matroska
mkvmerge [global options] {-o out} [options1] {file1} [[options2] {file2}] [@options-file.json]
Ce logiciel prend les entrées de plusieurs fichiers de médias et joint leurs flux (tous ou une sélection) dans un fichier Matroska ; voir le site Web Matroska[1].
L'ordre des options en ligne de commande est important. Les nouveaux utilisateurs devraient lire la section "Ordre des options" .
-v, --verbose
-q, --quiet
-o, --output file-name
-w, --webm
Pour les chapitres et les balises, seule une partie des éléments est permise. mkvmerge(1) retirera automatiquement tous les éléments non permis par la spécification.
--title titre
--default-language language-code
Le code langue par défaut pour « undefined » est « und ».
--segmentinfo filename.xml
Voir la section relative aux fichiers XML d'infos de segments ci-dessous pour les détails.
--segment-uid SID1,SID2,...
Si le SID commence avec =, alors son reste est interprété comme le nom d'un fichier Matroska dont l'UID de segment est lu et utilisé.
Chaque fichier créé contient un segment, et chaque segment a un UID de segment. Si plus d'UID de segment sont spécifiés que de segments sont créés, alors le surplus d'UID est ignoré. Si moins d'UID sont spécifiés que de segments sont créés, alors des UID aléatoires seront créés pour eux.
--chapter-language language-code
Cette option peut être utilisée pour des fichiers de chapitres simples et pour des fichiers source qui contiennent des chapitres mais pas d'informations sur la langue des chapitres, par ex. les fichiers MP4 et OGM.
La langue définie avec cette option est aussi utilisée quand les chapitres sont générés avec --generate-chapters comme option.
--chapter-charset character-set
Ce commutateur s'appliquera aussi aux chapitres qui sont copiés depuis certains types de conteneur, par ex. les fichiers Ogg/OGM et MP4. Voir la section sur les chapitres ci-dessous pour les détails.
--chapter-sync d[,o[/p]]
o/p : ajuste les horodatages de o/p pour corriger les dérives linéaires. p est par défaut 1 si omis. o et p peuvent être des nombre à virgules flottantes.
Par défaut : aucune correction manuelle de la sync. (ce qui est la même chose que d = 0 et o/p = 1.0).
Cette option peut être utilisée de multiples fois pour un fichier source en s'appliquant à plusieurs pistes par sélection de différentes ID de pistes à chaque fois.
--generate-chapters mode
Ce mode fonctionne aussi avec les modes de découpage « parts: » et « parts-frames: ». Pour ces modes, un chapitre sera généré pour chaque plage d'horodatage ajoutée (celles qui débutent les horodatages sont préfixées avec « + »).
Example : --generate-chapters interval:45s
Les noms pour les nouveaux chapitres sont contrôlés par l'option --generate-chapters-name-template. La langue est définie avec --chapter-language qui doit survenir avant --generate-chapters.
--generate-chapters-name-template template
Il existe plusieurs variables qui peuvent être utilisées dans le motif et qui sont remplacées par leurs valeus réelles quand un chapitre est généré. La chaîne '<NUM>' sera remplacée par le numéro de chapitre. La chaîne '<START>' sera remplacée par l'horodatage de début de chapitre.
Les chaînes '<FILE_NAME>' et '<FILE_NAME_WITH_EXT>' sont seulement remplies à la génération des chapitres pour les fichiers ajoutés. Elles seront remplacées par le nom du fichier ajouté avec et sans son extension, respectivement. Noter que seuls le nom de base du fichier et l'extension sont insérés, pas son dossier ou les lettres ou composants du lecteur.
Il est possible de spécifier un nombre minimal de chiffres pour les numéros de chapitres avec '<NUM:places>', par ex. '<NUM:3>'. Le numéro résultant sera préfixé de zéros si le nombre de chiffres est moindre que spécifié.
Il est possible de contrôler le format utilisé par l'horodatage de début avec <START:format>. Le format est par défaut '%H:%M:%S' si aucun n'est donné. Les codes de format valides sont :
--cue-chapter-name-format format
Si cette option n'est pas donnée, alors mkvmerge(1) utilise par défaut le format '%p - %t' (l'artiste, suivi par une espace, un tiret, une autre espace et le titre).
Si le format est donnée, alors tout excepté les métacaractères suivants est copié tel quel, et les métacaractères sont remplacés comme ceci :
--chapters file-name
--global-tags file-name
--track-order FID1:TID1,FID2:TID2,...
--cluster-length spec
Si aucune unité n'est utilisée, alors mkvmerge(1) placera au plus n blocs de données dans chaque grappe. Le nombre maximal de blocs est 65535.
Si le nombre d est suivi de 'ms', alors mkvmerge(1) placera au plus d millisecondes de données dans chaque grappe. Le minimum pour d est '100 ms', et le maximum est '32000 ms'.
Par défaut mkvmerge(1) place au plus 65535 blocs et 5000 ms de données par grappe.
Les programmes essayant de trouver une certaine trame ne pourront effectuer qu'un positionnement sur une grappe (cluster), après quoi ils devront lire la grappe entière. Donc la création de grappes plus grandes pourrait conduire à un positionnement lent ou imprécis.
--clusters-in-meta-seek
--timestamp-scale factor
Normalement mkvmerge(1) utilisera une valeur de 1000000, ce qui signifie que les horodatages et les durées auront une précision de 1 ms. Pour les fichiers qui ne contiennent pas de piste vidéo mais au moins une piste audio, mkvmerge(1) choisira automatiquement un facteur d'échelle de code temporel de façon à ce que les horodatages et les durées aient une précision de un échantillon audio. Cela permet un positionnement et une extraction précise au prix de calculs plus importants.
Si la valeur spéciale -1 est utilisée, alors mkvmerge(1) utilisera la précision des échantillons même si une piste vidéo est présente.
--enable-durations
--no-cues
--no-date
--disable-lacing
--disable-track-statistics-tags
Activer cette option empêchera mkvmerge(1) d'écrire ces balises et de modifier toutes les balises existantes avec les mêmes noms.
--disable-language-ietf
--split specification
Pour le moment mkvmerge(1) prend en charge quatre modes différents.
Syntaxe : --split [size:]d[k|m|g]
Exemples : --split size:700m ou --split 150000000
Le paramètre d peut se terminer avec 'k', 'm' ou 'g' pour indiquer que la taille est en ko, Mo ou Go, respectivement. Sinon une taille en octets est supposée. Après que le fichier cible actuel a atteint cette limite de taille, un nouveau est démarré.
Le préfixe 'size:' peut être omis pour des raisons de compatibilité.
Syntaxe : --split [duration:]HH:MM:SS.nnnnnnnnn|ds
Exemples : --split duration:00:60:00.000 ou --split 3600s
Le paramètre doit soit avoir la forme HH:MM:SS.nnnnnnnnn pour spécifié la durée en précision à la nanoseconde soit être un chiffre d suivi de la lettre 's' pour une durée en secondes. HH est le nombre d'heures, MM le nombre de minutes, SS le nombre de secondes et nnnnnnnnn le nombre de nanosecondes. Les nombres d'heures et de nanosecondes peuvent être omis tous les deux. Il peut y avoir jusqu'à neuf chiffres de décimales. Après que la durée du contenu de la cible actuelle a atteint cette limite, un nouveau fichier cible est démarré.
Le préfixe 'duration:' peut être omis pour des raisons de compatibilité.
Syntaxe : --split timestamps:A[,B[,C...]]
Exemple : --split timestamps:00:45:00.000,01:20:00.250,6300s
Les paramètres A, B, C etc. doivent tous avoir le même format que ceux utilisés pour la durée (voir ci-dessus). La liste des horodatages est séparée par des virgules. Après que le flux source a atteint le code temporel du point de scission, un nouveau fichier est créé. Alors le point de scission suivant dans cette liste est utilisé.
Le préfixe 'timestamps:' ne doit pas être omis.
Syntaxe : --split parts:start1-end1[,[+]start2-end2[,[+]start3-end3...]]
Exemples :
Le mode parts indique à mkvmerge(1) de conserver certaines plages d'horodatages et d'en rejeter d'autres. Les plages à conserver doivent être listées après le mot clé parts: et être séparées par des virgules. Une plage elle-même consiste en un horodatage de début et de fin dans le même format que les autres variations de --split acceptent (par ex. 00:01:20 et 80s réfère au même horodatage).
Si un horodatage de début est omis, alors il sera par défaut défini selon l'horodatage de fin de la plage précédente. En l'absence, il sera par défaut défini au début du fichier (voir exemple 3)
Si un horodatage de fin est omis, alors il sera par défaut défini à la fin des fichiers sources, ce qui indique simplement à mkvmerge(1) de conserver le reste (voir exemple 3)
Normalement chaque plage sera écrite dans un nouveau fichier. Ceci peut être modifié de telle manière que des plages consécutives puissent être écrites vers le même fichier. Pour cela, l'utilisateur doit préfixer l'horodatage de début avec un +. Ceci indique à mkvmerge(1) de ne pas créer de nouveau fichier et plutôt d'ajouter la plage au même fichier vers lequel la plage précédente a été écrite. Les horodatages seront ajustés pour qu'il n'y ait pas de blanc dans le fichier cible même s'il y avait un blanc entre les deux plages dans le fichier source.
Dans l'exemple 1 mkvmerge(1) va créer deux fichiers. Le premier contiendra le contenu débutant à 00:01:20 jusqu'à 00:02:45. Le second contiendra le contenu débutant à 00:05:50 jusqu'à 00:10:30.
Dans l'exemple 2 mkvmerge(1) va créer un seul fichier. Celui-ci contiendra et le contenu débutant à 00:01:20 jusqu'à 00:02:45 et le contenu débutant à 00:05:50 jusqu'à 00:10:30.
Dans l'exemple 3 mkvmerge(1) va créer deux fichiers. Le premier contiendra le contenu depuis le début des fichiers sources jusqu'à 00:02:45. Le second contiendra le contenu débutant à 00:05:50 jusqu'à la fin des fichiers sources.
Syntaxe : --split parts-frames:start1-end1[,[+]start2-end2[,[+]start3-end3...]]
Exemples :
Le mode parts-frames indique à mkvmerge(1) de conserver certaines plages de numéros de trame/champ tout en en rejetant d'autres. Les plages à conserver doivent être listées près le mot clé parts-frames: et être séparées par des virgules. Une plage elle-même consite en un numéro de trame/champ de début et de fin. La numérotation débute à 1.
Si un numéro de début est omis, alors il est défini par défaut au numéro de fin de la plage précédente.
Si un numéro de fin est omis, alors il sera par défaut défini à la fin des fichiers sources, ce qui indique simplement à mkvmerge(1) de conserver le reste (voir l'exemple 3)
Normalement chaque plage sera écrite dans un nouveau fichier. Ceci peut être modifié de telle manière que des plages consécutive soient écrites dans le même fichier. Pour cela, l'utilisateur doit préfixer le numéro de début avec un +. Ceci indique à mkvmerge(1) de ne pas créer un nouveau fichier mais d'ajouter la plage au même fichier dans lequel la plage précédente a été écrite. Les horodatages seront ajustés de telle manière qu'il n'y ait pas de blanc dans le fichier cible même s'il y en avait un dans les deux plages du fichier source.
Dans l'exemple 2, mkvmerge(1) va créer seulement un fichier. Ce fichier contiendra les contenus débutant à 733 jusqu'à 912 et débutant à 1592 jusqu'à 2730.
Dans l'exemple 3, mkvmerge(1) va créer deux fichiers. Le premier contiendra le contenu depuis le début des fichiers sources jusqu'à 430. Le second contiendra le contenu débutant à 2512 jusqu'à la fin des fichiers sources.
Ce mode considère seulement la première piste vidéo qui est générée. Si aucune piste vidéo n'est générée, aucune scission n'est opérée.
Syntaxe : --split frames:A[,B[,C...]]
Exemple : --split frames:120,237,891
Les paramètres A, B, C etc. doivent tous être des entiers positifs. La numérotation débute à 1. La liste des numéros de trame/champ est séparée par des virgules. Après que le flux source a atteint le numéro actuel de trame/champ du point de scission, un nouveau fichier est créé. Ensuite le point de scission suivant donné par cette liste est utilisé.
Le préfixe 'frames:' ne doit pas être omis.
Ce mode considère seulement la première piste vidéo qui est générée. Si aucune piste vidéo n'est générée, aucune scission n'est opérée.
Syntaxe : --split chapters:all ou --split chapters:A[,B[,C...]]
Exemple : --split chapters:5,8
Les paramètres A, B, C etc. doivent tous être des entiers positifs. La numérotation débute à 1. La liste des numéros de chapitres est séparée par des virgules. La scission sera opérée juste avant la première trame clé dont l'horodatage est égal ou supérieur à l'horodatage de début pour les chapitres dont les numéros sont listés. Un chapitre débutant à 0 s n'est jamais pris en compte pour la scission et est ignoré.
Le mot clé all peut être utilisé plutôt que de lister tous les numéros de chapitres manuellement.
Le préfixe 'chapters:' ne doit pas être omis.
Pour ce mode de scission, le nom de fichier cible est traité différemment qu'en opération normale. Il peut contenir un printf comme l'expression '%d' et inclure une largeur de champ optionnelle, par ex. '%02d'. Si c'est le cas, alors le numéro de fichier actuel sera formaté de manière appropriée et inséré à ce point dans le nom de fichier. S'il n'y a pas un tel motif, alors un motif de '-%03d' est supposé juste avant l'extension de du fichier : '-o output.mkv' résulterait en 'output-001.mkv' et ainsi de suite. S'il n'y a pas d'extension, alors '-%03d' sera ajouté au nom.
Un autre motif possible est '%c' ; il sera remplacé par le nom du premier chapitre du fichier. Noter que quand '%c' est présent, le motif '-%03d' ne sera pas ajouté automatiquement.
--link
--link-to-previous segment-UID
Si le SID commence avec =, alors son reste est interprété comme le nom d'un fichier Matroska dont l'UID de segment est lu et utilisé.
--link-to-next segment-UID
Si le SID commence avec =, alors son reste est interprété comme le nom d'un fichier Matroska dont l'UID de segment est lu et utilisé.
--append-mode mode
Quand mkvmerge(1) ajoute une piste (appelée 'track2_1' à partir de maintenant) depuis un second fichier (appelé 'file2') à une piste (appelée 'track1_1') depuis le premier fichier (appelé 'file1'), alors il doit décaler tous les horodatages pour 'track2_1' d'un certain montant. Pour le mode 'file' ce montant est le plus haut horodatage rencontré dans 'file1' même si cet horodatage provenait d'une piste différente que 'track1_1'. En mode piste le décalage est le plus haut horodatage de 'track1_1'.
Malheureusement mkvmerge(1) ne peut pas détecter quel mode utiliser de manière fiable. Par conséquent, le mode par défaut est 'file'. Le mode 'file' fonctionne habituellement mieux pour les fichiers ayant été créés indépendamment ; par ex. en ajoutant des fichiers AVI ou MP4. Le mode 'track' est susceptible de mieux fonctionner pour les sources qui sont essentiellement juste des parties d'un gros fichier, par ex. pour les fichiers VOB et EVO.
Les pistes de sous-titres sont toujours traitées comme si le mode 'file' était actif même si c'est le mode 'track' qui est actif.
--append-to SFID1:STID1:DFID1:DTID1[,...]
Si cette option a été omise, alors un mappage standard est utilisé. Ce mappage standard ajoute chaque piste du fichier actuel à une piste du fichier précédent avec le même ID de piste. Cela rend l'ajout plus facile, si un film a été scindé en deux parties et que les deux fichiers ont le même nombre de pistes et d'ID de pistes, avec la commande mkvmerge -o output.mkv part1.mkv +part2.mkv.
+
$ mkvmerge -o complet.mkv fichier1.mkv + fichier2.mkv $ mkvmerge -o complet.mkv fichier1.mkv +fichier2.mkv
[ file1 file2 ]
Ceci est une syntaxe alternative pour utiliser « + » entre les noms de fichiers. Les deux commandes suivantes sont donc équivalentes :
$ mkvmerge -o complet.mkv fichier1.mkv + fichier2.mkv $ mkvmerge -o complet.mkv '[' fichier1.mkv fichier2.mkv ']'
=
Le « = » peut également être placé devant le nom de fichier suivant. Par conséquent, les deux commandes suivantes sont équivalentes :
$ mkvmerge -o complet.mkv = fichier1.mkv $ mkvmerge -o complet.mkv =fichier1.mkv
( file1 file2 )
Ceci peut être utilisé pour par ex. les fichiers VOB provenant d'un DVD ou de flux de transport MPEG. Il ne peut pas être utilisé si chaque fichier contient son propre jeu d'entêtes, ce qui est habituellement le cas avec les fichiers autonomes AVI ou MP4.
Placer un nom de fichier entre parenthèses empêche aussi mkvmerge(1) de rechercher d'autres fichiers avec le même nom de base tel que décrit dans l'option =. Par conséquent, ces deux lignes de commande sont équivalentes :
$ mkvmerge -o out.mkv = file.mkv $ mkvmerge -o out.mkv '(' file.mkv ')'
Plusieurs choses devraient être notées :
--attachment-description description
--attachment-mime-type MIME type
--attachment-name name
--attach-file file-name, --attach-file-once file-name
mkvextract(1) peut être utilisé pour extraire les fichiers joints d'un fichier Matroska.
-a, --audio-tracks [!]n,m,...
Au lieu des ID de piste il est possible de fournir des codes de langue ISO 639-2. Cela ne fonctionnera que pour les fichiers sources fournissant des balises de langue pour leurs pistes.
Par défaut : copie toutes les pistes de ce type.
Si les ID sont préfixés avec !, alors la signification est inversée : copier toutes les pistes semblables sauf celles listées après le !.
-d, --video-tracks [!]n,m,...
Au lieu des ID de piste il est possible de fournir des codes de langue ISO 639-2. Cela ne fonctionnera que pour les fichiers sources fournissant des balises de langue pour leurs pistes.
Si les ID sont préfixés avec !, alors la signification est inversée : copier toutes les pistes semblables sauf celles listées après le !.
-s, --subtitle-tracks [!]n,m,...
Au lieu des ID de piste il est possible de fournir des codes de langue ISO 639-2. Cela ne fonctionnera que pour les fichiers sources fournissant des balises de langue pour leurs pistes.
Si les ID sont préfixés avec !, alors la signification est inversée : copier toutes les pistes semblables sauf celles listées après le !.
-b, --button-tracks [!]n,m,...
Au lieu des ID de piste il est possible de fournir des codes de langue ISO 639-2. Cela ne fonctionnera que pour les fichiers sources fournissant des balises de langue pour leurs pistes.
Si les ID sont préfixés avec !, alors la signification est inversée : copier toutes les pistes semblables sauf celles listées après le !.
--track-tags [!]n,m,...
Si les ID sont préfixés avec !, alors la signification est inversée : copier toutes les pistes semblables sauf celles listées après le !.
-m, --attachments [!]n[:all|first],m[:all|first],...
Par défaut les pièces jointes sont copiées vers tous les fichiers cibles.
Si les ID sont préfixés avec !, alors la signification est inversée : copier toutes les pistes semblables sauf celles listées après le !.
-A, --no-audio
-D, --no-video
-S, --no-subtitles
-B, --no-buttons
-T, --no-track-tags
--no-chapters
-M, --no-attachments
--no-global-tags
-y, --sync TID:d[,o[/p]]
o/p : ajuste les horodatages de o/p pour corriger les dérives linéaires. p est par défaut 1 si omis. o et p peuvent être des nombre à virgules flottantes.
Par défaut : aucune correction manuelle de la sync. (ce qui est la même chose que d = 0 et o/p = 1.0).
Cette option peut être utilisée de multiples fois pour un fichier source en s'appliquant à plusieurs pistes par sélection de différentes ID de pistes à chaque fois.
--cues TID:none|iframes|all
L'option par défaut est 'iframes' pour les pistes vidéo et de sous-titres, et 'none' pour les pistes audio. Voir aussi l'option --no-cues qui inhibe la création d'entrées de montage CUES quelque soit l'option --cues utilisée.
Cette option peut être utilisée de multiples fois pour un fichier source en s'appliquant à plusieurs pistes par sélection de différentes ID de pistes à chaque fois.
--default-track TID[:bool]
Cette option peut être utilisée de multiples fois pour un fichier source en s'appliquant à plusieurs pistes par sélection de différentes ID de pistes à chaque fois.
--forced-track TID[:bool]
Cette option peut être utilisée de multiples fois pour un fichier source en s'appliquant à plusieurs pistes par sélection de différentes ID de pistes à chaque fois.
--blockadd TID:level
--track-name TID:name
--langue TID:langue
Cette option peut être utilisée de multiples fois pour un fichier source en s'appliquant à plusieurs pistes par sélection de différentes ID de pistes à chaque fois.
-t, --tags TID:file-name
--aac-is-sbr TID[:0|1]
Si le fichier source est un fichier Matroska, alors le CodecID devrait être suffisant pour détecter SBR AAC. Toutefois si CodecID est faux, alors ce commutateur pourra être utilisé pour corriger cela..
Si mkvmerge(1) détecte incorrectement qu'un fichier AAC est SBR, alors il est possible d'ajouter ':0' à l'ID de piste.
--reduce-to-core TID
Actuellement, seules les pistes DTS sont affectées par cette option. Les pistes TrueHD qui contiennent un cœur AC-3 embarqué sont plutôt présentées en deux pistes séparées que l'utilisateur peut sélectionner pour copier. Pour DTS un tel schéma ne fonctionnerait pas parce que les extensions HD ne peuvent pas être décodées par elles-mêmes – à la différence des données TrueHD.
--remove-dialog-normalization-gain TID
Seules les pistes AC-3, DTS et TrueHD sont actuellement concernées par cette option.
--timestamps TID:file-name
--default-duration TID:x
Si la durée par défaut n'est pas forcée, alors mkvmerge essayera de dériver la durée par défaut de la piste depuis le conteneur et/ou le flux élémentaire encodé pour certains types de pistes, par ex. AVC/H.264 ou MPEG-2.
Cette option peut aussi être utilisée pour modifier les FPS des pistes vidéo sans avoir à utiliser un fichier externe d'horodatages.
--fix-bitstream-timing-information TID[:0|1]
--nalu-size-length TID:n
--compression TID:n
La méthode de compression « mpeg4_p2 »/« mpeg4p2 » est une méthode spéciale de compression appelée « header removal » qui n'est disponible que pour les pistes vidéo MPEG4 part 2.
La compression par défaut pour certains types de sous-titres est 'zlib'. Cette méthode de compression est aussi celle que presque toutes les applications de lecture prennent en charge. La prise en charge d'autres méthodes de compression que 'none' n'est pas assurée.
-f, --fourcc TID:FourCC
--display-dimensions TID:widthxheight
Une autre manière de définir les valeurs est d'utiliser les options --aspect-ratio ou --aspect-ratio-factor (voir ci-dessous). Ces options sont mutuellement exclusives.
--aspect-ratio TID:ratio|width/height
Une autre manière de définir les valeurs est d'utiliser les options --aspect-ratio-factor ou --display-dimensions (voir ci-dessus et ci-dessous). Ces options sont mutuellement exclusives.
--aspect-ratio-factor TID:factor|n/d
Une autre manière de définir les valeurs est d'utiliser les options --aspect-ratio ou --display-dimensions (voir ci-dessous). Ces options sont mutuellement exclusives.
--cropping TID:left,top,right,bottom
--colour-matrix TID:n
Les valeurs valides et leur signification sont :
0: GBR, 1: BT709, 2: non spécifié, 3: réservé, 4: FCC, 5: BT470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: YCOCG, 9: BT2020 luminance non constante, 10: BT2020 luminance constante
--colour-bits-per-channel TID:n
--chroma-subsample TID:hori,vert
Exemple : pour une vidéo avec un sous-échantillonnage chroma 4:2:0, le paramètre devrait être défini à TID:1,1.
--cb-subsample TID:hori,vert
Exemple : pour une vidéo avec un sous-échantillonnage chroma 4:2:1, le paramètre --chroma-subsample devrait être défini à TID:1,0 et Cb-subsample devrait être défini à TID:1,0.
--chroma-siting TID:hori,vert
--colour-range TID:n
--colour-transfer-characteristics TID:n
Les valeurs valides et leur signification sont :
0: réservé, 1: ITU-R BT.709, 2: non spécifié, 3: réservé, 4: courbe gamma 2.2, 5: courbe gamma 2.8, 6: SMPTE 170M, 7: SMPTE 240M, 8: linéaire, 9: log, 10: racine de log, 11: IEC 61966-2-4, 12: gamut de couleur étendu ITU-R BT.1361, 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
Les valeurs valides et leur signification sont :
0: réservé, 1: ITU-R BT.709, 2: non spécifié, 3: réservé, 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: phosphores JEDEC P22
--max-content-light TID:n
--max-frame-light TID:n
--chromaticity-coordinates TID:red-x,red-y,green-x,green-y,blue-x,blue-y
--white-colour-coordinates TID:x,y
--max-luminance TID:float
--min-luminance TID:float
--projection-type TID:method
--projection-private TID:data
--projection-pose-yaw TID:float
--projection-pose-pitch TID:float
--projection-pose-roll TID:float
--field-order TID:n
0: progressif ; 1: entrelacé avec le champ du haut affiché en premier et le champ du haut stocké en premier ; 2: ordre de champ indéterminé ; 6: entrelacé avec le champ du bas affiché en premier et le champ du bas stocké en premier ; 9: entrelacé avec le champ du bas affiché en premier et le champ du haut stocké en premier ; 14: entrelacé avec le champ du haut affiché en premier et le champ du bas stocké en premier
--stereo-mode TID:n|keyword
'mono', 'side_by_side_left_first', 'top_bottom_right_first', 'top_bottom_left_first', 'checkerboard_right_first', 'checkerboard_left_first', 'row_interleaved_right_first', 'row_interleaved_left_first', 'column_interleaved_right_first', 'column_interleaved_left_first', 'anaglyph_cyan_red', 'side_by_side_right_first', 'anaglyph_green_magenta', 'both_eyes_laced_left_first', 'both_eyes_laced_right_first'.
--sub-charset TID:character-set
Cette option peut être utilisée de multiples fois pour un fichier source en s'appliquant à plusieurs pistes par sélection de différentes ID de pistes à chaque fois.
-i, --identify file-name
Le format de sortie utilisé pour le résultat peut être modifié avec l'option --identification-format.
-J file-name
-F, --identification-format format
Ce format n'est pas destiné à être analysé. La sortie sera traduite dans la langue qu'mkvmerge(1) utilise (voir aussi --ui-language).
mkvmerge-identification-output-schema-v12.json[3]
Toutes les versions du schéma JSON sont disponibles en ligne et dans les archives publiées du code source.
--probe-range-percentage percentage
Si les pistes sont connues pour être présentes mais non trouvées, alors le pourcentage à analyser peut être modifié avec cette option. Un minimum de 10 Mo est requis et ne peut pas être modifié.
-l, --list-types
--list-languages
--priority priority
Sélectionner 'lowest' oblige aussi mkvmerge(1) à sélectionner la priorité E/S ralentie en plus de la priorité processus la plus petite possible.
--command-line-charset character-set
--output-charset character-set
-r, --redirect-output file-name
--flush-on-close
--ui-language code
--abort-on-warnings
--deterministic seed
L'amorce peut être une chaîne quelconque, pas nécessairement un nombre.
L'obtention de fichiers identiques à l'octet près ne peut être garantie que dans les conditions suivantes :
Utiliser d'autres versions de mkvmerge(1) ou d'autres options en ligne de commande peut résulter en un fichier identique à l'octet, mais ce n'est pas garanti.
--debug topic
--engage feature
--gui-mode
@options-file.json
--capabilities
-h, --help
-V, --version
Pour chaue fichier, l'utilisateur peut sélectionner quelle pistes mkvmerge(1) devrait prendre. Elles sont toutes mises dans le fichier spécifié avec -o. Une liste des formats source connus (et pris en charge) peut être obtenue avec l'option -l.
L'ordre des options en ligne de commande est important. Les nouveaux utilisateurs devraient lire la section "Ordre des options" .
L'ordre dans lequel les options sont saisies est important pour quelques options. Les options appartiennent à deux catégories :
Les options sont traitées de la gauche vers la droite. Si une option apparaît plusieurs fois dans le même contexte, alors la dernière sera utilisée. Le titre sera donc défini à "Autre chose" dans l'exemple suivant :
$ mkvmerge -o output.mkv --title 'This and that' input.avi --title 'Something else'
L'exemple suivant montre qu'utiliser l'option --language 2 fois est correct parce qu'elles sont utilisées dans des contextes différents. Même si on les applique à la même ID de piste, elles s'appliquent à des fichiers source différents et donc des contextes différents :
$ mkvmerge -o output.mkv --language 0:fre français.ogg --language 0:deu deutsch.ogg
Supposons un fichier appelé MyMovie.avi et la piste audio dans un fichier séparé , par ex. 'MyMovie.wav'. On veut d'abord encoder l'audio en OggVorbis :
$ oggenc -q4 -oMyMovie.ogg MyMovie.wav
Après quelques minutes, on peut joindre l'audio et la vidéo :
$ mkvmerge -o MyMovie-with-sound.mkv MyMovie.avi MyMovie.ogg
Si AVI contient déjà une piste audio alors elle sera aussi copiée (si mkvmerge(1) prend en charge le format audio). Pour l'éviter, faire simplement
$ mkvmerge -o MyMovie-with-sound.mkv -A MyMovie.avi MyMovie.ogg
Après réflexion, une autre piste audio est numérisée, par ex. les commentaires du réalisateur ou une autre langue vers 'MyMovie-add-audio.wav'. On peut l'encoder à nouveau et la joindre aux autres fichiers :
$ oggenc -q4 -oMyMovie-add-audio.ogg MyMovie-add-audio.wav $ mkvmerge -o MM-complete.mkv MyMovie-with-sound.mkv MyMovie-add-audio.ogg
Un résultat similaire peut être obtenu avec
$ mkvmerge -o MM-complete.mkv -A MyMovie.avi MyMovie.ogg MyMovie-add-audio.ogg
Exécuter maintenant mplayer et apprécier. En cas de pistes audio multiples (ou même vidéo) alors il est possible d'indiquer à mplayer quelle piste jouer avec les options '-vid' et '-aid'. Celles-ci sont basées sur 0 et ne différencient pas la vidéo et l'audio.
On peut obtenir un piste audio synchronisée facilement. D'abord déterminer quel ID de piste la piste Vorbis a avec
$ mkvmerge --identify outofsync.ogg
Il est maintenant possible d'utiliser cet ID dans la ligne de commande suivante :
$ mkvmerge -o goodsync.mkv -A source.avi -y 12345:200 outofsync.ogg
Cela ajouterait 200 ms de silence au début de la piste audio avec l'ID 12345 issue de 'outofsync.ogg'.
Quelques films débutent correctement synchronisés puis se désynchronisent lentement subissent. Pour ces films, on peut spécifier un délai appliqué à tous les horodatages -- aucune donnée ajoutée ou retirée. Si le délai est trop petit/grand, le résultat est mauvais. Un exemple est un épisode transcodé qui était décalé de 0.2 secondes à la séquence qui était longue de 77340 trames. À 29.97 tps 0.2 seconde correspond à approx. 6 trames. Opération appliquée
$ mkvmerge -o goodsync.mkv -y 23456:0,77346/77340 outofsync.mkv
Le résultat était correct.
Les options de synchronisation peuvent aussi être utilisées pour les sous-titres de la même manière.
Pour les sous-titres texte on peut soit utiliser un programme Windows (comme SubRipper) ou le paquet subrip de la source de transcode(1)dans le répertoire 'contrib/subrip'. L'opération générale est :
$ tccat -i /path/to/copied/dvd/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o mymovie
$ pgm2txt mymovie
$ ispell -d american *txt
$ srttool -s -w -i mymovie.srtx -o mymovie.srt
Le fichier résultant peut être utilisé comme fichier source pour mkvmerge(1) :
$ mkvmerge -o mymovie.mkv mymovie.avi mymovie.srt
Il est facile de spécifier la langue d'une piste donnée. D'abord trouver le code ISO 639-2 de la langue. mkvmerge(1) peut lister tous ces codes :
$ mkvmerge --list-languages
Trouver dans la liste la langue souhaitée. Supposons qu'il y a 2 pistes audio dans un fichier Matroska dont il faut définir les codes langue et que leurs ID de piste sont 2 et 3. Cela peut être réalisé avec
$ mkvmerge -o with-lang-codes.mkv --language 2:ger --language 3:dut without-lang-codes.mkv
On peut voir qu'on peut utiliser le commutateur --language de multiples fois.
Peut-être que vous aimeriez aussi que le lecteur utilise la langue Néerlandaise comme langue par défaut. Vous avez également des sous-titres supplémentaires, en Anglais et en Français, et que le lecteur désire afficher les français par défaut. Cela peut être fait avec
$ mkvmerge -o with-lang-codes.mkv --language 2:ger --language 3:dut --default-track 3 without-lang-codes.mkv --language 0:eng english.srt --default-track 0 --language 0:fre french.srt
Si la langue ou les drapeaux de piste par défaut spécifiés dans la sortie de mkvinfo(1) ne sont pas visibles, merci de lire la section relatives aux valeurs par défaut.
Désactiver la compression d'un fichier source.
$ mkvmerge -o no-compression.mkv --compression -1:none MyMovie.avi --compression -1:none mymovie.srt
Quelques unes des options pour mkvmerge(1) nécessitent un ID de piste pour spécifier à quelle piste elles devraient s'appliquer. Ces ID de pistes sont imprimés par les lecteurs lors du démuxage du fichier source actuel., ou si mkvmerge(1) est appelé avec l'option --identify. Un exemple d'une telle sortie :
$ mkvmerge -i v.mkv File 'v.mkv': container: Matroska Track ID 0: video (V_MS/VFW/FOURCC, DIV3) Track ID 1: audio (A_MPEG/L3)
Ne pas confondre les ID de pistes qui sont assignés aux pistes placées dans le fichier MKV cible avec les ID de pistes des fichiers sources. Seuls les ID de pistes des fichiers sources sont utilisés pour les options nécessitant ces valeurs.
Noter aussi que chaque fichier source possède son propre jeu d'ID de pistes. Par conséquent les ID de pistes pour le fichier 'file1.ext' tel que rapporté par 'mkvmerge --identify' ne change pas quelque soit le nombre de fichiers sources ou dans quelle position 'file1.ext' est utilisé.
Les ID de pistes sont assignées comme ceci :
Les options qui utilisent les ID de pistes sont celles dont la description contient 'TID'. Les options suivantes utilisent aussi des ID de pistes : --audio-tracks, --video-tracks, --subtitle-tracks, --button-tracks and --track-tags.
Il existe plusieurs ID qui ont une signification spéciale et qui n'apparaissent pas lors de l'identification.
L'ID de piste spéciale '-1' est un joker et applique le commutateur donné à toutes les pistes qui sont lues depuis un fichier source.
L'ID de piste spécial « -2 » fait référence aux chapitres d'un fichier source. Actuellement seule l'option --sync utilise cet ID spécial. Comme alternative à --sync -2:..., l'option --chapter-sync ... peut être utilisée.
Cette section s'applique à tous les logiciels de MKVToolNix même si elle ne mentionne que mkvmerge(1).
Tout le texte dans un fichier Matroska est encodé en UTF-8. Cela signifie que mkvmerge(1) doit convertir chaque fichier texte lu et chaque texte donné sur la ligne de commande d'un jeu de caractères en UTF-8. En corollaire, cela signifie aussi que la sortie de mkvmerge(1) doit être convertie d'UTF-8 vers ce jeu de caractères, par ex. si une traduction autre qu'Anglaise est utilisée avec --ui-language ou pour un texte provenant d'un fichier Matroska.
mkvmerge(1) effectue cette conversion automatiquement d'après la présence d'un marqueur d'ordre d'octet (byte order marker, soit : BOM) ou la « locale » du système. Le jeu de caractères déduit de la « locale » dépend du système d'exploitation sur lequel est exécuté mkvmerge(1).
Les fichiers texte qui débutent avec un BOM sont déjà encodés avec une des représentations UTF. mkvmerge(1) prend en charge les cinq modes suivant : UTF-8, UTF-16 Little et Big Endian, UTF-32 Little et Big Endian. Les fichiers texte avec un BOM sont automatiquement convertis en UTF-8. Tout paramètre qui autrement définirait le jeu de caractères pour un tel fichier (par ex. --sub-charset) est silencieusement ignoré.
Sur les systèmes de type Unix mkvmerge(1) utilise l'appel système setlocale(3) qui à son tour utilise les variables d'environnement LANG, LC_ALL et LC_CYPE. Le jeu de caractères résultant est souvent un de la famille UTF-8 ou ISO-8859-* et est utilisé pour toutes les opérations de fichier texte, pour l'encodage des chaînes sur la ligne de commande et pour la sortie vers la console.
Sur Windows, le jeu de caractères par défaut utilisé pour convertir les fichiers texte est déterminé par un appel au système d'appel GetACP().
La lecture de la ligne de commande est effectuée avec la fonction GetCommandLineW() qui retourne déjà une chaîne Unicode. Par conséquent l'option --command-line-charset est ignorée sur Windows.
La sortie vers la console consiste en trois scénarios :
Si la sortie est redirigée avec cmd.exe elle-même, par ex. avec mkvinfo file.mkv > info.txt, alors le jeu de caractères est toujours UTF-8 et ne peut pas être modifié.
Sinon (à l'écriture directe vers la console) la fonction Windows WriteConsoleW() est utilisée et l'option --output-charset est ignorée. La console devrait être capable de sortir tous les caractères Unicode pour lesquels la prise en charge de la langue correspondante est assurée (par ex. les caractères Chinois ne devraient pas être affichés sur les versions Anglaises de Windows).
Les options suivantes existent et permettent de spécifier les jeux de caractères :
Un fichier d'options est un fichier où mkvmerge(1) peut lire des arguments en ligne de commande supplémentaires. Ce peut être utilisé pour contourner certaines limitations du shell ou du système d'exploitation à l'exécution de programmes externes comme une longueur de ligne de commande limitée.
Un fichier d'option contient des données formatées en JSON. Son contenu doit être un tableau valide JSON comprenant seulement des chaînes JSON. L'encodage du fichier doit être UTF-8. Le fichier ne devrait pas débuter avec un marquer d'ordre d'octet (BOM), mais si c'est le cas, il sera ignoré.
Les règles pour échapper les caractères spéciaux en JSON sont celles de la spécification JSON officielle, RFC 7159[4].
La ligne de commande 'mkvmerge -o "my file.mkv" -A "a movie.avi" sound.ogg' pourrait être convertie en le fichier d'options JSON suivant nommé par ex. 'options.json' :
[
"-o",
"c:\\Matroska\\my file.mkv",
"--title",
"#65",
"-A",
"a movie.avi",
"sound.ogg" ]
Matroska prend en charge le liage de ficher qui indique simplement qu'un fichier spécifique est le prédécesseur ou successeur du fichier courant. Précisément, ce ne sont pas les fichiers qui sont liés mais les segments Matroska. Comme la plupart des fichiers ne contiendront probablement qu'un segment Matroska, les explications suivantes utilisent l'expression « liage de ficher » bien que « liage de segment » serait plus appropriée.
Chaque segment est identifié par un UID de segment unique large de 128 bit. Cet UID est automatiquement généré par mkvmerge(1). Le liage est principalement réalisé en plaçant les UID de segment (abrévié en : SID) du fichier précédent/suivant dans les informations d'entête de segment. mkvinfo(1) affiche ces SID s'il les trouve.
Si un fichier est scindé en plusieurs plus petits et le liage est utilisé, alors les horodatages ne recommenceront pas à 0 mais vont continuer où ils se sont terminés dans le dernier fichier. Comme cela le temps absolu est conservé même si les fichiers précédents ne sont pas disponibles (par ex. en diffusion de flux). En l'absence de liage, les horodatages devraient commencer à 0 pour chaque fichier. Par défaut mkvmerge(1) n'utilise pas le liage de fichier. Pour l'utiliser, il faut l'activer avec l'option --link. Cette option est seulement utile si la scission est aussi activée.
Que la scission soit active ou pas, l'utilisateur peut indiquer à mkvmerge(1) de lier les fichiers produits à des SID spécifiques. Cela est obtenu avec les options --link-to-previous et --link-to-next. Ces options acceptent un segment SID dans le format que mkvinfo(1) génère : 16 nombres hexadécimaux entre 0x00 et 0xff chacun préfixé avec '0x', par ex. '0x41 0xda 0x73 0x66 0xd9 0xcf 0xb2 0x1e 0xae 0x78 0xeb 0xb4 0x5e 0xca 0xb3 0x93'. Une forme raccourcie peut aussi être utilisée : 16 nombres hexadécimaux entre 0x00 et 0xff sans le préfixe '0x' et sans les espaces, par ex. '41da7366d9cfb21eae78ebb45ecab393'.
Si la scission est utilisée, alors le premier fichier est lié au SID donné avec --link-to-previous et le dernier fichier est lié au SID donné avec --link-to-next. Si la scission n'est pas utilisée, alors le fichier cible unique sera lié aux deux SIDs.
La spécification Matroska établit que quelques éléments ont une valeur par défaut. Habituellement un élément n'est pas écrit vers le fichier si sa valeur est égal à la valeur par défaut afin de gagne de l'espace. Les éléments que l'utilisateur pourraient manquer dans la sortie de mkvinfo(1) sont les éléments langue et le signal de piste par défaut. La valeur par défaut de la language est English ('eng'), et la valeur par défaut du signal de piste par défaut est true. Par conséquent, si --language 0:eng est utilisé pour une piste, alors il ne sera pas affiché dans la sortie de mkvinfo(1).
Peut-être l''utilisateur veut-il conserver quelques photos avec le fichier Matroska, ou utiliser des sous-titres SSA avec une police de caractères TrueType spéciale qui est vraiment rare. Dans ces cas-là, il faut joindre ces fichiers (= pièces) au fichier Matroska. Ils ne vont pas seulement y être ajoutés, mais aussi embarqués. Un lecteur pourra alors afficher ces fichiers (cas des photos) ou les utiliser pour rendre les sous-titres (cas des polices TrueType).
Voici un exemple comment joindre une photo et une police TrueType au fichier cible :
$ mkvmerge -o output.mkv -A video.avi sound.ogg \
--attachment-description "Me and the band behind the stage in a small get-together" \
--attachment-mime-type image/jpeg \
--attach-file me_and_the_band.jpg \
--attachment-description "The real rare and unbelievably good looking font" \
--attachment-mime-type application/octet-stream \
--attach-file really_cool_font.ttf
Si un Matroska contenant un fichier de pièces jointes est utilisé comme fichier source, alors mkvmerge(1) copiera les pièces jointes dans le nouveau fichier. La sélection des pièces jointes copiées ou non peut être modifiée avec les options --attachments et --no-attachments.
Le système de chapitres de Matroska est plsu évolué que le vieux système utilisé par les fichiers OGM. Les spécifications complètes peuvent être trouvées sur le site Web Matroska[1].
mkvmerge(1) prend en charge 2 sortes de fichiers de chapitres comme source. Le 1er format, appelé « simple format de chapitres », est le même format que les outils OGM utilisent. Le 2nd format est une format de chapitres en XML qui prend en charge toutes les fonctionnalités de chapitres de Matroska.
En plus des fichiers de chapitres tels quels, mkvmerge(1) peut aussi lire les chapitres d'autres formats de fichiers (par ex. MP4, Ogg, Blu-ray ou DVD).
Ce format consiste en paires de lignes qui débutent avec « CHAPTERxx= » et « CHAPTERxxNAME= » respectivement. La première contient l'horodatage de départ tandis que la seconde contient le titre. Voici un exemple :
CHAPTER01=00:00:00.000 CHAPTER01NAME=Intro CHAPTER02=00:02:30.000 CHAPTER02NAME=Baby prepares to rock CHAPTER03=00:02:42.300 CHAPTER03NAME=Baby rocks the house
mkvmerge(1) transformera chaque paire ou lignes en un ChapterAtom Matroska. Il ne définit aucun ChapterTrackNumber, ce qui signifie que les chapitres s'appliquent tous à toutes les pistes du fichier.
Comme c'est un fichier texte, une conversion du jeu de caractères pourrait être nécessaire. Voir la section à propos des fichiers texte et jeux de caractères pour savoir comment mkvmerge(1) convertit les jeux de caractères.
Le format de chapitres basé sur XML ressemble à cet exemple :
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Chapters SYSTEM "matroskachapters.dtd"> <Chapters>
<EditionEntry>
<ChapterAtom>
<ChapterTimeStart>00:00:30.000</ChapterTimeStart>
<ChapterTimeEnd>00:01:20.000</ChapterTimeEnd>
<ChapterDisplay>
<ChapterString>A short chapter</ChapterString>
<ChapterLanguage>eng</ChapterLanguage>
</ChapterDisplay>
<ChapterAtom>
<ChapterTimeStart>00:00:46.000</ChapterTimeStart>
<ChapterTimeEnd>00:01:10.000</ChapterTimeEnd>
<ChapterDisplay>
<ChapterString>A part of that short chapter</ChapterString>
<ChapterLanguage>eng</ChapterLanguage>
</ChapterDisplay>
</ChapterAtom>
</ChapterAtom>
</EditionEntry> </Chapters>
Avec ce format, trois choses sont possibles qui sont impossibles avec le format de chapitres simple :
La distribution mkvtoolnix contient quelques fichiers d'échantillon dans le sous-dossier doc qui peuvent être utilisés comme point de départ.
La liste suivante montre les balises XML reconnues, leurs types de données et, quand approprié, la plage valide pour leurs valeurs.
Chapters (master)
EditionEntry (master)
EditionUID (unsigned integer, valid range: 1 <= value)
EditionFlagHidden (unsigned integer, valid range: 0 <= value <= 1)
EditionFlagDefault (unsigned integer, valid range: 0 <= value <= 1)
EditionFlagOrdered (unsigned integer, valid range: 0 <= value <= 1)
ChapterAtom (master)
ChapterAtom (master)
ChapterUID (unsigned integer, valid range: 1 <= value)
ChapterTimeStart (unsigned integer)
ChapterTimeEnd (unsigned integer)
ChapterFlagHidden (unsigned integer, valid range: 0 <= value <= 1)
ChapterFlagEnabled (unsigned integer, valid range: 0 <= value <= 1)
ChapterSegmentUID (binary, valid range: 1 <= length in bytes)
ChapterSegmentEditionUID (unsigned integer, valid range: 1 <= value)
ChapterPhysicalEquiv (unsigned integer)
ChapterTrack (master)
ChapterTrackNumber (unsigned integer, valid range: 1 <= value)
ChapterDisplay (master)
ChapterString (UTF-8 string)
ChapterLanguage (UTF-8 string)
ChapterCountry (UTF-8 string)
ChapterProcess (master)
ChapterProcessCodecID (unsigned integer)
ChapterProcessPrivate (binary)
ChapterProcessCommand (master)
ChapterProcessTime (unsigned integer)
ChapterProcessData (binary)
mkvmerge(1) peut lire les chapitres de Blu-ray non protégés. Pour cela, il faut utiliser le chemin d'une des listes de lecture MPLS avec le paramètre --chapters.
Exemple : --chapters /srv/blurays/BigBuckBunny/BDMV/PLAYLIST/00001.mpls
Quand MKVToolNix est compilé avec la bibliothèque libdvdread, mkvmerge(1) peut lire les chapitres de DVD. Pour cela il faut utiliser le chemin d'un des dossiers ou fichiers sur le DVD avec le paramètre--chapters. Comme un DVD peut posséder plus d'un titre et que chaque titre a son propre ensemble de chapitres, il est possible d'ajouter un double point suivi du numéro de titre désiré à la fin de l'argument de nom de fichier. Le numéro de titre par défaut est 1.
Exemple : --chapters /srv/dvds/BigBuckBunny/VIDEO_TS:2
En scindant des fichiers, mkvmerge(1) ajustera correctement aussi les chapitres. Cela signifie que chaque fichier inclue seulement les entrées de chapitres qui s'y appliquent, et que les horodatages seront décalés pour correspondre aux nouveaux horodatages de chaque fichier cible.
mkvmerge(1) est capable de copier des chapitres de fichiers sources Matroska à moins que cela soit explicitement désactivé avec l'option --no-chapters. Les chapitres de tous les fichiers sources (fichiers Matroska, fichiers Ogg, fichiers MP4, fichiers texte de chapitres) ne sont habituellement pas fusionnés mais laissés séparés en ChapterEditions. C'est seulement si les chapitres sont lus depuis plusieurs fichiers Matroska ou XML qui partagent les mêmes UID d'édition que les chapitres seront fusionnés en un unique ChapterEdition. Si cette fusion est aussi souhaitée dans d'autres situations, alors l'utilisateur devra d'abord extraire les chapitres de toutes les sources avec mkvextract(1), fusionner les fichiers XML manuellement et enfin les multiplexer.
Le système de balises Matroska est similaire à celui des autres conteneurs : un ensemble de paires KEY=VALUE. Cependant, dans Matroska ces balises peuvent aussi être imbriquées, et KEY et VALUE des éléments à eux seuls. Le fichier d'exemple example-tags-2.xml montre comment utiliser ce système.
Les balises Matroska ne sont pas appliquées auto. au fichier complet. C'est possible, mais elles peuvent aussi être appliquées à différentes parties du fichier : à une ou plusieurs pistes, à un ou plusieurs chapitres, voire à une combinaison des deux. La spécification Matroska[5] donne plus de détails sur cet état de fait.
Un fait important est que les balises sont liées aux pistes ou aux chapitres avec l'élément balise Matroska Targets, et que les UID utilisés pour ce liage ne sont pas les ID de pistes que mkvmerge(1) utilise partout. Les numéros utilisés sont plutôt les UID que mkvmerge(1) calcule automatiquement (si la piste est issue d'un format de fichier autre que Matroska) ou qui sont copiés du fichier source si la piste du fichier source est un fichier Matroska. Par conséquent il est difficile de savoir quels UID utiliser dans le fichier de balises avant que le fichier soit pris en charge par mkvmerge(1).
mkvmerge(1) reconnaît deux options aveclesquelles on peut ajouter des balises aux fichiers Matroska : les --global-tags et the --tags. Le différence est que la première, --global-tags, fera les balises s'appliquer au fichier complet en retirant tous ces éléments Targets mentionnés plus haut. La dernière option, --tags, insérera automatiquement l'UID que mkvmerge(1) génère pour la balise spécifiée avec la partie TID de l'option --tags.
Disons qu'on veut ajouter des balises à une piste vidéo lue depuis un fichier AVI. mkvmerge --identify file.avi indique que cet ID de piste vidéo (à ne pas confondre avec les UID !) est 0. À partir de là, on peut créer le fichier de balises en laissant tous les éléments Targetset appeler mkvmerge(1) :
$ mkvmerge -o file.mkv --tags 0:tags.xml file.avi
mkvmerge(1) prend en charge un format de fichier balises en XML. Le format est très proche de la spécification Matroska[5]. Les distributions de binaires et sources de MKVToolNix contiennent un échantillon de fichier appelé example-tags-2.xml qui liste simplement toutes les balises connues et qui peut être utilisé comme base pour des fichiers balises réels.
Les bases sont :
Le nouveau système de balises Matroska reconnaît seulement deux types de données, une chaîne UTF-8 et un type binaire. Le premier est utilisé pour le nom de balise et l'élément <String> tandis que le type binaire est utilisé pour l'élément <Binary>.
Comme les données binaires ne peuvent pas être stockées dans un fichier XML, mkvmerge(1) prend en charge deux autres méthodes pour les stocker. Si le contenu d'une balise XML débute avec '@', alors le texte suivant est traité comme un nom de fichier. Le contenu du fichier correspondant est copié dans l'élément Matroska.
Sinon les données sont attendues encodées en Base64. C'est un encodage qui transforme les données binaires en un jeu limité de caractères ASCII et qui est utilisé par ex. dans les programmes de courriels. mkvextract(1) sortira des données encodées en Base64 pour les éléments binaires.
Le système de balises obsolète reconnaît d'autres types de données qui peuvent être retrouvés dans les spécifications de balises Matroska. Comme mkvmerge(1) ne prend plus en charge ce système, ces types ne sont pas décrits ici.
La liste suivante montre les balises XML reconnues, leurs types de données et, quand approprié, la plage valide pour leurs valeurs.
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)
Avec un fichier XML d'informations de segment, il est possible de définir certaines valeurs dans le champ d'entête d'"informations de segment" d'un fichier Matroska. Toutes ces valeurs ne peuvent pas être définies par d'autres options en ligne de commande.
D'autres champs d'entête d'"informations de segment" peuvent être définis via les options en ligne de commande mais pas via le fichier XML. Ceci inclue par ex. les options --title et --timestamp-scale.
Il existe d'autres éléments qui ne peuvent être définis ni par des options en ligne de commande ni par les fichiers XML. Ceux-ci incluent les éléments suivants : DateUTC (aussi connu en "muxing date"), MuxingApp, WritingApp et Duration. Ils sont toujours définis par mkvmerge(1) lui-même.
La liste suivante montre les balises XML reconnues, leurs types de données et, quand approprié, la plage valide pour leurs valeurs.
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)
La disposition d'un fichier Matroska est assez flexible. mkvmerge(1) rendra un fichier de manière prédéfinie. Le fichier résultant ressemble à ceci :
[EBML head] [segment {meta seek #1} [segment information] [track information] {attachments} {chapters} [cluster 1] {cluster 2} ... {cluster n} {cues} {meta seek #2} {tags}]
Les éléments entre accolades sont optionnels et dépendent du contenu et des options utilisées. Quelques remarques :
Le fichier Matroska le plus petit possible devrait ressembler à ceci :
[EBML head] [segment [segment information] [track information] [cluster 1]]
Ceci devrait être le cas pour les fichiers audio seuls.
mkvmerge(1) permet lui-même à l'utilisateur de choisir l'horodatage d'une piste spécifique. Ceci peut être utilisé pour créer des fichiers avec une vidéo à débit de trames variable ou inclure des blancs dans l'audio. une trame dans ce cas est l'unité que mkvmerge(1) crée séparément par bloc Matroska. Pour la vidéo c'est exactement une trame, pour l'audio c'est un paquet du type audio spécifique. Par ex. pour AC-3, cela serait un paquet contenant 1536 échantillons.
Les fichiers d'horodatage qui sont utilisés quand des pistes sont ajoutées l'une à l'autre doivent seulement être spécifiés pour la première partie dans une chaîne de pistes. Par ex., pour ajouter deux fichiers, v1.avi et v2.avi, et utiliser les horodatages, alors la ligne de commande ressemblera à ceci :
$ mkvmerge ... --timestamps 0:my_timestamps.txt v1.avi +v2.avi
mkvmerge(1) reconnaît quatre formats. La première ligne contient toujours le numéro de version. Les lignes vides, les lignes ne contenant que des espaces blanches et les lignes commençant avec '#' sont ignorées.
Ce format débute avec la ligne de version. La seconde ligne déclare le nombre par défaut de de trames par seconde. Toutes les lignes suivantes contiennent trois chiffres séparés par une virgule : la trame de début (0 est la première), la trame de fin et le nombre de trames dans cette plage. Le nombre de FPS est un nombre flottant avec un point '.' comme séparateur décimal. Les plages peuvent contenir des blancs pour lesquels le FPS par défaut est utilisé. Un exemple :
# format d'horodatage v1 suppose 27.930 800,1000,25 1500,1700,30
Dans ce format chaque ligne contient un horodatage pour la trame correspondante. Cet horodatage doit être donné en précision à la milliseconde. Cela peut être un nombre flottant, sans obligation. Il faut fournir au moins autant d'horodatage qu'il y a de trames dans la piste. Les horodatages de ce fichier doivent être triés. Exemple pour 25fps :
# format d'horodatage v2 0 40 80
Dans ce format chaque ligne contient une durée en secondes suivie par un nombre optionnel de trames par seconde. Les deux peuvent être des nombres flottants. Si le nombre de trames par seconde n'est pas présent, celui par défaut est utilisé. Pour audio il est préférable de laisser le codec calculer les horodatages de trames lui-même. Pour cela on devrait utiliser 0.0 comme nombre de trames par seconde. Il est aussi possible de créer des blancs dans le flux en utilisant les mot clé 'gap' suivi par la durée de ce blanc. Exemple pour un fichier audio :
# format d'horodatage v3 suppose 0.0 25.325 7.530,38.236 blanc, 10.050 2.000,38.236
Ce format esr identique au format v2. La seule différence est que les horodatages n'ont pas à être triés. Ce format ne devrait presque jamais être utilisé.
mkvmerge(1) quitte avec l'un de ces trois codes de fermeture :
mkvmerge(1) utilise les variables par défaut qui déterminent la « locale » du système (par ex. LANG et la famille LC_*). Variables additionnelles :
MKVMERGE_DEBUG, MKVTOOLNIX_DEBUG et sa forme courte MTX_DEBUG
MKVMERGE_ENGAGE, MKVTOOLNIX_ENGAGE et sa forme courte MTX_ENGAGE
mkvinfo(1), mkvextract(1), mkvpropedit(1), mkvtoolnix-gui(1)
La dernière version peut toujours être trouvée à la page d'accueil de MKVToolNix[6].
Moritz Bunkus <moritz@bunkus.org>
2021-01-04 | MKVToolNix 52.0.0 |