[Tuto / Vulgarisation] Chapitres Matroska

Vous créez ou partagez un tutorial, postez-le ici !
Répondre
Avatar du membre
Auteur du sujet
MrLafia
Privilégié
Privilégié
Messages : 53
Enregistré le : il y a 13 ans
Contact :

[Tuto / Vulgarisation] Chapitres Matroska

Message par MrLafia »

Certaines fonctionnalités du format Matroska sont méconnus voir totalement ingnorés.
Parmi elle, le système de chapitrage.
La majorité des fichiers MKV (surtout HD) ne contienne pas de chapitres.
Les rares fois ou ils sont présent, les utilisateurs ne savent pas comment les exploiter ou ne
peuvent pas faute de matériel ou de player compatible.
L'utilisation la plus courante est un systeme d'index (de préférence nommé) qui reproduit le chapitrage
disponible sur le DVD ou le BluRay.
Mais d'autres fonctionnalités sont possible avec le système de chapitres matroska comme :



- Créer des fichiers chapitres matroska pouvant exploiter d'autres MKV
- Exploiter des videos multi-angle a partir d'un meme fichier ou via des mkv différents
- Lier des mkv ou des partie de mkv afin qu'elles apparaissent a l'utilisateur comme un tous
- Créer des combinaisons audio/video/sous-titres selectionnable en un clic via le menu (pratique pour passer de la version VF a la version VOSTFR)


Pré requis :
- mkvtoolnix
- Haali media splitter

Liaison de fichier et Seguement UID :

avant de rentrer dans le vif du sujet, voici quelques notions propre au format matroska qui vont nous servir par la suite.
Un des concepts les plus simple a comprendre et les plus facile a accomplir est la liaison de fichier.
Des fichiers Matroska ayant la meme combinaison de pistes (audio video sous-titres) et les mêmes codecs
peuvent être liés. Ceci permet de lancer n'importe lequel de ces fichiers lié et d'obtenir dans le player
une reconstitution virtuel du fichier final a lire.

Avec un exemple c'est plus simple :
Imaginez que vous réalisé un MKV de 1.4 Go et que vous avez besoin de le spliter en 2 partie de 700 Mo.
Dans Mkvmerge Gui, onglet "Options Globale" dans la partie "Fractionnement" vous pouvez sliter le multiplexage
automatiquement après une taille de 700 Mo (Ne pas oublier de cocher "lier les fichiers")
Ont obtiens 2 fichiers : Film-001.mkv et un Film-002.mkv de 700 Mo chacun.
quelque soit le fichier qu'ont utilise, c'est le film dans sa globalité qui se lance comme si ont lançait un
fichier unique de 1.4 Go
(le fichier 1 a un fichier suite et le fichier 2 a un fichier précédent)

Image

un peu plus bas dans le même onglet ont voie une partie appelé "File/segment linking" qui permet de lier le mkv a d'autres fichiers
MKV (avec le même set de video, audio, sous-titre) qui fait référence a une notion de "UID".
Mkvtoolnix installe le programme Mkvinfo GUI qui donne cette information sur la ligne "Segment UID"

Image



Voici un exemple d'utilisation de l'UID
Imaginons qu'ont encode une série TV en mkv. la saison comporte 24 épisodes qui ont tous les 3 même premières minutes identique : le générique
il est possible d'encoder une seul fois le générique de 3 minutes dans un fichier mkv a part et d'encoder les 24 épisodes sans les 3 premières minutes
du générique.
Au moment ou ont va multiplexer chaque mkv d'épisode, on indique dans "Previous segment UID" le segment UID du fichier générique.
L'utilisateur aura l'impression que tout les épisodes ont un générique de début mais dans la réalité il s'agit du meme fichier générique qui est repris
lorsqu'ont lance chaque épisode dans le player.


Description format chapitre et chapitre structuré

Voici un exemple simple de chapitre au format xml
il est possible de charger ce fichier xml dans mkvmerge Gui (menu chapitres / charger) ou dans un éditeur de texte.

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>

<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->

<Chapters>
  <EditionEntry>
    <EditionFlagHidden>0</EditionFlagHidden>
    <EditionFlagDefault>1</EditionFlagDefault>
    <EditionUID>2906622091</EditionUID>
    <ChapterAtom>
      <ChapterUID>236737181</ChapterUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterDisplay>
        <ChapterString>Intro</ChapterString>
        <ChapterLanguage>eng</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterUID>3143058099</ChapterUID>
      <ChapterTimeStart>00:01:42.102000000</ChapterTimeStart>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterDisplay>
        <ChapterString>Opening</ChapterString>
        <ChapterLanguage>eng</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
  </EditionEntry>
</Chapters>
Chaque éléments est défini dans le tag <chapterAtom> et tous les éléments sont englobé dans un tag <EditionEntry>.
Il est possible d'avoir plusieurs "édition" de chapitres aux seins d'un même mkv.
(ont pourrait par exemple avoir une edition avec le chapitrage nommé en français et une édition avec le chapitrage nommé en anglais
ou encore une edition avec un chapitrage détaillé de 25 scènes et une autre édition avec un index plus sommaire de 7 ou 8 scènes)
Pour le reste c'est assez simple. le chapterID (généré automatiquement), le ChapterTimeStart (le timing de la scène si ont utilise le chapitres)
la possibilité de masquer un chapitre (ChapterFlagHidden), le nom de la scène et la langue (ChapiterString et ChapterLanguage).
Il est possible pour un <chapterAtom> de mettre plusieurs <ChapterDisplay> pour rajouter des noms de chapitres dans d'autres langues.
(par défaut le splitter détecte la langue de votre system et n'affiche que les titres de votre langue)


Il éxite un tag très intéressant <EditionFlagOrdered>1</EditionFlagOrdered> qui permet de transformer le chapitrage en un système structuré ou programmé.
Le chapitrage standard n'est qu'une simple suite de pointe d'entré dans la ligne de temps de votre film.
Les chapitres structuré permette de créer une ligne de temps virtuel. Ces chapitres ont un temps de début et un temps de fin (<ChapterTimeStart> et <ChapterTimeEnd>)
Prenons un exemple d'un clip video de 30 secondes que l'ont veut jouer 3 fois de suite.
en temps normale il faudrait encoder 3 fois le clip pour obtenir un fichier d'1m30s.
Le chapitre structuré suivant permet de faire la même chose avec le clip de 30 secondes

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>

<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->

<Chapters>
  <EditionEntry>
    <EditionFlagOrdered>1</EditionFlagOrdered>
    <EditionFlagHidden>0</EditionFlagHidden>
    <EditionFlagDefault>1</EditionFlagDefault>
    <EditionUID>2906622092</EditionUID>
    <ChapterAtom>
      <ChapterUID>3143058099</ChapterUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterDisplay>
        <ChapterString>Test</ChapterString>
        <ChapterLanguage>fr</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterUID>3143058098</ChapterUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>1</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterDisplay>
        <ChapterString>caché</ChapterString>
        <ChapterLanguage>fr</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterUID>3143058097</ChapterUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>1</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterDisplay>
        <ChapterString>Pouet!</ChapterString>
        <ChapterLanguage>fr</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
  </EditionEntry>
</Chapters>
Dans cet exemple les mêmes 30 secondes sont rejouer 3 fois.
Dans le player, c'est un fichier qui s'affiche avec une durée 1m 30s.
Notez que les chapitres 2 ou 3 sont cachés et que seul le chapitre 1 apparait dans le menu chapitre.

Voici un autre exemple d'utilisation pour ceux qui connaisse un peu le film Memento
il éxite une version orginale du film et une version "Ordre chonologique"
Il serait tout a fait possible dans le même fichier mkv de faire deux éditions de chapitres.
Une edition avec un chapitrage standard de la version original et une édition avec des chapitres structurés
reprenant la version chronologique du film. (voir même une 3ème édition avec votre propre montage si ça vous chante)


Chapitres structurés et liaison de segment

La création de ligne de temps virtuel via les chapitres structurés peut être combiné avec le système de liaison de fichier vu plus haut.
c'est a dire qu'il est possible de faire référence a un autre fichier dans notre ligne de temps.

voila ce que ça donne dans le fichier XML

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>

<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->

<Chapters>
  <EditionEntry>
    <EditionFlagOrdered>1</EditionFlagOrdered>
    <EditionFlagHidden>0</EditionFlagHidden>
    <EditionFlagDefault>1</EditionFlagDefault>
    <EditionUID>2906622092</EditionUID>
    <ChapterAtom>
      <ChapterUID>3143058099</ChapterUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterDisplay>
        <ChapterString>Test</ChapterString>
        <ChapterLanguage>fr</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterUID>3143058098</ChapterUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterSegmentUID format="hex">
      	b4 9b 72 e0 94 11 05 61 8f 7b 0f d6 d0 34 82 01
      </ChapterSegmentUID>
      <ChapterDisplay>
        <ChapterString>Lecture d'un autre fichier</ChapterString>
        <ChapterLanguage>fr</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterUID>3143058097</ChapterUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterDisplay>
        <ChapterString>Identique au chapitre 1</ChapterString>
        <ChapterLanguage>fr</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
  </EditionEntry>
</Chapters>
idéal par exemple pour gérer les films avec une fin alternative.


Jouer avec les Editions (versions) de chapitres et les combinaisons de pistes

On a vu que les editions permettent d'inclure plusieurs versions de chapitres aux seins d'un même fichier MKV.
ces différentes versions vont apparaitre sous la forme Edition1, Edition2, etc..
si il n'est pas possible de les nommés via le fichier XML, il est possible d'utiliser un fichier tag (également au format XML
a inclure dans mkvmerge GUI sur la ligne "fichier d'étiquettes")
où l'ont va faire référence aux EditionUID du fichier XML chapitres.

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
<Tags>
	<Tag>
		<Targets>
			<EditionUID>2906622092</EditionUID>
			<TargetTypeValue>50</TargetTypeValue>
		</Targets>
		<Simple>
			<Name>TITLE</Name>
			<String>Générique début</String>
			<TagLanguage>fr</TagLanguage>
			<DefaultLanguage>1</DefaultLanguage>
		</Simple>
	</Tag>
	<Tag>
		<Targets>
			<EditionUID>2906622091</EditionUID>
			<TargetTypeValue>50</TargetTypeValue>
		</Targets>
		<Simple>
			<Name>TITLE</Name>
			<String>Générique début alternatif</String>
			<TagLanguage>eng</TagLanguage>
			<DefaultLanguage>1</DefaultLanguage>
		</Simple>
	</Tag>
</Tags>
Le splitter haali permet, en jouant avec les fichiers tag de configurer les jeux de pistes ou combinaisons de pistes (video, audio, sous-titres)
ont peut par exemple faire une edition de chapitre avec un "trackset" audio Français + ghost subtitles et une édition avec un "trackset" audio Anglais + Sous titres Français

Voila en image ce que ça donne dans le menu Haali

Image



voila le fichier tag qui a rendu ça possible. Je vais pas détailler ici la codification mais si vous êtes intéressé je suis a votre disposition.

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
<Tags>
  <Tag>
    <Targets>
      <EditionUID>2906622092</EditionUID>
      <TargetTypeValue>50</TargetTypeValue>
    </Targets>
    <Simple>
      <Name>TITLE</Name>
      <String>"Version FR"</String>
      <TagLanguage>eng</TagLanguage>
      <DefaultLanguage>1</DefaultLanguage>
    </Simple>
  </Tag>
  <Tag>
    <Targets>
      <EditionUID>2906622091</EditionUID>
      <TargetTypeValue>50</TargetTypeValue>
    </Targets>
    <Simple>
      <Name>TITLE</Name>
      <String>"VOSTFR"</String>
      <TagLanguage>eng</TagLanguage>
      <DefaultLanguage>1</DefaultLanguage>
    </Simple>
  </Tag>
  <Tag>
    <Simple>
      <Name>TRACKSETEX</Name>
      <String>2906622092 . #0 #0 fra VF</String>
    </Simple>
    <Simple>
      <Name>TRACKSETEX</Name>
      <String>2906622091 . #1 #1 eng VOSTFR</String>
    </Simple>
  </Tag>
</Tags>
Tout ce blabla n'a pour but que de vulgariser des fonctionnalités méconnues.
Libre a chacun de juger si il est bon de les utiliser ou pas et dans quelles conditions
J'espère que mon sévère degrés de nullité en anglais ne m'a pas trop fait traduire n'importe quoi.
Merci de m'avoir lu.
--
"Les newbies d' aujourd'hui seront l' élite de demain".
-+- NG in GNU : Tu seras un homme, mon neuneu -+-
MrLafia list movie
Avatar du membre
ThiWeb
Administrateur
Administrateur
Messages : 9797
Enregistré le : il y a 15 ans
Localisation : On earth
Contact :

Message par ThiWeb »

J'ai pas encore tout lu, mais félicitations pour ce tuto complet !

Juste une chose, sachant que le rendu final dans Haali est le même, c'est pas plus simple de faire comme ça ? :

Code : Tout sélectionner

CHAPTER01=00:00:00.000
CHAPTER01NAME=Les fondements de la pierre
CHAPTER02=00:03:58.640
CHAPTER02NAME=L'apprivoisement de Sméagol
CHAPTER03=00:11:03.880
CHAPTER03NAME=Les Uruk-hai
ThiWeb
Avatar du membre
Auteur du sujet
MrLafia
Privilégié
Privilégié
Messages : 53
Enregistré le : il y a 13 ans
Contact :

Message par MrLafia »

Oui pas de problème mktoolnix accepte le format ogg texte.
c'est d'ailleur le fichier créer automatiquement par dvddecryper
il est converti en xml par mkvmerge Gui. D'ailleur ont peut l'extraire au choix au format ogg ou xml avec mkvextractgui2.
pour les chapitrages simple c'est ce qu'il y a de plus pratique.
mais pour les chapitres complexe décrit dans le tuto c'est xml obligatoire.
--
"Les newbies d' aujourd'hui seront l' élite de demain".
-+- NG in GNU : Tu seras un homme, mon neuneu -+-
MrLafia list movie
Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités