Timed Text Markup Language
L'XML del W3C per sottotitoli e didascalie, quello richiesto da emittenti e servizi di streaming. DFXP era il nome del suo primo profilo, e molti file lo portano ancora. IMSC, EBU-TT-D e iTT di Apple sono anch'essi TTML, ciascuno con le sue abitudini.
In breve
| Estensione | .ttml |
|---|---|
| Tipo di media | application/ttml+xml |
| Specifica | W3C, Timed Text Markup Language 1 (TTML1), una Recommendation. TTML2 lo estende; IMSC e EBU-TT-D sono sottoinsiemi per la distribuzione. |
| Precisione dei tempi | Qualsiasi: frazioni di secondo, fotogrammi o tick |
| Codifica del testo | Dichiarata nell'XML. Quasi sempre UTF-8. |
| Stile | Stili con nome e attributi tts:: carattere, dimensione, colore, sfondo, corsivo, grassetto, sottolineato, barrato, contorno |
| Posizionamento | Regioni: riquadri collocati e dimensionati ovunque sull'immagine |
| Parlanti | Agenti (ttm:agent), nominati nell'intestazione |
| Nei contenitori | MP4 come stpp (ISO/IEC 14496-30), in flussi DASH, CMAF e HLS |
Anatomia di un file
Un documento XML: un'intestazione che nomina stili e regioni, e un corpo di paragrafi, uno per ogni sottotitolo.
<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 · Radice
<tt>, con gli spazi dei nomi di TTML, la lingua e l'orologio con cui si contano i tempi:ttp:frameRate,ttp:tickRate. - 2 · Intestazione
Stili con nome, le regioni dello schermo e chi parla.
- 3 · Tempi
Il
begindi ogni paragrafo, e la suaendoppuredur. - 4 · Testo
Il sottotitolo. Gli span applicano parti di stile al testo, e
<br/>interrompe la riga.
Tempi
TTML scrive un tempo in più modi di qualsiasi altro formato di sottotitoli:
| Scritto | Cos'è |
|---|---|
00:00:23.500 |
Ore, minuti, secondi e una frazione |
00:00:23:12 |
Fotogrammi dopo i secondi: dodici, con il ttp:frameRate del file |
23.5s, 23500ms, 1h |
Uno scostamento in ore, minuti, secondi o millisecondi |
564f |
Fotogrammi |
235000000t |
Tick, ttp:tickRate al secondo |
I tempi si contano da ciò che li contiene. Il begin di un paragrafo si conta dall'inizio del suo <div> e del suo <body>, e un paragrafo senza una fine propria termina con loro.
Stili
Uno stile è un insieme di attributi tts:. Il testo li riceve in ordine: dalla sua regione, poi dal body, dal div, dal paragrafo e dallo span che lo contengono. Ogni elemento riceve gli stili che nomina (style="s1 s2", e quelli che questi nominano), poi i propri attributi.
| Attributo | Effetto | In Subtitld |
|---|---|---|
tts:fontStyle="italic" |
Corsivo | Mantenuto |
tts:fontWeight="bold" |
Grassetto | Mantenuto |
tts:textDecoration="underline", "lineThrough" |
Sottolineato, barrato | Mantenuti |
tts:color |
Colore del testo: un nome, #rrggbb, #rrggbbaa o rgb() |
Mantenuto, senza la sua trasparenza |
tts:displayAlign, tts:textAlign |
Dove si trova il testo nella regione | Mantenuti, come una delle nove posizioni |
tts:fontFamily, tts:fontSize |
Carattere e dimensione | Non mantenuti |
tts:backgroundColor, tts:textOutline |
Un riquadro dietro il testo, un contorno | Non mantenuti |
<set> |
Uno stile che cambia nel tempo | Non mantenuto |
Regioni
Una regione è un riquadro sull'immagine, collocato da tts:origin e dimensionato da tts:extent. Al suo interno, tts:displayAlign pone il testo in alto, al centro o in basso (before, center, after), e tts:textAlign a un lato o al centro.
<region xml:id="top"
tts:origin="10% 10%"
tts:extent="80% 80%"
tts:displayAlign="before"/>
Subtitld calcola dove cade il testo, che la regione sia misurata in percentuali, pixel o celle, e sceglie la più vicina delle nove posizioni che {\an1} fino a {\an9} di SubRip indicano. Quando scrive un file, ogni posizione usata diventa una regione con quel nome: bottom, top, top-left…
Quando un file non lo dice. I valori predefiniti di TTML collocano il testo in alto a sinistra della sua regione, ma i player lo mostrano in basso e centrato, e così fa Subtitld. Legge anche textAlign="start" in una regione senza dimensione né posizione come centrato: i file scritti con pycaption, compresi quelli dei vecchi Subtitld, lo mettono su ogni regione.
Profili
La maggior parte dei TTML è scritta secondo un profilo: un sottoinsieme del linguaggio, con regole proprie. Subtitld legge ciascuno di essi come TTML.
| Profilo | Dove è usato | Sue abitudini |
|---|---|---|
| DFXP | Il primo profilo di TTML, e l'estensione .dfxp |
File più vecchi nello spazio dei nomi http://www.w3.org/2006/10/ttaf1 |
| IMSC 1 | Streaming su DASH, CMAF e HLS | Il profilo del W3C per sottotitoli e didascalie online |
| EBU‑TT‑D | Lettori online delle emittenti europee | Elementi spesso scritti con un prefisso: <tt:p> |
| SMPTE‑TT | Didascalie della televisione americana online | Aggiunte di SMPTE, per didascalie portate dalla trasmissione |
iTT (.itt) |
Consegne all'iTunes Store di Apple e ad Apple TV | Tempi in fotogrammi (ttp:timeBase="smpte") |
TTML in Subtitld
- Testo e a capo di ogni sottotitolo
- Corsivo, grassetto, sottolineato, barrato e colore
- Dove si trova sullo schermo
- Parlanti, come agenti
- Inizio e fine, al millisecondo, in ordine
- Caratteri, dimensioni, sfondi e contorni riga per riga
- Dimensione e posizione esatte di una regione
- Stili che cambiano nel tempo, ruby, sottotitoli immagine
- Traduzioni accanto all'originale, doppiaggi, volti dei parlanti
Salvi un progetto .usfx per conservare ciò che è di Subtitld.
Aprire un file TTML
Subtitld apre .ttml, .dfxp, .itt e .xml, e:
- legge il TTML in qualunque forma sia scritto: nel suo spazio dei nomi, in quello vecchio di DFXP, o con
tt:davanti a ogni elemento; - legge ogni forma di tempo, ciascuno contato dal div e dal body in cui si trova;
- segue gli stili come li applica TTML, conservando corsivo, grassetto, sottolineato, barrato e qualsiasi colore diverso dal bianco;
- colloca ogni sottotitolo dove lo mostra la sua regione;
- prende gli agenti come parlanti, pronti per il doppiaggio, e lo
xml:langdel file come lingua del progetto; - legge la codifica dichiarata dal file, e le entità HTML come
.
Un file che non è XML ben formato si apre con un messaggio che indica la riga e la colonna. Un file che non è affatto TTML lo dice.
Esportare TTML
Esporta, poi Sottotitoli e TTML o DFXP, offre:
- TestoL'originale, una traduzione, o entrambi, con la traduzione sotto.
- Nomi dei parlantiEsclusi, prima del testo (Thom: …), oppure come agenti (
ttm:agent), il modo proprio di TTML. - FormattazioneMantenuta, oppure rimossa.
- Sposta i tempiOgni sottotitolo anticipato o ritardato della stessa quantità.
- AspettoBianco con contorno nero, oppure come lo disegna l'anteprima di Subtitld: il suo carattere, colore e un riquadro traslucido.
Il file è TTML 1 in UTF-8. I tempi sono scritti come 00:00:23.000, ogni posizione dei sottotitoli come una regione, la formattazione come span e i ritorni a capo come <br/>. Il suo xml:lang è la lingua del testo che contiene. TTML e DFXP ottengono lo stesso file; cambia solo l'estensione.
TTML o WebVTT?
WebVTT per un <track> su una pagina web: i browser lo leggono da soli. TTML per le emittenti, per i servizi di streaming che lo richiedono, e per i player che lo leggono, come dash.js e Shaka Player. La pagina WebVTT contiene il resto.
Curiosità
TTML 1.0 divenne una Recommendation del W3C nel novembre 2010, dopo bozze che prendevano il nome dal suo primo profilo: il Distribution Format Exchange Profile, DFXP.
Il vecchio spazio dei nomi, http://www.w3.org/2006/10/ttaf1, risale alle bozze del 2006, quando TTML era il Timed Text Authoring Format. I file lo portano ancora.
Nel 2016 il W3C ricevette per il TTML un Technology & Engineering Emmy, insieme a HBO, Netflix, Telestream e SMPTE.
Formati correlati
Lo apra in Subtitld con il video e lo sincronizzi sulla forma d'onda.