Timed Text Markup Language

OpenenOpslaanXMLMet stijl

De XML van het W3C voor ondertitels en bijschriften, en wat omroepen en streamingdiensten vragen. DFXP was de naam van het eerste profiel, en veel bestanden dragen die naam nog. IMSC, EBU-TT-D en iTT van Apple zijn ook TTML, elk met eigen gewoonten.

In één oogopslag

Extensie.ttml
Mediatypeapplication/ttml+xml
SpecificatieW3C, Timed Text Markup Language 1 (TTML1), een Recommendation. TTML2 breidt het uit; IMSC en EBU-TT-D zijn subsets voor distributie.
TijdsprecisieVrij: fracties van een seconde, frames of ticks
TekencoderingVastgelegd in de XML. Bijna altijd UTF-8.
OpmaakBenoemde stijlen en tts:-attributen: lettertype, grootte, kleur, achtergrond, cursief, vet, onderstreping, doorhaling, omlijning
PositioneringRegio's: vakken die overal op het beeld worden geplaatst en van formaat worden gemaakt
SprekersAgenten (ttm:agent), in de head benoemd
In containersMP4 als stpp (ISO/IEC 14496-30), in DASH-, CMAF- en HLS-streams

Anatomie van een bestand

Een XML-document: een head die stijlen en regio's benoemt, en een body met alinea's, één voor elke ondertitel.

<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. 1 · Root

    <tt>, met de namespaces van TTML, de taal en de klok waarop de tijden tellen: ttp:frameRate, ttp:tickRate.

  2. 2 · Head

    Benoemde stijlen, de regio's van het scherm, en wie spreekt.

  3. 3 · Tijd

    Het begin van elke alinea, en zijn end of dur.

  4. 4 · Tekst

    De ondertitel. Overspanningen geven een deel ervan een stijl, en <br/> breekt de regel.

Tijden

TTML schrijft een tijd op meer manieren dan welk ander ondertitelformaat ook:

Geschreven Wat het is
00:00:23.500 Uren, minuten, seconden en een fractie
00:00:23:12 Frames na de seconden: twaalf bij de ttp:frameRate van het bestand
23.5s, 23500ms, 1h Een verschuiving in uren, minuten, seconden of milliseconden
564f Frames
235000000t Ticks; ttp:tickRate ervan per seconde

Tijden tellen vanaf wat ze bevat. Het begin van een alinea telt vanaf het begin van zijn <div> en <body>, en een alinea zonder eigen eind eindigt met die.

Stijlen

Een stijl is een verzameling tts:-attributen. Tekst neemt ze in volgorde over: van zijn regio, dan van de body, de div, de alinea en de span eromheen. Elk element neemt de stijlen over die het noemt (style="s1 s2", en de stijlen die die noemen), en daarna zijn eigen attributen.

Attribuut Effect In Subtitld
tts:fontStyle="italic" Cursief Behouden
tts:fontWeight="bold" Vet Behouden
tts:textDecoration="underline", "lineThrough" Onderstreping, doorhaling Behouden
tts:color Tekstkleur: een naam, #rrggbb, #rrggbbaa of rgb() Behouden, zonder de transparantie
tts:displayAlign, tts:textAlign Waar de tekst in zijn regio staat Behouden, als een van de negen plaatsen
tts:fontFamily, tts:fontSize Lettertype en grootte Niet behouden
tts:backgroundColor, tts:textOutline Een vak achter de tekst, een omlijning Niet behouden
<set> Een stijl die in de tijd verandert Niet behouden

Regio's

Een regio is een vak op het beeld, geplaatst met tts:origin en van formaat gemaakt met tts:extent. Binnenin zet tts:displayAlign de tekst bovenaan, in het midden of onderaan (before, center, after), en tts:textAlign aan één kant of in het midden.

<region xml:id="top"
        tts:origin="10% 10%"
        tts:extent="80% 80%"
        tts:displayAlign="before"/>

Subtitld berekent waar de tekst terechtkomt, of de regio nu in procenten, pixels of cellen is gemeten, en kiest de dichtstbijzijnde van de negen plaatsen die {\an1} tot {\an9} van SubRip aangeven. Bij het schrijven van een bestand is elke gebruikte plaats een regio met die naam: bottom, top, top-left…

Wanneer een bestand het niet zegt. De eigen standaardwaarden van TTML zetten tekst linksboven in zijn regio, maar spelers tonen die onderaan en gecentreerd, en Subtitld doet dat ook. Het leest textAlign="start" in een regio zonder grootte of plaats ook als gecentreerd: bestanden geschreven met pycaption, waaronder oudere versies van Subtitld, zetten dat op elke regio.

Profielen

De meeste TTML is geschreven volgens een profiel: een subset van de taal, met eigen regels. Subtitld leest ze allemaal als TTML.

Profiel Waar het wordt gebruikt Zijn gewoonten
DFXP TTML's eerste profiel, en de extensie .dfxp Oudere bestanden in de namespace http://www.w3.org/2006/10/ttaf1
IMSC 1 Streaming via DASH, CMAF en HLS Het profiel van het W3C voor ondertitels en bijschriften online
EBU‑TT‑D Online spelers van Europese omroepen Elementen vaak met een prefix: <tt:p>
SMPTE‑TT Amerikaanse televisie-bijschriften online Toevoegingen van SMPTE, voor bijschriften die uit de uitzending komen
iTT (.itt) Leveringen aan de iTunes Store en Apple TV Tijden in frames (ttp:timeBase="smpte")

TTML in Subtitld

Bewaard in de .ttml
  • De tekst en de regeleindes van elke ondertitel
  • Cursief, vet, onderstreping, doorhaling en kleur
  • Waar de ondertitel op het scherm staat
  • Sprekers, als agenten
  • Begin en eind, tot op de milliseconde, op volgorde
Geen plek voor
  • Lettertypen, groottes, achtergronden en omlijningen per regel
  • De exacte grootte en plaats van een regio
  • Stijlen die in de tijd veranderen, ruby, beeldondertitels
  • Vertalingen naast het origineel, dubs, gezichten van sprekers

U bewaart wat van Subtitld is door een .usfx-project op te slaan.

Een TTML-bestand openen

Subtitld opent .ttml, .dfxp, .itt en .xml, en:

  • leest TTML hoe het ook is geschreven: in de eigen namespace, in de oude DFXP-namespace, of met tt: voor elk element;
  • leest elke vorm van tijd, elk geteld vanaf de div en body waarin het staat;
  • volgt stijlen zoals TTML ze toepast, en behoudt cursief, vet, onderstreping, doorhaling en elke kleur die niet wit is;
  • zet elke ondertitel waar zijn regio die toont;
  • neemt agenten als sprekers, klaar voor nasynchronisatie, en het xml:lang van het bestand als de taal van het project;
  • leest de codering die het bestand opgeeft, en HTML-entiteiten zoals &nbsp;.

Een bestand dat geen goed gevormd XML is, opent met een melding met de regel en de kolom. Een bestand dat helemaal geen TTML is, zegt dat ook.

TTML exporteren

Het exportvenster van Subtitld met TTML gekozen en de sprekers geschreven als agenten

Exporteren, dan Ondertitels en TTML of DFXP, biedt:

  • TekstHet origineel, een vertaling, of beide, met de vertaling eronder.
  • Namen van sprekersWeggelaten, voor de tekst (Thom: …), of als agenten (ttm:agent), de eigen manier van TTML.
  • OpmaakBehouden, of verwijderd.
  • Tijden verschuivenElke ondertitel eerder of later met hetzelfde bedrag.
  • LookWit met een zwarte omlijning, of zoals de voorvertoning van Subtitld tekent: het lettertype, de kleur en een doorzichtig vak.

Het bestand is TTML 1 in UTF-8. Tijden worden geschreven als 00:00:23.000, elke plaats waar de ondertitels staan als een regio, opmaak als spans, en regeleindes als <br/>. Het xml:lang is de taal van de tekst die het bevat. TTML en DFXP krijgen hetzelfde bestand; alleen de extensie verschilt.

TTML of WebVTT?

WebVTT voor een <track> op een webpagina: browsers lezen dat zelf. TTML voor omroepen, voor streamingdiensten die erom vragen, en voor spelers die het lezen, zoals dash.js en Shaka Player. De WebVTT-pagina bevat de rest.

Wetenswaardigheden

2010

TTML 1.0 werd in november 2010 een W3C Recommendation, na concepten die naar het eerste profiel waren genoemd: de Distribution Format Exchange Profile, DFXP.

ttaf1

De oude namespace, http://www.w3.org/2006/10/ttaf1, komt uit de concepten van 2006, toen TTML de Timed Text Authoring Format heette. Bestanden dragen hem nog altijd.

Emmy

In 2016 ontving het W3C een Technology & Engineering Emmy voor TTML, naast HBO, Netflix, Telestream en SMPTE.

Verwante formaten

Een .ttml om te repareren?

Open het in Subtitld met de video en stel de timing bij op de golfvorm.

Subtitld downloaden