Références |
SMPTE 377-1-2011 - MXF - File Format Specification Chapitre B.12 - Timeline Track P123 Chapitre B.15 - Timeline Track - Timecode P124 Chapitre B.18 - Timeline Track - Picture P126 Chapitre B.21 - Timeline Track - Sound P127 Chapitre B.24 - Timeline Track - Data P127 Chapitre B.27.1 - Timeline Track - Descriptive Metadata (DM) P127 |
Modèle KLV | Local Sets |
Universal Label |
06.0e.2b.34.02.53.01.01.0d.01.01.01.01.01.3b.00 (SMPTE)
|
Timeline Track fera une simple relation vers le KLV Sequence
Timeline Track, comme Static Track, font partie du type Track, ils partageront donc des points communs.
Timeline Track peut travailler sur une partie de la piste (contrairement à Static Track qui ne pourra travailler que sur l'entièreté de la piste).
Dans un MXF DCP, nous aurons des Timeline Track, dans les blocs (Material Package et Source Package). Chacun feront références à des KLV Sequence qui lui-même fera référence à d'autres KLV comme Source Clip ou Timecode Component.
Voici un exemple de suite logique de Timeline Track dans chaque Package et ses enfants (que nous verrons par la suite) :
N'oubliez pas que Timeline Track = Static Track avec limitations temporelles. Normalement, nous pourrions remplacer Timeline Track par une Static Track. Normalement... parce qu'il existe quand même des restrictions dans les normes sur quand utiliser une Timeline ou quand utiliser une Static. Par exemple, si vous voulez utiliser un Descriptive Metadata Segment, vous devrez utiliser un Static Track comme parent :)
A la différence de Static Track, vous aurez des items Origin et Edit Rate.
Voici quatres exemples de Timeline Track.
L'une venant du bloc Material Package (lié au MXF et à la timeline) :
╓──── Timeline Track #1 ──────────────────────────────────────────────────────────────────────────
║ 3C0A - Instance ID ║ 3cac453b.a5aa4f38.a2c2ac3d.26641cef
║ 4801 - Track ID ║ 1
║ 4804 - Track Number ║ 0
║ 4802 - Track Name ║ Timecode Track
║ 4803 - Sequence ║ d329b223.05f444f3.b53d99a4.3736bc4f
║ 4B01 - Edit Rate ║ 24/1
║ 4B02 - Origin ║ 0
╙─────────────────────────────────────────────────────────────────────────────────────────────────
╓──── Timeline Track #2 ──────────────────────────────────────────────────────────────────────────
║ 3C0A - Instance ID ║ cdddf8d1.99104345.8552a513.56e8025f
║ 4801 - Track ID ║ 2
║ 4804 - Track Number ║ 0
║ 4802 - Track Name ║ Picture Track
║ 4803 - Sequence ║ 26be6965.2e49401a.9403760e.698fbb80
║ 4B01 - Edit Rate ║ 24/1
║ 4B02 - Origin ║ 0
╙─────────────────────────────────────────────────────────────────────────────────────────────────
Et l'autre venant du bloc Source Package (lié aux essences) :
╓─── Timeline Track #1 ─────────────────────────────────────────────────────────────────────────
║ 3C0A - Instance UID ║ 46a6c435.4e214d7f.8974cd5a.5c77fce1
║ 4801 - Track ID ║ 1
║ 4804 - Track Number ║ 0
║ 4802 - Track Name ║ Timecode Track
║ 4803 - Sequence UID ║ d5e6616d.fbcc42eb.bbbda96f.9d356068
║ 4B01 - Edit Rate ║ 24/1
║ 4B02 - Origin ║ 0
╙────────────────────────────────────────────────────────────────────────────────────────────────
╓─── Timeline Track #2 ──────────────────────────────────────────────────────────────────────────
║ 3C0A - Instance UID ║ fa1243a1.21874f1f.b34014bf.3353ee05
║ 4801 - Track ID ║ 2
║ 4804 - Track Number ║ 352389121
║ 4802 - Track Name ║ Picture Track
║ 4803 - Sequence UID ║ d424bd75.6f84499e.8728eee5.daa65edf
║ 4B01 - Edit Rate ║ 24/1
║ 4B02 - Origin ║ 0
╙────────────────────────────────────────────────────────────────────────────────────────────────
Sequence fait référence au KLV Sequence via son Instance UID.
Track ID va définir un simple numéro (1, 2, 3, etc...) de piste pour ce package et qui sera en lien avec le SourceTrackID dans le KLV Source Clip. Le Track ID commence en général à 1. S'il commence par 0, c'est que vous avez un vieux MXF car cette valeur est considérée comme obsolète.
Track Number spécifie une référence au type de container des essences (oui, le choix du nom est hasardeux).
Vous n'aurez que des valeurs nulles sauf pour le dernier Timeline Track qui est en lien avec l'essence.
Et selon son essence, vous aurez comme code :
Code Hexadécimal | Type d'essence |
---|---|
0x15010801 |
Picture |
0x16010101 |
Sound |
0x17010b01 |
Subtitle |
Ces valeurs hexadécimales représentent des identifiants définis dans la norme du MXF Generic Container. 1
Par exemple :
Le premier élément représente "Item Type Identifier", par exemple :
0x15
représente un Generic Container Picture0x16
réprésente un Generic Container SoundLe second élément est le "Essence Element Count", le nombre d'élément, donc toujours à 01 puisqu'il n'y a qu'un élément par container d'essence.
Le troisième élément est le "Essence Element Type", le type d'essence défini dans le SMPTE 331M.
Le dernier représente un simple numéro d'essence (en général 1)
Mais pour faire plus simple, si vous regardez plus en détail, vous verrez que cette suite de chiffre ne vous est pas inconnue. Et oui, c'est la fin d'un Universal Label et pas n'importe lesquels, ceux des KLV Essences :
EditRate est la vitesse de la timeline en Hertz. Par exemple, 24/1 ou 48/1 ou pire... 24000/1001, qui est le ... 23.97 (qui devrait brûler dans les tréfonds des anciennes technos)
Origin indique s'il y a des éléments avant ou après le début de la Timeline Track, le nombre de frame avant ou après le point d'origine. Cet item est utilisé s'il existe un décalage dans la timeline. Vous aurez toujours la valeur 0 car on n'effectue pas de décalage dans un MXF de DCP.
Voir l'étude du parsing d'un KLV Local Set dans Preface, avec en supplément :
Et le format d'EditRate que nous allons étudier.
Voici un exemple de données brutes au format hexadécimal avec un code couleur pour les différentes parties :
Local Tag | Nom de l'attribut | Type | Taille (*) | Fixe/Variable SMPTE | Obligatoire |
---|---|---|---|---|---|
3C0A | UUID | 16 octets | Fixe | Oui | |
4801 | uint32 | 4 octets | Fixe | Oui | |
4804 | uint32 | 4 octets | Fixe | Oui | |
4802 | String UTF-16 | 26 octets | Variable | Non | |
4803 | UUID | 16 octets | Fixe | Oui | |
4B01 | Rationnel (Int32/Int32) | 2 x 4 octets | Fixe | Oui | |
4B02 | int64 (1) | 8 octets | Fixe | Oui |
(*) N'oubliez pas que les tailles sont purement indicatives car elles sont dynamiques et non fixes et dépendent des
(1) Ce n'est pas uint64 car le nombre peut-être négatif dans certaines occasions.
L'
Ainsi, notre valeur hexadécimale 0000001800000001
doit s'interpréter de la sorte :
0x00000018
est le numérateur0x00000001
est le dénominateurSi nous convertissons ces valeurs hexadécimales, nous aurons 24
et 1
, notre EditRate sera donc 24/1
Interchange Object → Generic Track → Timeline Track
UL = 06.0E.2B.34.02.53.01.vv.0D.01.01.01.01.01.3B.00
^^------------------------------ Item Designator : Organizationally registered
^^--------------------------- Organization : AAF
^^------------------------ Application : MXF / AAF Association Structural Metadata Sets
^^--------------------- Structure Version : Structure Version 1
^^------------------ Structure Kind : MXF / AAF Association compatible sets and packs
^^--------------- MXF Set Definition : Timeline Track
^^------------ MXF Set Definition : Timeline Track
The Track Number in the File Package Picture Track Is a UInt32 with the same value as bytes 13-16 of the MXF Generic Container Element Key used to wrap the essence data. This value is unique in any partition. The correct partition is found by using the BodySID mechanism as detailed in the MXF File Format Specification and as outlined here -- SMPTE 379 - MXF Generic Container ↩