Références |
SMPTE 429-5-2017 - DCP - Timed Text Track File (MXF, SMPTE) SMPTE 429-12-2008 - DCP - Caption and Closed Subtitle (Syntaxe CPL, SMPTE) SMPTE 428-7-2014 - Digital Cinema Distribution Master – Subtitle (Syntaxe XML SubtitleReel, SMPTE) SMPTE 428-10-2008 - Closed Caption and Closed Subtitle (Syntaxe XML, Ajout) Subtitle Specification for Projection Technology DLP Cinema (v1.1) (Syntaxe XML DCSubtitle, Font : Open Font Format - ISO/IEC 14496-22:2019 - Part 22 |
Modèle KLV |
Data Item (non chiffré) Variable-Length Pack (chiffré) |
Universal Label |
06.0e.2b.34.02.53.01.01.0d.01.01.01.01.01.64.00 - TimedText Essence Descriptor
06.0e.2b.34.02.53.01.01.0d.01.01.01.01.01.65.00 - TimedText Resource Sub-Descriptor
06.0e.2b.34.01.02.01.01.0d.01 03.01.17.01.0b.01 - TimedText Essence - SMPTE 2017
06.0e.2b.34.01.02.01.09.0d.01 03.01.17.01.0b.01 - TimedText Essence - Deprecated ?
06.0e.2b.34.01.02.01.**.0d.01 03.01.17.01.0b.01 - TimedText Essence - Toutes versions
---- ---- ----
| | |
| | +------- Essence Element Number (toujours 1)
| +---------- Clip Wrapped Element
+------------- nombre d'élément XML (toujours 1)
06.0e.2b.34.01.01.01.0c.0d.01.05.09.01.00.00.00 - TimedText Ancillary Resource (Essence Extra)
06.0e.2b.34.02.53.01.0a.0d.01.01.01.02.13.01.01 - TimedText Essence Container Label
|
Les sous-titres peuvent être intégrés selon deux méthodes, soit via du texte soit via des images :
Au commencent, avec Interop, les fichiers de sous-titres étaient de simples fichiers XML déposés dans un sous-répertoire à l'intérieur des DCP. Leurs syntaxes respectaient le DCSubtitle, la norme Subtitle Specification for Projection Technology DLP Cinema, écrite par Texas Instruments. Ces sous-titres Interop sont reconnaissables car ils utilisent le tag <DCSubtitle>
. Vous avez un exemple de sous-titres Interop ici. Etant donné qu'ils sont depuis considérés comme obsolète, sauf exception, nous n'en parlerons plus dans ce chapitre.
Lors du passage au SMPTE, de lourds changements sont apparus :
Les sous-titres doivent respecter la norme SMPTE 428-7-2014 - Subtitle, la syntaxe XML est différente (même si proche de sa précédente Interop en reprenant certains éléments).
Mais le plus grand changement est le passage à un format MXF : le fichier XML a été intégré à l'intérieur d'un MXF propre, comme pourrait l'être les pistes images ou les pistes sonores. Les autres assets (PNG, Font) sont également intégrés dans le même MXF de sous-titres.
Dans un MXF sous-titres, nous aurons 4 types de KLV :
Nous pourrions rajouter le KLV Descriptive Metadata Segment qui indiquera un asset Data Essence Track / D-Cinema Timed Text.
Les descripteurs se trouvent dans la Partition Header.
Le TimedText Essence Descriptor va être notre point d'entrée :
╓─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
║ 3C0A - Instance UID ║ 87b085bb.137c440a.989b7848.9c47ffe2
║ FFFF - Descriptors & Sub-Descriptors (SMPTE) ║ 1 item(s): 8008748e.728745b9.b74aaf59.fd47bc1c
║ 3006 - Linked Track ID ║ 2
║ 3001 - Sample Rate ║ 24/1
║ 3002 - Container Duration ║ 24
║ 3004 - Essence Container ║ 060e2b34.0401010a.0d010301.02130101 (TimedText Essence Container)
║ 3E01 - Data Essence Coding (v5) ║ 00000000.00000000.00000000.00000000
║ FFFE - TimedText - ResourceID ║ 9337a088.ad0b4c5a.bda4cd37.134340bf
║ FFFD - TimedText - UCSEncoding ║ UTF-8
Nos éléments importants seront les items ResourceID et les Descriptors et Sub-Descriptors
L'identifiant dans ResourceID servira comme Id dans le fichier XML de sous-titres :
Les Descriptors & Sub-Descriptors vont faire un lien avec des sous-descriptors qui indiqueront qu'il existe des assets supplémentaires en plus des sous-titres.
Dans notre cas, nous avons un TimedText Resource Sub-Descriptor de la sorte :
╓────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
║ 3C0A - Instance UID ║ 8008748e.728745b9.b74aaf59.fd47bc1c
║ FFFB - TimedText - AncillaryResourceID ║ 439d80a8.d325406f.b7349e08.812e2002
║ FFFA - TimedText - MIMEMediaType ║ application/x-font-opentype
║ 3F07 - BodySID ║ 10
Nous constatons directement via l'item MIMEMediaType que l'asset supplémentaire sera une police d'écriture (font).
C'est l'une des particularités des MXF de sous-titres. Contrairement aux autres MXF qui n'intègreront qu'un type d'essence (par exemple que du JPEG2000 pour un MXF Picture, que du PCM Wave pour un MXF Sound), un MXF sous-titres va intégrer tout ce qui permettra à la projection d'afficher des sous-titres : nous pourrons donc avoir un fichier XML, des fichiers PNG, des fichiers Fonts.
Tous se trouveront dans la Partition Body, mais avec une petite subtilité (oui, une autre).
Voyons un output de mxf-analyzer pour comprendre :
Vous constatez qu'il y a plusieurs Partition Body !
Il peut y avoir un Partition Pack - Generic Stream Partition 2 pour séparer TimedText Essence (le fichier XML de sous-titres) et TimedText Ancillary Resource (les données nécessaires au rendu : PNG ou Font TTF).
Juste après le Partition Pack Body, on retrouve notre TimedText Essence. et à la suite, nous aurons notre Partition Pack - Generic Stream Partition qui intègre notre Ancillary Resource.
Notez que :
S'il n'existe pas d'asset supplémentaire, nous n'aurons qu'un seul Partition Body et aucun TimedText Resource Sub-Descriptor.
S'il existe un ou plusieurs assets supplémentaires, il existera donc autant de Partition Body et de TimedText Resource Sub-Descriptor que d'assets supplémentaires (voir paragraphe "Sous-titres avec des images")
Les différents assets (XML, PNG, Font) sont stockés à même dans le container KLV (comme le JPEG2000), il suffit d'extraire la donnée pour récupérer les différents fichiers dans leurs intégrités et leurs intégralités. (également avec un MXF chiffré mais il faudra passer par la case déchiffrement avant :)
Voila comment s'articulent les interconnexions entre les descripteurs et les essences avec un exemple comprenant un sous-titrage, une police de caractères et une image de sous-titre :
Si nous extrayons notre contenu XML depuis notre container KLV, voici ce que nous obtiendrons :
<?xml version="1.0" encoding="UTF-8"?>
<SubtitleReel xmlns:dcst="http://www.smpte-ra.org/schemas/428-7/2010/DCST" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Id>urn:uuid:300907bd-1074-4cfa-bd88-3073449527ff</Id>
<ContentTitleText>Title of the Movie</ContentTitleText>
<AnnotationText>Title of the Movie</AnnotationText>
<IssueDate>2020-04-27T02:51:57.000-00:00</IssueDate>
<ReelNumber>1</ReelNumber>
<Language>fr</Language>
<EditRate>25 1</EditRate>
<TimeCodeRate>25</TimeCodeRate>
<StartTime>00:00:00:00</StartTime>
<LoadFont ID="theFontId">urn:uuid:3dec6dc0-39d0-498d-97d0-928d2eb78391</LoadFont>
<SubtitleList>
<Font ID="theFontId" Effect="border" EffectColor="FF000000" Color="FFFFFFFF" Weight="normal" Size="39">
<Subtitle SpotNumber="1" TimeIn="00:00:00:00" TimeOut="00:00:00:01" FadeUpTime="00:00:00:00" FadeDownTime="00:00:00:00">
<Font Weight="bold">
<Text Valign="bottom" Vposition="9.0"> </Text>
</Font>
</Subtitle>
<Subtitle SpotNumber="2" TimeIn="00:00:00:17" TimeOut="00:00:02:15" FadeUpTime="00:00:00:00" FadeDownTime="00:00:00:00">
<Text Valign="bottom" Vposition="9.0">Évidemment, c'est pas des chaussures pour la marche...</Text>
</Subtitle>
<Subtitle SpotNumber="3" TimeIn="00:00:02:20" TimeOut="00:00:04:18" FadeUpTime="00:00:00:00" FadeDownTime="00:00:00:00">
<Text Valign="bottom" Vposition="9.0">...que vous avez là.</Text>
</Subtitle>
<Subtitle SpotNumber="4" TimeIn="00:00:07:13" TimeOut="00:00:09:11" FadeUpTime="00:00:00:00" FadeDownTime="00:00:00:00">
<Text Valign="bottom" Vposition="9.0">Puisque vous me le proposez si gentiment</Text>
</Subtitle>
<Subtitle SpotNumber="5" TimeIn="00:00:09:21" TimeOut="00:00:11:19" FadeUpTime="00:00:00:00" FadeDownTime="00:00:00:00">
<Text Valign="bottom" Vposition="9.0">j'accepte</Text>
</Subtitle>
</Font>
</SubtitleList>
</SubtitleReel>
Les sous-titres sont sous un format XML brut avec les données lisibles facilement.
La syntaxe XML SubtitleReel regorge énormément d'éléments permettant l'affichage des sous-titres avec une grande flexibilité. Cette syntaxe est décrite dans la norme SMPTE SMPTE 428-7-2014 - Subtitle.
Nous pouvons nous pencher sur deux en particulier :
L'identifiant Id se trouve dans le KLV TimedText Essence Descriptor à l'item ResourceID :
L'identifiant dans LoadFont 3 (3dec6dc0-39d0-498d-97d0-928d2eb78391
) se trouve dans l'un des KLV TimedText Essence - Sub-Descriptors à l'item AncillaryResourceID :
La police de caractère se trouvera dans un container TimedText Essence - Ancillary Resource.
Les normes permettent qu'un fichier de sous-titres puissent pointer vers des images.
Pour cela, le tag Image sera utilisé et un identifiant sera défini.
Cet identifiant se retrouvera dans un des KLV TimedText Resource Sub-Descriptor via l'item AncillaryResourceID.
Voici un exemple de sous-titres incorporant une suite d'images :
<?xml version="1.0" encoding="UTF-8"?>
<SubtitleReel xmlns="http://www.smpte-ra.org/schemas/428-7/2014/DCST">
<Id>urn:uuid:ca024058-f6ac-4856-9b65-4dba39ebdbcf</Id>
<ContentTitleText>Movie with images</ContentTitleText>
<IssueDate>2019-08-07T17:24:30-00:00</IssueDate>
<ReelNumber>6</ReelNumber>
<Language>fr</Language>
<EditRate>24 1</EditRate>
<TimeCodeRate>24</TimeCodeRate>
<StartTime>00:00:00:00</StartTime>
<DisplayType>MainSubtitle</DisplayType>
<SubtitleList>
<Subtitle SpotNumber="1" TimeIn="00:06:04:10" TimeOut="00:06:07:06" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0.2441" Valign="bottom" Vposition="3.1468">urn:uuid:348cb7a7-7461-494c-942d-4a77220526a5</Image>
</Subtitle>
<Subtitle SpotNumber="2" TimeIn="00:06:09:16" TimeOut="00:06:12:14" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0.3417" Valign="bottom" Vposition="3.1468">urn:uuid:9d3cb9ef-6b86-4e14-a13b-00855dbcf1cd</Image>
</Subtitle>
<Subtitle SpotNumber="3" TimeIn="00:06:14:14" TimeOut="00:06:17:08" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0.3417" Valign="bottom" Vposition="3.613">urn:uuid:9f3f5bb6-95f5-4285-b97c-c1b3bf5064d2</Image>
</Subtitle>
<Subtitle SpotNumber="4" TimeIn="00:06:19:03" TimeOut="00:06:21:01" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0.2929" Valign="bottom" Vposition="3.613">urn:uuid:54ce35c4-65c5-41d8-b41c-d72cda70ecb7</Image>
</Subtitle>
<Subtitle SpotNumber="5" TimeIn="00:06:22:09" TimeOut="00:06:24:08" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0.2441" Valign="bottom" Vposition="3.1468">urn:uuid:f5cf6658-357a-43cb-ae06-55ecd3720edb</Image>
</Subtitle>
<Subtitle SpotNumber="6" TimeIn="00:06:26:03" TimeOut="00:06:27:08" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0.3417" Valign="bottom" Vposition="3.613">urn:uuid:8dfa0e56-6336-4f85-be76-77ad9235dc72</Image>
</Subtitle>
<Subtitle SpotNumber="7" TimeIn="00:06:33:19" TimeOut="00:06:34:15" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0" Valign="bottom" Vposition="3.9627">urn:uuid:a95148e8-ef72-494c-a4f4-d060929d64fc</Image>
</Subtitle>
<Subtitle SpotNumber="8" TimeIn="00:06:43:12" TimeOut="00:06:45:03" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0.1953" Valign="bottom" Vposition="3.1468">urn:uuid:29a29d80-aea6-4dee-980a-11d49b631709</Image>
</Subtitle>
<Subtitle SpotNumber="9" TimeIn="00:06:45:07" TimeOut="00:06:48:21" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0.2929" Valign="bottom" Vposition="3.613">urn:uuid:e7dcbbac-1c3e-4a9a-be6f-53ea6f83a6a4</Image>
</Subtitle>
<Subtitle SpotNumber="10" TimeIn="00:06:54:15" TimeOut="00:06:56:09" FadeUpTime="00:00:00:02" FadeDownTime="00:00:00:02">
<Image Hposition="0.2441" Valign="bottom" Vposition="3.1468">urn:uuid:dc962ff3-d6e3-4c55-880c-ac6331fc4de0</Image>
</Subtitle>
</SubtitleList>
</SubtitleReel>
A noter quelques restrictions :
Les images seront stockées dans les KLV TimedText Essence - Ancillary Resource.
Dans notre exemple, nous n'avons que 10 sous-titres image, nous devrions retrouver 10 TimedText Resource Sub-Descriptor et 10 TimedText Essence - Ancillary Resource dans notre MXF de tests :
$ mxf-analyzer -f subtitles.images.mxf --filter TimedText
uuid │ name
--------------------------------------------------------------------------------
060e2b34.02530101.0d010101.01016400 │ TimedText Essence Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.02530101.0d010101.01016500 │ TimedText Resource Sub-Descriptor
060e2b34.01020101.0d010301.17010b01 │ TimedText Essence
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
060e2b34.0101010c.0d010509.01000000 │ TimedText Essence - Ancillary Resource
Nous avons bien nos 10 Sub-Descriptors et nos 10 Ancillary Resources.
Et si nous regardons à l'intérieur en récupérant les identifiants des assets :
$ mxf-analyzer -vv -f "subtitles.images.mxf" \
--filter "TimedText Resource Sub-Descriptor" \
| grep "AncillaryResourceID"
FFFB - TimedText - AncillaryResourceID ║ 348cb7a7.7461494c.942d4a77.220526a5
FFFB - TimedText - AncillaryResourceID ║ 9d3cb9ef.6b864e14.a13b0085.5dbcf1cd
FFFB - TimedText - AncillaryResourceID ║ 9f3f5bb6.95f54285.b97cc1b3.bf5064d2
FFFB - TimedText - AncillaryResourceID ║ 54ce35c4.65c541d8.b41cd72c.da70ecb7
FFFB - TimedText - AncillaryResourceID ║ f5cf6658.357a43cb.ae0655ec.d3720edb
FFFB - TimedText - AncillaryResourceID ║ 8dfa0e56.63364f85.be7677ad.9235dc72
FFFB - TimedText - AncillaryResourceID ║ a95148e8.ef72494c.a4f4d060.929d64fc
FFFB - TimedText - AncillaryResourceID ║ 29a29d80.aea64dee.980a11d4.9b631709
FFFB - TimedText - AncillaryResourceID ║ e7dcbbac.1c3e4a9a.be6f53ea.6f83a6a4
FFFB - TimedText - AncillaryResourceID ║ dc962ff3.d6e34c55.880cac63.31fc4de0
Ce sont bien tous nos identifiants qui se trouvent dans notre fichier de sous-titres XML.
Nos AncillaryResourceID correspondent bien aux ID dans notre fichier de sous-titres :
<Image Hposition="0.2441" Valign="bottom" Vposition="3.1468">
urn:uuid:dc962ff3-d6e3-4c55-880c-ac6331fc4de0 <-------------------------------- notre ID
</Image>
TimedText Resource Sub-Descriptor :
╓───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
║ Instance UID ║ 02b3a999.45a3416c.8203bf5c.b74c5716
║ TimedText - AncillaryResourceID ║ dc962ff3.d6e34c55.880cac63.31fc4de0 <------- notre ID
║ TimedText - MIMEMediaType ║ image/png
║ BodySID ║ 19
╙───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Nos images correspondantes sont stockées dans nos KLV Ancillary Resources :
$ mxf-analyzer -f subtitles.images.mxf --filter "TimedText Essence - Ancillary Resource"
offset │ uuid │ data-size │ data │ name
------------------------------------------------------------------------------------------------------------------------------------------
20617 │ 060e2b34.0101010c.0d010509.01000000 │ 21223 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
41984 │ 060e2b34.0101010c.0d010509.01000000 │ 14376 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
56504 │ 060e2b34.0101010c.0d010509.01000000 │ 18086 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
74734 │ 060e2b34.0101010c.0d010509.01000000 │ 10400 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
85278 │ 060e2b34.0101010c.0d010509.01000000 │ 15887 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
101309 │ 060e2b34.0101010c.0d010509.01000000 │ 13013 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
114466 │ 060e2b34.0101010c.0d010509.01000000 │ 12693 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
127303 │ 060e2b34.0101010c.0d010509.01000000 │ 10797 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
138244 │ 060e2b34.0101010c.0d010509.01000000 │ 43756 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
182144 │ 060e2b34.0101010c.0d010509.01000000 │ 24972 │ 89504e470d0a1a0a0000000d49484452(..) │ TimedText Essence - Ancillary Resource
Et si nous procédons à une simple extraction :
$ mxf-analyzer -f subtitles.images.mxf \
--filter "TimedText Essence - Ancillary Resource" \
--extract ./
$ file *.value.bin
00020617-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 893 x 82, 8-bit/color RGBA, non-interlaced
00041984-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 542 x 83, 8-bit/color RGBA, non-interlaced
00056504-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 794 x 78, 8-bit/color RGBA, non-interlaced
00074734-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 404 x 78, 8-bit/color RGBA, non-interlaced
00085278-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 653 x 82, 8-bit/color RGBA, non-interlaced
00101309-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 510 x 79, 8-bit/color RGBA, non-interlaced
00114466-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 552 x 88, 8-bit/color RGBA, non-interlaced
00127303-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 407 x 85, 8-bit/color RGBA, non-interlaced
00138244-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 1195 x 130, 8-bit/color RGBA, non-interlaced
00182144-060e2b340101010c0d01050901000000-TimedTextEssenceAncillaryResource.value.bin: PNG image data, 1067 x 82, 8-bit/color RGBA, non-interlaced
Nous avons bien nos différents fichiers PNG de sous-titres.
Notez que la police de caractère (Font) peut être extraite de la même manière, elle est aussi stockée complètement dans un TimedText Essence Ancillary Resource.
Le MXF de sous-titres est un cas très particulier, comme nous l'avons vu, nous pouvons passer d'un asset XML, à un asset Font puis finir avec des assets PNG.
La syntaxe XML a été survolée (elle sera peut-être complétée par la suite), elle comporte énormément d'éléments permettant de placer les différents éléments à l'écran et dans quasiment n'importe quelle configuration. Elle s'intègre parfaitement avec les différentes langues à travers le monde.
MXF :
XML :
Les images sous-titres PNG doivent être en RGB, 8 bits par couleur. ↩
Quelques références normatives : ↩
6.1 Overview - A Generic Stream Partition is a special kind of Body Partition -- SMPTE 410-2008 - MXF - Generic Stream Partition
The timed-text resource is contained in an MXF Generic Container (GC) in the Body partition, and any ancillary resources are individually contained in their own Generic Stream partitions. -- SMPTE 429-5-2017 - DCP - Timed Text Track File
Les MXF pour les sous-titres possèdent des Generic Stream Partition Pack qui seront insérés après le Partition Body. Ils se comportent comme des sous-Partition Body. Ils auront l'Universal Label 060e2b34.02050101.0d010201.01031100
(Partition Pack - Body - Generic Stream Partition).
Exemple d'un output avec des sous-Partitions Generic Stream :
(...)
060e2b34.02050101.0d010201.01030400 - Partition Pack - Body - Closed & Complete <== Partition Body principal
060e2b34.01020101.0d010301.17010b01 - TimedText Essence (v9)
060e2b34.02050101.0d010201.01031100 - Partition Pack - Body - Generic Stream Partition <== Sous Partition Body pour le TimeText suivant
060e2b34.0101010c.0d010509.01000000 - TimedText - Ancillary Resource
060e2b34.02050101.0d010201.01040400 - Partition Pack - Footer - Closed & Complete
(..)
Les Universal Label du Operational Pattern seront des OP-Atom (060e2b34.04010102.0d010201.10000000
), celui du Partition Pack Body - Generic Stream Partition sera 060e2b34.04010101.0d010201.01010100
, donc un Single Item et Single Package (OP-1A).
Il ne peut y avoir qu'une seule Font When Text elements are present in the Timed Text essence, one (1) LoadFont element shall be present. Timed Text essence shall not contain more than one (1) LoadFont element. -- SMPTE 429-2-2013 - DCP Operational Constraints. ↩
7.2.3 StartTime Element - The StartTime element shall be present, and the value shall be 00:00:00:ZeroE as defined In SMPTE ST 428-7 ↩
7.2.4 First Timed Text Event - The composition’s first Timed Text event’s TimeIn attribute as defined In SMPTE ST 428-7 should be greater than or equal to the value of 00:00:04:ZeroE (four [4] seconds). ↩
7.2.5 Spot Duration - All Subtitle instances as defined In SMPTE ST 428-7 should have a minimum duration of 15 frames with a minimum duration of 2 frames between Subtitle instances. ↩
Pourquoi un MXF avec un KLV TimedText Essence Element en v1 et un autre en v9 ? Dans la dernière documentation SMPTE 439-5-2017 Timed Text Track File, la version (octet 8) doit être 0x01
, il se peut que la version 0x09
puisse correspondre à une ancienne version. ↩