MXF : Picture : Stereoscopique (3D)

Références SMPTE-429-10-2008 - DCP - Stereoscopic Picture Track File
SMPTE 422-2014 - MXF - Mapping JPEG2000 Codestreams into the MXF Generic Container
SMPTE 429-4-2006 - DCP - MXF JPEG2000 Application
SMPTE 429-3-2007 - DCP - Sound And Pictures Track File 1
SMPTE 377-1-2011 - MXF - File Format Specification - RGBA Essence Descriptor (p148)
SMPTE 384M-2005 - MXF - Mapping of Uncompressed Pictures into the Generic Container
Modèle KLV Data Item (MXF non-chiffré)
Variable-Length Pack (MXF chiffré)
Universal Label
060e2b34.01020101.0d010301.15010801 - Picture Essence, non-chiffré
060e2b34.02040101.0d010301.027e0100 - Encrypted Essence (SMPTE)
060e2b34.02040107.0d010301.027e0100 - Encrypted Essence (Interop)
060e2b34.02530101.0d010101.01012900 - RGBA Essence Descriptor
060e2b34.02530101.0d010101.01015a00 - JPEG2000 Picture Sub-Descriptor
060e2b34.0253010c.0d010101.01016300 - Stereoscopic Picture Sub-Descriptor (v0c)
060e2b34.02530101.0d010101.01016300 - Stereoscopic Picture Sub-Descriptor (v01)

Préface

En dehors des métadonnées, la principale différence entre un MXF 2D et 3D est juste sur le nombre de frames et comment on va lire chaque frame.

Un MXF stéréoscopique intègre les images pour l'oeil gauche et les images pour l'oeil droit dans le même MXF, une image sur deux sera pour un oeil spécifique.

Les métadonnées

Si vous avez déjà lu le chapitre MXF Picture, vous savez que nous avons des KLV spécifiques pour l'image : RGBA Essence Descriptor et JPEG2000 Picture Sub-Descriptor.

Dans le cadre d'un MXF stéréoscopique, nous aurons un KLV supplémentaire : le KLV Stereoscopic Picture Sub-Descriptor.

Ce dernier sera défini et lié au RGBA Essence Descriptor sur l'item Descriptors & Sub-Descriptors.

Voici les métadonnées de ce KLV :

LocalTag Nom de l'item Valeur possible / Exemple
3C0A Instance ID cc14ab0b.a02c41d6.9712d3df.23611ff3
0102 Generation UID (optionel)

Oui, ce KLV est vide. Il ne sert qu'à indiquer que c'est un MXF stéréoscopique.

Et voici les modifications des items dans les KLV pour un MXF en 24 images par seconde pour chaque oeil (donc 48 images par seconde en tout) :

Nom du KLV modifié Nom de l'item modifié Nouvelle valeur
Timecode Component (1502) Rounded Timecode Base 48
RGBA Essence Descriptor (3001) Sample Rate 48/1
Timeline Track (4B01) Edit Rate 24/1
Index Table Segment (3F0B) Index Edit Rate 24/1

Il y aura au minimum deux KLV Picture Essence (ou Encrypted Picture Essence dans le cadre d'un MXF chiffré).

La première frame (donc le premier KLV) est la frame qui servira pour l'oeil gauche :

Vous pouvez avoir 3D et High Frame Rate (HFR), mais attention au bitrate maximal de 250 Mb/s (500 Mb/s pour le HFR et le HDR) : Plus vous mettez de frames par seconde - si en plus les images sont grandes (4K) et qu'elles sont peu compressées - vous irez taper sur la limite du bitrate, ce qui va provoquer quelques petits soucis : votre DCP peut être rejeté par les players DCI en salle de cinéma.

Lire et extraire les images stéréoscopiques

Un MXF 3D étant le même qu'un MXF 2D - hormis d'avoir 2 fois plus de frames et quelques paramètres différents (voir ci-dessus), pour la lecture et l'extraction, on utilise la même procédure que dans la version 2D, lisible dans le chapitre MXF : KLV : Types : Picture.

Il n'est même pas nécessaire de lire le KLV Stereoscopic Picture Sub-Descriptor.

Les modifications dans la Composition Playlist (CPL)

La définition d'un DCP avec Stéréoscopie 3D est visible dans la CPL, les MainPicture deviennent simplement des MainStereoscopicPicture.

En supplément, AnnotationText et ContentTitle auront la mention "3D" et du nombre d'image par secondes - pour respecter la convention de nommage (non obligatoire, c'est juste une convention, pas une norme).

L'élément MainStereoscopicPicture et tous ses sous-éléments (Id, Duration, KeyId, FrameRate, etc...) sont exactement les mêmes que ceux de l'élément standard et bien connu MainPicture. A une seule différence, le FrameRate est à 48 1 (sauf en cas de HFR)

Un exemple d'un MainStereoscopicPicture 3D en 24 fps par oeil (donc 48 fps projetées) :

<MainStereoscopicPicture xmlns=”http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL”>
    <Id>urn:uuid:7e427ee5-434a-c142-b845-6aa67e1e97ff</Id>
    <AnnotationText>Stereoscopic Picture for Reel #1 of The Stereoscopic Feature</AnnotationText>
    <EditRate>24 1</EditRate>
    <IntrinsicDuration>3800</IntrinsicDuration>
    <EntryPoint>100</EntryPoint>
    <Duration>3600</Duration>
    <KeyId>urn:uuid:1f894844-e1d8-8643-a48d-341b96659499</KeyId>
    <FrameRate>48 1</FrameRate>
    <ScreenAspectRatio>185 100</ScreenAspectRatio>
</MainStereoscopicPicture>

Vous retrouverez d'autres informations nécessaires à ce sujet dans le chapitre CPL Picture - Paragraphe Stéréoscopie.

Faire de la stéréoscopie sans utiliser ce workflow

Et oui, c'est possible.

C'est un peu tricky, mais cela a été testé pour Gemini Man de Ang Lee qui se devait d'avoir une projection en 3D avec du HFR en 120 images par oeil, donc 240 fps en tout. Ce qui n'est (n'était ?) pas supporté (officiellement) par les players et projecteurs en salle de cinéma.

Pour contourner ce problème, on génère deux DCP 2D en HFR 120 FPS, l'un avec les frames paires, l'autre avec les frames impaires. Et on les projette séparément depuis deux players/projecteurs différents, un pour chaque oeil.

Les deux DCP seront des DCP classiques avec des MXF classiques (donc sans KLV Stereoscopic Picture Sub-Descriptor) et les CPL intégrent les MainPicture habituels - avec un EditRate et FrameRate en 120 FPS.

Chaque player va se charger de lire un DCP pour chaque oeil :

La synchronisation des deux projections permet ainsi d'avoir de la 3D en HFR et en 120 FPS avec deux DCP classiques 2D.

Vous avez un exemple des deux DCP de tests pour le film Gemini Man (partiel, sans les MXF) ici

Attention Cette méthode n'est pas standard, elle est tributaire du bon fonctionnement des players, du support HFR-120 FPS, de la parfaite synchronisation des deux players & projecteurs, et de la compétence des projectionnistes.

Comment faire de la 3D en HFR

Il est possible de faire de la 3D en HFR mais limité à 60 FPS (60 images par secondes mais 120 images par secondes en lecture effective).

Le seul moyen (pour l'instant) de faire de la 3D-HFR > 60 FPS, c'est d'utiliser la méthode décrite au dessus "Faire de la stéréoscopie sans utiliser ce workflow"

Samples