Camille Huot

Spécifications concernant l'encapsulation d'un album musical dans un fichier informatique Matroska.

En supposant qu'un album soit livré au format CD-DA sur 1 ou plusieurs CD.

On décide qu'1 CD donnera 1 fichier.

Nommage du fichier

<Artiste>-<Année de production>-<Titre de l'album>[-cd<X>].mka

ex. : Benighted-2002-Psychose.mka

Codec Audio

OGG Vorbis encodé en qualité 6 à partir d'une source originale (EAC par exemple).

Les pistes

Le découpage des pistes se fait typiquement à l'aide d'un fichier de chapitrage.

Création rapide

Les fichiers CUE peuvent être utilisé directement lors de la création du mka.

mkvmerge -o Benighted-2002-Psychose.mka --chapters Benighted-2002-Psychose.cue Benighted-2002-Psychose.ogg

Et le tour est joué.

Les tags Matroska

Matroska fournit un ensemble de tags disponible pour stocker les métadonnées sur les albums et les morceaux de musique. Nous n'allons utiliser qu'un sous-ensemble :

  • ALBUM (TargetTypeValue = 50) Pour l'album
  1. TITLE Nom de l'album
  2. ARTIST Nom de l'artiste (si commun à l'album)
  3. DATE_RELEASED Année de production
  4. GENRE Style de musique
  5. COMMENT Commentaire "Tagged by [cam]"
  6. TOTAL_PARTS Nombre de CD
  7. COMPOSER_NATIONALITY Pays en 2 lettres
  • PART (TargetTypeValue = 40) Pour le CD
  1. TITLE Nom du CD (si existe)
  2. PART_NUMBER Numéro du CD (et donc du fichier)
  3. TOTAL_PARTS Nombre de pistes
  4. Jaquettes (devant, derriere, dedans, tout ce qui est disponible) ?
  • TRACK (TargetTypeValue = 30) Pour chaque piste
  1. PART_NUMBER Numéro de la piste
  2. TITLE Nom de la piste

Exemple de fichier XML pour un fichier mka :

<Tags>
<Tag>
<Targets>
 <TargetType>ALBUM</TargetType>
 <TargetTypeValue>50</TargetTypeValue>
</Targets>
<Simple>
 <Name>ARTIST</Name>
 <String>Benighted</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Psychose</String>
</Simple>
<Simple>
 <Name>DATE_RELEASED</Name>
 <String>2002</String>
</Simple>
<Simple>
 <Name>GENRE</Name>
 <String>Brutal Death Metal</String>
</Simple>
<Simple>
 <Name>COMPOSER_NATIONALITY</Name>
 <String>fr</String>
</Simple>
<Simple>
 <Name>COMMENT</Name>
 <String>Tagged by [cam]</String>
</Simple>
<Simple>
 <Name>TOTAL_PARTS</Name>
 <String>1</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <TargetType>PART</TargetType>
 <TargetTypeValue>40</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>1</String>
</Simple>
<Simple>
 <Name>TOTAL_PARTS</Name>
 <String>13</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>3460266929</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>1</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Prémices Psycotiques</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>1008636047</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>2</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Paranoïa</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>2835562573</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>3</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Dégénérescence</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>1409258823</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>4</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Banished</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>4215614618</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>5</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Arcanes Démoniaques</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>643721332</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>6</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Aversion Fanatique</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>3646299464</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>7</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Lost in Catalepsy</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>2228190431</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>8</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>From Desire to Disgust</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>2350204970</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>9</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Internal Suffering</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>4099151806</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>10</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Claustrophopia</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>155893295</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>11</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Feasting on the Disinterred Corpse</String>
</Simple>
</Tag>

<Tag>
<Targets>
 <ChapterUID>3515743793</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>12</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Unleash Hell</String>
</Simple>
</Tag>


<Tag>
<Targets>
 <ChapterUID>3144819323</ChapterUID>
 <TargetType>TRACK</TargetType>
 <TargetTypeValue>30</TargetTypeValue>
</Targets>
<Simple>
 <Name>PART_NUMBER</Name>
 <String>13</String>
</Simple>
<Simple>
 <Name>TITLE</Name>
 <String>Slay the Benighted</String>
</Simple>
</Tag>
</Tags>

Utiliser mkatag pour générer automatiquement ce XML à partir du .mka existant et du .cue contenant déjà le nom des pistes :

$ mkatag benighted.mka benighted.cue benighted.xml

Pour taguer le fichier, trouver l'ID de la piste :

$ mkvmerge -i benighted.mka
File 'benighted.mka': container: Matroska
Track ID 1: audio (A_VORBIS)

Puis taguer :

mkvmerge -o Benighted-2002-Psychose.mka --tags 1:benighted.xml benighted.mka

Les images des pochettes

Des fichiers binaires peuvent être intégrés au fichier Matroska de cette façon :

mkvmerge -o output.mka --attachment-description "Front cover" --attachment-mime-type "image/png" --attach-file fichier.png input.mka

Tous les fichiers d'input.mka ne sont pas recopiés dans output.mka, donc cumulez les --attach-* pour tout intégrer en une seule fois.

Lier des fichiers entre eux

Grosso modo, chaque fichier contient un segment Matroska. Les segments possèdent un SID qui permet de les lier entre eux :

mkvmerge -o output.mka --link-to-previous sid --link-to-next sid input.mka

On peut trouver les SID avec la commande mkvinfo.