CPL : Les types d'assets

Préface

La CPL intègre différents assets, vous en connaissez déjà deux MainPicture et MainSound :

<ReelList>
  <Reel>
    <Id>urn:uuid:1db4c5eb-89f5-45e6-87d2-ea8894f9aa5d</Id>
    <AssetList>
      <MainPicture>                                             ---------+
        <Id>urn:uuid:3bd3d849-117b-46b0-bc45-3d3228c987c6</Id>           |
        <EditRate>24 1</EditRate>                                        |
        <IntrinsicDuration>24</IntrinsicDuration>                        |  AssetType #1
        <FrameRate>24 1</FrameRate>                                      |
        <ScreenAspectRatio>4096 2160</ScreenAspectRatio>                 |
      </MainPicture>                                            ---------+
      <MainSound>                                               ---------+
        <Id>urn:uuid:3433a00f-4bc8-4c16-b33c-b0b0d65711af</Id>           |
        <EditRate>24 1</EditRate>                                        |  AssetType #2
        <IntrinsicDuration>24</IntrinsicDuration>                        |
      </MainSound>                                              ---------+
    </AssetList>
  </Reel>
</ReelList>

Mais il en existe une bonne dizaine intégrant leurs spécificités.

Description

Les différents AssetType permettent de définir ... le type d'asset (oui, c'est fou) : nous pouvons avoir des images, du sonore, des sous-titres, des données autres, de la métadonnée, etc...

Voici une liste normalement exhaustive 1 des différents types d'assets normés :

Nom du tag Description Références SMPTE
MainPicture Asset d'images
  • SMPTE 429-7 - CPL
  • SMPTE 429-2 - DCP Operational Constraints
  • MainSound Assets de sons (hors Dolby)
  • SMPTE 429-7 - CPL
  • SMPTE 429-16 - Additional Composition Metadata and Guidelines
  • MainStereoscopicPicture Assets d'images stéréoscopiques (3D)
  • SMPTE 429-10 - Stereoscopic Picture Track File
  • SMPTE 429-16 - Additional Composition Metadata and Guidelines
  • SMPTE 429-2 - DCP Operational Constraints
  • MainSubtitle Asset de sous-titres
  • SMPTE 429-7 - CPL
  • SMPTE 429-2 - DCP Operational Constraints
  • SMPTE RDD-52 - SMPTE DCP Bv2.1
  • SMPTE 429-16 - Additional Composition Metadata and Guidelines
  • ClosedSubtitle Asset de sous-titres
  • SMPTE 429-12 - Caption and Closed Subtitle
  • SMPTE 429-16 - Additional Composition Metadata and Guidelines
  • SMPTE 429-2 - DCP Operational Constraints
  • MainCaption Asset de sous-titres pour les malentendants
  • SMPTE 429-12 - Caption and Closed Subtitle
  • SMPTE 429-16 - Additional Composition Metadata and Guidelines
  • SMPTE 429-2 - DCP Operational Constraints
  • ClosedCaption Asset de sous-titres pour les malentendants
  • SMPTE 429-12 - Caption and Closed Subtitle
  • SMPTE 429-2 - DCP Operational Constraints
  • SMPTE RDD.52 - DCP Bv2.1
  • SMPTE 429-16 - Additional Composition Metadata and Guidelines
  • SMPTE 429-12 - Caption and Closed Subtitle
  • SMPTE 429-16 - Additional Composition Metadata and Guidelines
  • SMPTE 429-2 - DCP Operational Constraints
  • SMPTE RDD-52 - SMPTE DCP Bv2.1
  • MainClosedCaption Asset de sous-titres pour les malentendants

    Interop

    AuxData Asset Autres ...

    principalement utilisé par Dolby pour ses propres assets

  • SMPTE 429-14 - Aux Data Track File
  • SMPTE 429-18 - Immersive Audio Track File
  • SMPTE 429-19 - DCP Operational Constraints for Immersive Audio
  • CompositionMetadataAsset Metadatas de "modifications"
  • SMPTE 429-16 - Additional Composition Metadata and Guidelines
  • SMPTE RDD.57 - Immersive Audio Bitstream and Packaging Constraints
  • SMPTE RDD.52 - SMPTE DCP Bv2.1
  • MainMarkers Metadatas pour des marqueurs
  • SMPTE 429-7 - CPL
  • SMPTE 429-2 - DCP Operational Constraints
  • Pour comprendre la structure d'un AssetType, il faut comprendre qu'ils sont tous tributaires d'un AssetType-parent.

    Pour dire autrement, la structure d'un AssetType va intégrer la structure d'un AssetType-parent, puis ajouter ses propres éléments et devenir ainsi un nouvel AssetType.

    Voyez les différents AssetTypes comme des poupées russes :

    Un AssetType va être dans un autre AssetType qui va lui-même être dans un autre AssetType et ainsi de suite...

    Par exemple, tous les AssetTypes sont directement ou indirectement des enfants de GenericAssetType.

    GenericAssetType est la structure de base et elle intègre certains éléments obligatoires ou optionels que vous devoir intégrer tous les autres types d'assets enfants :

    [GenericAssetType]
    - Id                       ( obligatoire )
    - AnnotationText           ( optionnel   )
    - EditRate                 ( obligatoire )
    - IntrinsicDuration        ( obligatoire )
    - EntryPoint               ( optionnel   )
    - Duration                 ( optionnel   )
    

    C'est pour cela que vous trouverez toujours les éléments obligatoires - comme Id, EditRate et IntrinsicDuration - dans tous les différents AssetTypes, ce n'est pas un hasard :

    <MainPicture>
      <Id>urn:uuid:37682094-ef02-4871-8f2d-b50b75cba05a</Id>
      <EditRate>24 1</EditRate>
      <IntrinsicDuration>2400</IntrinsicDuration>
      <EntryPoint>0</EntryPoint>
      <Duration>2400</Duration>
      (...)
    
    <MainSound>
      <Id>urn:uuid:c21d0daa-3e7c-40fc-a8a2-49c4ee3a102f</Id>
      <EditRate>24 1</EditRate>
      <IntrinsicDuration>2400</IntrinsicDuration>
      <EntryPoint>0</EntryPoint>
      <Duration>2400</Duration>
      (...)
      
    <MainSubtitle>
      <Id>urn:uuid:5517935f-7cb2-4f47-a243-000000002433</Id>
      <EditRate>24 1</EditRate>
      <IntrinsicDuration>2961</IntrinsicDuration>
      <EntryPoint>0</EntryPoint>
      <Duration>2961</Duration>
      (...)
    
    <MainMarkers>
      <Id>urn:uuid:34b90581-38b9-42b5-aed3-166c03f7ae98</Id>
      <EditRate>24 1</EditRate>
      <IntrinsicDuration>29038</IntrinsicDuration>
      (ne pas oublier que EntryPoint et Duration sont optionnels)
      (...)
    
    <AuxData xmlns="http://www.dolby.com/schemas/2012/AD">
      <Id>urn:uuid:93777f4a-52c5-4d5b-926c-b000a0b56b55</Id>
      <EditRate>24 1</EditRate>
      <IntrinsicDuration>26990</IntrinsicDuration>
      <EntryPoint>0</EntryPoint>
      <Duration>26990</Duration>
      (...)
        
    <CompositionMetadataAsset xmlns="http://www.smpte-ra.org/schemas/429-16/2014/CPL-Metadata">
      <Id>urn:uuid:d6ae4864-a797-4c85-b359-2dbc5c57aa69</Id>
      <EditRate>24 1</EditRate>
      <IntrinsicDuration>23186</IntrinsicDuration>
      (ne pas oublier que EntryPoint et Duration sont optionnels)
      (...)
    

    Chaque AssetType dans la CPL est dérivé directement ou indirectement de GenericAssetType :

    Type CPL AssetType Parent Grand-Parent
    <MainPicture> PictureTrackFile TrackFile Generic
    <MainStereoscopicPicture> PictureTrackFile TrackFile Generic
    <MainSound> SoundTrackFile TrackFile Generic
    <MainSubtitle> SubtitleTrackFile TrackFile Generic
    <ClosedSubtitle> SubtitleTrackFile TrackFile Generic
    <MainCaption> CaptionTrackFile TrackFile Generic
    <ClosedCaption> CaptionTrackFile TrackFile Generic
    <AuxData> DataTrackFile TrackFile Generic
    <MainMarkers> Markers Generic
    <CompositionMetadataAsset> CompositionMetadata Generic

    (pour des raisons de lisibilité, j'ai viré le mot AssetType à la fin de chaque AssetType...)

    Vous remarquez que certains se partagent le même AssetType, comme MainPicture et MainStereoscopicPicture qui sont tous deux un PictureTrackFileAssetType.

    Vous remarquez également que tous seront liés directement ou indirectement à GenericAssetType :

    Tous les AssetTypes seront des enfants de GenericAssetType

    Pour être plus visible, voici la hiérarchie des différents AssetTypes :

    Prenons un exemple, MainPicture : nous voyons qu'il est tributaire de PictureTrackFileAssetFile qui est lui même tributaire de TrackFileAssetType qui est lui-même tributaire du commun à tous GenericAssetType.

    Ainsi, on sait que MainPicture aura donc les élements suivants :

    Le tout sera utilisé pour construire notre MainPicture. Si on regarde concrètement un MainPicture d'exemple, nous retrouverons nos différents éléments concaténés :

    <MainPicture>
       <Id>urn:uuid:3bd3d849-117b-46b0-bc45-3d3228c987c6</Id>       --.                    --.                        --.
       <AnnotationText language="en">Picture 1</AnnotationText>       |                      |                          |
       <EditRate>24 1</EditRate>                                      |-- GenericAssetType   |                          |
       <IntrinsicDuration>24</IntrinsicDuration>                      |                      |                          |
       <EntryPoint>0</EntryPoint>                                     |                      |                          |
       <Duration>24</Duration>                                      --'                      |                          |
       <KeyId>urn:uuid:cf2ab7c6-c00f-4d52-aae2-3c3396a89b93</KeyId>                          |-- TrackFileAssetType     |
       <Hash>hnBSgENJXOvI6bfpat7GA1VImss=</Hash>                                           --'                          |
       <FrameRate>24 1</FrameRate>                                                                                      |-- PictureTrackFileAssetFile
       <ScreenAspectRatio>4096 2160</ScreenAspectRatio>                                                               --'
    </MainPicture>
    

    Tous les AssetTypes suivent ce principe : c'est une obligation de la norme.

    Si vous vous sentez l'envie de créer votre propre nouveau type d'asset (n'oubliez pas de déposer une norme ;-), il sera donc un enfant directement ou indirectement de GenericAssetType.

    Conclusion

    Maintenant que nous avons compris ce principe, nous pouvons passer à l'étude de chaque élément de chaque AssetType, en commençant par l'AssetType Generic ? :)

    Les namespaces XML et les exemples XML

    Avant de passer dans le vif du sujet, un petit aparté pour expliquer le choix de la simplification de certains exemples XML. Dans les différents chapitres, je proposerai une version simplifiée des namespaces sans qualifier.

    Le qualifier d'un namespace est ce petit identifiant après l'attribut xmlns :

    <msp-cpl:MainStereoscopicPicture xmlns:msp-cpl="http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL">
    

    Ici, le qualifier sera msp-cpl et ce nom n'est pas imposé par la norme SMPTE mais seulement proposé. Certains encodeurs DCP proposeront donc des variantes légitimes comme :

    <msp-cpl:MainStereoscopicPicture xmlns:msp-cpl="http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL">
    <cpl3d:MainStereoscopicPicture xmlns:cpl3d="http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL">
    <sicpl:MainStereoscopicPicture xmlns:sicpl="http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL">
    <nsX:MainStereoscopicPicture xmlns:nsX="http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL">
    

    La seule restriction se portera sur l'URI (ici http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL) qui est normé et obligatoire.

    Pour éviter toute complication, les exemples XML proposés dans les différents chapitres seront sans qualifier, comme-ci :

    <MainStereoscopicPicture xmlns="http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL">
    

    Fin de l'aparté :)

    Chapitres annexes

    Notes


    1. Liste de 2023. J'ai regardé dans énormément de CPL et de normes SMPTE, et je pense les avoir tous répertoriés, mais il n'est pas impossible qu'un ou deux m'échappent. Normalement, ils sont tous présents ici mais si ce n'est pas le cas, ne pas hésiter à me remonter l'oubli ;-)