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.
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 |
|
|
MainSound | Assets de sons (hors Dolby) |
|
|
MainStereoscopicPicture | Assets d'images stéréoscopiques (3D) |
|
|
MainSubtitle | Asset de sous-titres |
|
|
ClosedSubtitle | Asset de sous-titres |
|
|
MainCaption | Asset de sous-titres pour les malentendants |
|
|
ClosedCaption | Asset de sous-titres pour les malentendants |
|
|
MainClosedCaption | Asset de sous-titres pour les malentendants |
Interop |
|
AuxData |
Asset Autres ...
principalement utilisé par Dolby pour ses propres assets |
|
|
CompositionMetadataAsset | Metadatas de "modifications" |
|
|
MainMarkers | Metadatas pour des marqueurs |
|
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 | |
<MainStereoscopicPicture> |
PictureTrackFile | TrackFile | |
<MainSound> |
SoundTrackFile | TrackFile | |
<MainSubtitle> |
SubtitleTrackFile | TrackFile | |
<ClosedSubtitle> |
SubtitleTrackFile | TrackFile | |
<MainCaption> |
CaptionTrackFile | TrackFile | |
<ClosedCaption> |
CaptionTrackFile | TrackFile | |
<AuxData> |
DataTrackFile | TrackFile | |
<MainMarkers> |
Markers | ||
<CompositionMetadataAsset> |
CompositionMetadata |
(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 :
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.
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 ? :)
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é :)
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 ;-) ↩