KLV : Les types & formats

Pour résumer ce que nous avons vu précédemment :

Alors maintenant que nous avons vu ce qu'était un KLV et les formats proposés, voyons maintenant leur utilité.

Nous avions vu qu'un MXF était comme un gros carton. Je vais proposer une autre métaphore : celui de l'armoire. Un MXF est comme une grande et longue armoire avec des milliers et des milliers de tiroirs :

Chaque tiroir est un KLV unique : Les premiers tiroirs du haut sont les KLV avec des entêtes et métadonnées (cf. Header), les tiroirs du milieu sont ceux contenant les essences (images, sons, sous-titres, ..) et enfin, les derniers tiroirs sont les métadonnées de terminaisons (cf. Footer)

Lorsqu'on construit un MXF, on va devoir remplir l'ensemble de ces tiroirs et certains sont déjà pré-définis pour des usages spécifiques.

Restons toujours sur notre métaphore : imaginons que nous remplissions les tiroirs du milieu avec tout un tas d'objets : des chaussettes, des t-shirts, des pantalons et des serviettes. Et on referme ces tiroirs.

Maintenant, nous allons prendre du papier et crayon, et noter tout plein d'informations à propos de ces objets : le nombre d'objets, le nombre de chaussettes / t-shirts / pantalons / serviettes, leurs couleurs, leurs tailles, leurs emplacements, leurs matières et encore tous pleins d'informations qui pourraient être utiles (ou pas).

Ces feuilles d'inventaires, nous allons les ranger dans les premiers tiroirs (cf. Header). Nous refermons le tout et nous allons finir de noter quelques informations (par exemple, le nombre de tiroirs utilisés pour stocker les feuilles) en toute fin sur une dernière feuille que nous placerons dans le dernier tiroir, le plus en bas (cf. Footer).

Si quelqu'un souhaite de l'information sur cette armoire, il lui suffit soit d'ouvrir directement tous les tiroirs du milieu, fouiller et perdre beaucoup de temps pour étudier chaque objet. Soit tout simplement ouvrir les tiroirs du haut et lire les feuilles d'inventaires.

Vous remarquerez qu'on utilise les termes "tiroirs d'en haut", "tiroirs du milieu" et "derniers tiroirs" pour regrouper certains tiroirs. Ce n'est pas une coïncidence.

Il faut savoir qu'un MXF est segmenté en 3 parties 1. Ces segments sont appelés Partitions, elles regroupent plusieurs KLV et portent respectivement les noms de Header, Body et Footer:

Attention à ne pas vous tromper sur le concept des partitions : Les KLV ne sont pas enrobées par une couche supplémentaire qu'on aurait appelée partition. Les partitions sont simplement représentées par des KLV supplémentaires - appelé Partition Pack - qui font office de séparateur entre les différents groupes de KLV. Rien de plus.

Chaque partition a plusieurs KLV :

À titre d'informations, voici les différents KLV possibles dans un MXF DCP Picture, c'est probablement le MXF le plus simple :

Nom du KLV Universal Label
Partition Pack - Header 060e2b34.02050101.0d010201.01020400
Primer Pack 060e2b34.02050101.0d010201.01050100
Preface 060e2b34.02530101.0d010101.01012f00
Identification 060e2b34.02530101.0d010101.01013000
Content Storage 060e2b34.02530101.0d010101.01011800
Essence Container Data 060e2b34.02530101.0d010101.01012300
Material Package 060e2b34.02530101.0d010101.01013600
  Timeline Track 060e2b34.02530101.0d010101.01013b00
    Sequence 060e2b34.02530101.0d010101.01010f00
      Timecode Component 060e2b34.02530101.0d010101.01011400
  Timeline Track 060e2b34.02530101.0d010101.01013b00
    Sequence 060e2b34.02530101.0d010101.01010f00
      Source Clip 060e2b34.02530101.0d010101.01011100
Source Package 060e2b34.02530101.0d010101.01013700
  Timeline Track 060e2b34.02530101.0d010101.01013b00
    Sequence 060e2b34.02530101.0d010101.01010f00
      Timecode Component 060e2b34.02530101.0d010101.01011400
  Timeline Track 060e2b34.02530101.0d010101.01013b00
    Sequence 060e2b34.02530101.0d010101.01010f00
      Source Clip 060e2b34.02530101.0d010101.01011100
RGBA Essence Descriptor 060e2b34.02530101.0d010101.01012900
JPEG2000 Picture Sub-Descriptor 060e2b34.02530101.0d010101.01015a00
KLV Fill item 060e2b34.01010102.03010210.01000000
Partition Pack - Body 060e2b34.02050101.0d010201.01030400
  Picture Essence - JPEG2000 - Image #1 060e2b34.01020101.0d010301.15010801
  Picture Essence - JPEG2000 - Image #2 060e2b34.01020101.0d010301.15010801
  Picture Essence - JPEG2000 - Image #3 060e2b34.01020101.0d010301.15010801
• • • • • •
  Picture Essence - JPEG2000 - Image #X 060e2b34.01020101.0d010301.15010801
Partition Pack - Footer 060e2b34.02050101.0d010201.01040400
  Index Table Segment 060e2b34.02530101.0d010201.01100100
  ( Random Index Pack ) 060e2b34.02050101.0d010201.01110100

En vert, la partition Header avec l'ensemble de ces KLV métadonnées dont notamment deux KLV de métadonnées spécifiques pour le JPEG2000 (en vert foncé). Si vous voyez plusieurs fois certains KLV (comme Sequence ou Timeline Track), c'est normal.

En bleu, la partition Body avec les frames au format JPEG2000.

En rouge, la partition Footer avec les deux derniers KLV de métadonnées.

Vous remarquerez que chaque partition débute par un KLV spécifique appelé Partition Pack. Ce sont nos fameuses séparations pour nos différentes partitions. Comme vous voyez, ce ne sont que de simples KLV insérés entre deux KLV - qui vont intégrer des informations décrivant la nouvelle partition qui débute.

Notes diverses

Les différents KLV communs présents

Nous allons voir chaque KLV que nous aurons dans l'entête (Partition Header) et le pied (Partition Footer), leurs aspects, leurs raisons d'être et leurs interactions. Nous verrons les autres KLV spécifiques pour Picture, Sound, Subtitle, AuxData, DolbyAtmos, DBOX, ... dans des sections séparées juste après.

KLV dans Header

Ce sont les KLV les plus communs, sauf rares exceptions, ils seront fréquemment présents dans la Partition Header pour intégrer des métadonnées du MXF et des assets :

KLV dans Footer

Les KLV supplémentaires par type de contenu

Ces parties intégrent des KLV supplémentaires qui seront réparties dans Header et dans Body et selon le type de contenu ou de MXF :

Pictures :

Sounds :

Autres :

Cryptographie

La cryptographie est commune à tous les types de contenu. Un paragraphe Cryptographie est disponible.

Annexes

Quelques images pour comprendre rapidement les interactions entre les KLV.

Différents MXF et les relations entre KLV

Relations entre KLV via des identifiants

(note : les informations sont basées sur l'ancien output de mxf-analyzer, certaines valeurs peuvent être mal interprétées, l'important se trouve surtout sur le réseau de relation)

Notes


  1. La norme MXF permet une multitude de Partitions - pas forcément que trois (Au moins un Header, aucun, un seul ou plusieurs Body et aucun ou un seul Footer). Mais dans notre cas, nous n'aurons qu'une partition Header, qu'une partition Body et qu'une partition Footer. Voir note 2  

  2. La norme SMPTE pour le MXF permet d'avoir plusieurs Partition Body

    • 6.2.6 Body Partition - There shall be zero or more Body Partitions in an MXF file -- SMPTE 377-1-2009 - MXF - File Format Specification

    • Partition Kinds - Body Partitions : one or more partitions located in the file body. Multiple body partitions can be used to divide an essence container into a sequence of parts, provide for multiple essence containers or provide for multiple essence containers each of which are divided into a sequence of parts -- SMPTE 377-3-2013 - MXF Engineering Guideline

    Cependant, la norme SMPTE 429-3-2007 - DCP - Sound And Pictures Track File impose une seule partition Body : 4.3.5 Partitions - A Track File shall have three partitions: Header, Body and Footer. The closed and complete Header Metadata shall be carried in the Header Partition, the Essence Container shall be contained in the single Body Partition. et dans SMPTE 390-2011 - MXF - Specialized Operational Pattern OP-Atom 9. Recommended Partitioning of OP-Atom Files, le terme Body Partition est au singulier.