Timed Text Markup Language
Le XML du W3C pour les sous-titres et les légendes, celui que demandent les diffuseurs et les services de streaming. DFXP était le nom de son premier profil, et beaucoup de fichiers le portent encore. IMSC, EBU-TT-D et l'iTT d'Apple sont aussi du TTML, chacun avec ses habitudes.
En bref
| Extension | .ttml |
|---|---|
| Type de média | application/ttml+xml |
| Spécification | W3C, Timed Text Markup Language 1 (TTML1), une Recommandation. TTML2 l'étend ; IMSC et EBU-TT-D en sont des sous-ensembles pour la diffusion. |
| Précision temporelle | Au choix : fractions de seconde, images ou ticks |
| Encodage du texte | Déclaré dans le XML. Presque toujours UTF-8. |
| Mise en forme | Styles nommés et attributs tts: : police, taille, couleur, arrière-plan, italique, gras, souligné, barré, contour |
| Positionnement | Régions : des boîtes placées et dimensionnées où l'on veut sur l'image |
| Intervenants | Agents (ttm:agent), nommés dans l'en-tête |
| Dans les conteneurs | MP4 en stpp (ISO/IEC 14496-30), dans les flux DASH, CMAF et HLS |
Anatomie d'un fichier
Un document XML : un en-tête qui nomme les styles et les régions, et un corps de paragraphes, un par sous-titre.
<tt xml:lang="en" …> <head>styles, regions</head> <body><div> <p begin="00:00:23.000" end="00:00:24.500"> You're a jerk,<br/>Thom.</p> </div></body> </tt>
- 1 · Racine
<tt>, avec les espaces de noms de TTML, la langue, et l'horloge sur laquelle se comptent les temps :ttp:frameRate,ttp:tickRate. - 2 · En-tête
Des styles nommés, les régions de l'écran, et qui parle.
- 3 · Temps
Le
beginde chaque paragraphe, et sonendou sondur. - 4 · Texte
Le sous-titre. Les spans mettent en forme une partie du texte, et
<br/>coupe la ligne.
Les temps
TTML écrit un temps de plus de manières que tout autre format de sous-titres :
| Écrit | Ce que c'est |
|---|---|
00:00:23.500 |
Heures, minutes, secondes et une fraction |
00:00:23:12 |
Images après les secondes : douze, selon le ttp:frameRate du fichier |
23.5s, 23500ms, 1h |
Un décalage en heures, minutes, secondes ou millisecondes |
564f |
Images |
235000000t |
Ticks, ttp:tickRate par seconde |
Les temps se comptent depuis ce qui les contient. Le begin d'un paragraphe se compte depuis le début de sa <div> et de son <body>, et un paragraphe sans end propre se termine avec eux.
Styles
Un style est un ensemble d'attributs tts:. Le texte les prend dans l'ordre : depuis sa région, puis depuis le body, la div, le paragraphe et le span qui l'entourent. Chaque élément prend les styles qu'il nomme (style="s1 s2", et ceux que ceux-ci nomment), puis ses propres attributs.
| Attribut | Effet | Dans Subtitld |
|---|---|---|
tts:fontStyle="italic" |
Italique | Conservé |
tts:fontWeight="bold" |
Gras | Conservé |
tts:textDecoration="underline", "lineThrough" |
Souligné, barré | Conservés |
tts:color |
Couleur du texte : un nom, #rrggbb, #rrggbbaa ou rgb() |
Conservée, sans sa transparence |
tts:displayAlign, tts:textAlign |
Où le texte se place dans sa région | Conservés, comme l'un des neuf emplacements |
tts:fontFamily, tts:fontSize |
Police et taille | Non conservées |
tts:backgroundColor, tts:textOutline |
Une boîte derrière le texte, un contour | Non conservés |
<set> |
Un style qui change dans le temps | Non conservé |
Régions
Une région est une boîte sur l'image, placée par tts:origin et dimensionnée par tts:extent. À l'intérieur, tts:displayAlign place le texte en haut, au milieu ou en bas (before, center, after), et tts:textAlign sur un côté ou au centre.
<region xml:id="top"
tts:origin="10% 10%"
tts:extent="80% 80%"
tts:displayAlign="before"/>
Subtitld détermine où atterrit le texte, que la région soit mesurée en pourcentages, en pixels ou en cellules, et retient le plus proche des neuf emplacements que {\an1} à {\an9} de SubRip désignent. Quand il écrit un fichier, chaque emplacement utilisé devient une région de ce nom : bottom, top, top-left…
Quand le fichier ne le précise pas. Les valeurs par défaut de TTML placent le texte en haut à gauche de sa région, mais les lecteurs l'affichent en bas et centré, et Subtitld fait de même. Il lit aussi textAlign="start" dans une région sans taille ni place comme centré : les fichiers écrits avec pycaption, ceux de l'ancien Subtitld compris, le mettent sur chaque région.
Profils
La plupart des TTML sont écrits selon un profil : un sous-ensemble du langage, avec ses propres règles. Subtitld lit chacun d'eux comme du TTML.
| Profil | Où il est utilisé | Ses habitudes |
|---|---|---|
| DFXP | Premier profil de TTML, et l'extension .dfxp |
Anciens fichiers dans l'espace de noms http://www.w3.org/2006/10/ttaf1 |
| IMSC 1 | Streaming en DASH, CMAF et HLS | Le profil du W3C pour les sous-titres et légendes en ligne |
| EBU‑TT‑D | Lecteurs en ligne des diffuseurs européens | Éléments souvent écrits avec un préfixe : <tt:p> |
| SMPTE‑TT | Légendes en ligne de la télévision américaine | Ajouts de la SMPTE, pour les légendes reprises de la diffusion |
iTT (.itt) |
Livraisons à l'iTunes Store d'Apple et à Apple TV | Temps en images (ttp:timeBase="smpte") |
Le TTML dans Subtitld
- Le texte et les retours à la ligne de chaque sous-titre
- Italique, gras, souligné, barré et couleur
- L'endroit où il se place à l'écran
- Les intervenants, sous forme d'agents
- Début et fin, à la milliseconde, dans l'ordre
- Polices, tailles, arrière-plans et contours ligne par ligne
- La taille et la place exactes d'une région
- Styles qui changent dans le temps, ruby, sous-titres en image
- Traductions à côté de l'original, doublages, visages des intervenants
Enregistrez un projet .usfx pour conserver ce qui est propre à Subtitld.
Ouvrir un fichier TTML
Subtitld ouvre .ttml, .dfxp, .itt et .xml, et :
- lit le TTML quelle que soit son écriture : dans son espace de noms, dans l'ancien espace DFXP, ou avec
tt:devant chaque élément ; - lit toutes les formes de temps, chacune comptée depuis la div et le body qui la contiennent ;
- suit les styles comme TTML les applique, en gardant l'italique, le gras, le souligné, le barré et toute couleur autre que le blanc ;
- place chaque sous-titre là où sa région l'affiche ;
- prend les agents comme intervenants, prêts pour le doublage, et le
xml:langdu fichier comme langue du projet ; - lit l'encodage déclaré par le fichier, ainsi que les entités HTML telles que
.
Un fichier qui n'est pas du XML bien formé s'ouvre avec un message indiquant la ligne et la colonne. Un fichier qui n'est pas du tout du TTML le signale.
Exporter en TTML
Exporter, puis Sous-titres et TTML ou DFXP, propose :
- TexteL'original, une traduction, ou les deux, la traduction en dessous.
- Noms des intervenantsOmis, placés avant le texte (Thom : …), ou sous forme d'agents (
ttm:agent), la façon propre à TTML. - Mise en formeConservée, ou supprimée.
- Décalage des tempsChaque sous-titre plus tôt ou plus tard, du même écart.
- ApparenceBlanc avec contour noir, ou tel que l'aperçu de Subtitld le dessine : sa police, sa couleur et sa boîte translucide.
Le fichier est du TTML 1 en UTF-8. Les temps s'écrivent 00:00:23.000, chaque emplacement des sous-titres devient une région, la mise en forme passe par des spans et les retours à la ligne par <br/>. Son xml:lang est la langue du texte qu'il contient. TTML et DFXP donnent le même fichier ; seule l'extension diffère.
TTML ou WebVTT ?
WebVTT pour un <track> sur une page web : les navigateurs le lisent seuls. TTML pour les diffuseurs, pour les services de streaming qui le demandent, et pour les lecteurs qui le lisent, comme dash.js et Shaka Player. La page WebVTT en dit davantage.
Anecdotes
TTML 1.0 est devenu une Recommandation du W3C en novembre 2010, après des brouillons désignés par son premier profil : le Distribution Format Exchange Profile, DFXP.
L'ancien espace de noms, http://www.w3.org/2006/10/ttaf1, date des brouillons de 2006, quand TTML était le Timed Text Authoring Format. Beaucoup de fichiers le portent encore.
En 2016, le W3C a reçu un Technology & Engineering Emmy pour TTML, aux côtés de HBO, Netflix, Telestream et SMPTE.
Formats associés
Ouvrez-le dans Subtitld avec la vidéo et recalez-le sur la forme d'onde.