MXF : Material Exchange Format

Le MXF est un format orienté pour l'audiovisuel.

C'est un fichier binaire et, par convention, son extension est .mxf

A première vue, le format MXF semble obscur comparé aux autres fichiers contenus dans un DCP. Nous passons de fichiers XML, lisibles par un humain avec un simple éditeur de texte - à un fichier binaire totalement illisible par le simple quidam. Et pourtant, vous verrez que le format MXF est un format très simple dans son concept.

Notez que nous ne verrons que le MXF pour un DCP 1, il existe une grande variété de MXF ayant chacune ses spécificités. Il serait trop long et complexe d'être exhaustif.

Avant-propos

Dans ce chapitre, nous utiliserons des termes comme "binaire", "hexadécimal", "bits" ou autres "octet/byte". Il sera fait l'usage privilégié du terme "octet" en lieu et place du terme "byte" qui peut être trop facilement confondu avec "bit" (pour rappel : 8 bits = 1 octet / byte). J'essaye également d'être le plus didactique possible pour ceux n'étant pas familier avec ces termes. Si ce n'est pas le cas, ne pas hésiter à le remonter.

Un MXF est un simple container

Un container n'est qu'une enveloppe autour d'un autre format. Un format est - par exemple - un PNG, un MPEG-4, un JPEG.

Le MXF va être une surcouche par-dessus ce format avec quelques informations en plus. Sans ce format à l'intérieur, un MXF ne serait qu'une enveloppe avec des metadonnées.

Voyez cela comme un carton : vous placez différents éléments à l'intérieur. Cela peut être des images, des sons, des textes, des métadonnées ou d'autres types de données (nos fameux formats). Vous renfermez le tout, vous collez une étiquette dessus : vous avez votre "container" à vous.

Le MXF n'est pas lié à un format particulier, nous pouvons intégrer tout ce que l'on souhaite. C'est pour cela que nous avons des MXF intégrant différents formats, comme du JPEG2000, du DPX, du ProRes ou encore du MPEG-4.

Grâce à sa malléabilité, nous pouvons avoir des MXF spécifiques pour l'image, d'autres spécifiques pour les sons, d'autres spécifiques aux sous-titrages et même des MXF spécifiques pour des données auxiliaires telles que des données utilisées pour les cinémas 4DX (vous savez, les sièges qui bougent) !

Les normes SMPTE

Le format MXF DCP est défini principalement dans les normes suivantes :

Norme Titre
SMPTE 377 Material Exchange Format — File Format Specification
SMPTE 410 Material Exchange Format — Generic Stream Partition

et agrémentées d'autres normes au travers de nombreuses documentations SMPTE :

Norme Titre
SMPTE EG-377-3 MXF — Engineering Guideline
SMPTE EG-41 MXF — Engineering Guideline
SMPTE EG-42 MXF — Descriptive Metadata
SMPTE 379-1 MXF — MXF Generic Container
SMPTE 379-2 MXF — MXF Constrained Generic Container
SMPTE 380M MXF — Descriptive Metadata Scheme-1
SMPTE 381-x MXF — Mapping xxx Streams into the MXF
SMPTE 382M MXF — Mapping Wave Audio into the MXF Generic Container
SMPTE 390 MXF — Specialized Operational Pattern OP-Atom
SMPTE 422 MXF — Mapping JPEG2000 Codestreams into the MXF Generic Container
DCP
SMPTE 429-2 DCP - DCP Operational Constraints
SMPTE 429-3 DCP - Sound And Pictures Track File
SMPTE 429-4 DCP — MXF JPEG2000 Application
SMPTE 429-6 DCP — MXF Track File Essence Encryption
SMPTE 429-20 DCP - MXF Constraints
Divers
SMPTE 336 Data Encoding Protocol using Key-Length-Value (KLV)
SMPTE 298 Universal Labels for Unique Identification of Digital Data
SMPTE RP-224 SMPTE Universal Labels
SMPTE ST-400 SMPTE Labels Structure
SMPTE ST-384 Container : Uncompressed pictures
SMPTE ST-382 Container : Audio
SMPTE ST-422 Container : JPEG2000 (DCinema)
SMPTE ST-394 Container : MXF Generic Container (~AuxData)
SMPTE ST-405 Container : MXF Generic Container : Elements and Individual Data Items (~AuxData)
Extras
The MXF Book Introduction to the Material Exchange Format (ISBN: 9780240806938)

Un MXF est une simple suite de briques

Voyez l'intérieur d'un MXF comme cela :

MXF Lego

Une simple suite de briques de Lego.

Chaque brique représente une partie de données spécifiques : une brique pour des en-têtes, une brique pour des métadonnées, une brique pour une image, etc.

Un MXF est donc une simple concaténation de plusieurs briques l'une à la suite de l'autre (ou l'une au-dessus de l'autre si vous voulez).

Chaque brique est surnommée KLV que nous verrons dans la suite KLV : Key-Length-Value

Analyse du MXF

A travers les chapitres, nous allons analyser assez souvent en profondeur un MXF. Pour cela, nous allons utiliser des outils qui sont placés dans le répertoire d'asset MXF et que nous analyserons à travers les chapitres.

En attendant, je vous présente rapidement deux outils pour vous aider :

Visualiseur MXF en ligne :

Pour vous aider, vous pouvez visualiser les différents KLV à l'aide de cet analyseur de MXF en ligne (encore en prototype) :

Vous pouvez tester avec ce fichier MXF ou vos MXF: aucun upload du fichier vers le serveur, tout est analysé en local sur votre machine.

MXF analyzer :

Vous pouvez également tester avec notre mxf_analyzer.py et sa base de données. Cet outil est plus (beaucoup) plus complet que le visualiseur ci-dessus, il permet de lire les MXF plus en profondeur, d'obtenir les informations de chaque KLV, la capacité d'extraire chaque KLV, les données (comme JPEG2000, Wave, ..), de déchiffrer des MXF chiffrés, ... :

$ assets/MXF/mxf-analyzer/mxf_analyzer.py --help
usage: 
  -h, --help            show this help message and exit
  -f FILENAME           <mxf> = mxf filename
  -x EXTRACT            <directory> = extract each KLV into files
  -k KEY, --key KEY     AES Key, ex. --key 00000000000000000000000000000000
  -v, --verbose         increase output verbosity
  -n, --no-resolv       Do not resolv UL (speed)
  --filter FILTER       filter by name
  --fuzzy               Fuzzy mode only (very slow)
  --limit LIMIT         stop after x klv parsed
  --slow                Slowdown parse to avoid flood loadavg

Avoir ce programme sous le coude lors de la lecture des différnts chapitres sur le MXF est un plus mais pas bloquant, j'ai placé des extraits de sorties et d'analyses de ce logiciel à chaque étape afin de présenter chaque partie d'un MXF.

Table des matières

Voici les différentes sections MXF que vous traverserez au cours de la documentation :

Notes



  1. Avec une possibilité de déborder « un tout petit peu » sur l'Interoperable Master Format (IMF)