Timed Text Markup Language
El XML del W3C para subtítulos y subtítulos para sordos, y lo que piden las emisoras y los servicios de streaming. DFXP fue el nombre de su primer perfil, y muchos archivos todavía lo llevan. IMSC, EBU-TT-D e iTT de Apple también son TTML, cada uno con sus costumbres.
De un vistazo
| Extensión | .ttml |
|---|---|
| Tipo de medio | application/ttml+xml |
| Especificación | W3C, Timed Text Markup Language 1 (TTML1), una Recomendación. TTML2 la amplía; IMSC y EBU-TT-D son subconjuntos para distribución. |
| Precisión temporal | Libre: fracciones de segundo, fotogramas o ticks |
| Codificación del texto | Declarada en el XML. Casi siempre UTF-8. |
| Estilo | Estilos con nombre y atributos tts:: tipografía, tamaño, color, fondo, cursiva, negrita, subrayado, tachado y contorno |
| Posición | Regiones: cajas colocadas y dimensionadas en cualquier parte de la imagen |
| Hablantes | Agentes (ttm:agent), con nombre en la cabecera |
| En contenedores | MP4 como stpp (ISO/IEC 14496-30), en flujos DASH, CMAF y HLS |
Anatomía de un archivo
Un documento XML: una cabecera que nombra estilos y regiones, y un cuerpo de párrafos, uno por cada subtítulo.
<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 · Raíz
<tt>, con los espacios de nombres de TTML, el idioma y el reloj con el que se cuentan los tiempos:ttp:frameRate,ttp:tickRate. - 2 · Cabecera
Estilos con nombre, las regiones de la pantalla y quién habla.
- 3 · Tiempos
El
beginde cada párrafo, y suendodur. - 4 · Texto
El subtítulo. Los
spandan estilo a partes de él, y<br/>rompe la línea.
Tiempos
TTML escribe un tiempo de más maneras que cualquier otro formato de subtítulos:
| Escrito | Qué es |
|---|---|
00:00:23.500 |
Horas, minutos, segundos y una fracción |
00:00:23:12 |
Fotogramas tras los segundos: doce según el ttp:frameRate del archivo |
23.5s, 23500ms, 1h |
Un desplazamiento en horas, minutos, segundos o milisegundos |
564f |
Fotogramas |
235000000t |
Ticks, ttp:tickRate por segundo |
Los tiempos cuentan desde lo que los contiene. El begin de un párrafo cuenta desde el inicio de su <div> y de su <body>, y un párrafo sin end propio termina con ellos.
Estilos
Un estilo es un conjunto de atributos tts:. El texto los toma en orden: de su región, y luego del body, el div, el párrafo y el span que lo rodean. Cada elemento toma los estilos que nombra (style="s1 s2", y los que estos nombran) y luego sus propios atributos.
| Atributo | Efecto | En Subtitld |
|---|---|---|
tts:fontStyle="italic" |
Cursiva | Se conserva |
tts:fontWeight="bold" |
Negrita | Se conserva |
tts:textDecoration="underline", "lineThrough" |
Subrayado, tachado | Se conserva |
tts:color |
Color del texto: un nombre, #rrggbb, #rrggbbaa o rgb() |
Se conserva, sin su transparencia |
tts:displayAlign, tts:textAlign |
Dónde se sitúa el texto en su región | Se conserva, como uno de nueve lugares |
tts:fontFamily, tts:fontSize |
Tipografía y tamaño | No se conserva |
tts:backgroundColor, tts:textOutline |
Un recuadro tras el texto, un contorno | No se conserva |
<set> |
Un estilo que cambia con el tiempo | No se conserva |
Regiones
Una región es una caja sobre la imagen, colocada con tts:origin y dimensionada con tts:extent. Dentro de ella, tts:displayAlign pone el texto arriba, en medio o abajo (before, center, after), y tts:textAlign a un lado o en el centro.
<region xml:id="top"
tts:origin="10% 10%"
tts:extent="80% 80%"
tts:displayAlign="before"/>
Subtitld calcula dónde cae el texto, tanto si la región se mide en porcentajes, en píxeles o en celdas, y toma el más cercano de los nueve lugares que nombran {\an1} a {\an9} de SubRip. Al escribir un archivo, cada lugar que usa es una región con ese nombre: bottom, top, top-left…
Cuando el archivo no lo dice. Los valores predeterminados de TTML sitúan el texto arriba a la izquierda de su región, pero los reproductores lo muestran abajo y centrado, y así lo hace Subtitld. También lee textAlign="start" en una región sin tamaño ni posición como centrado: los archivos escritos con pycaption, entre ellos los de versiones antiguas de Subtitld, lo ponen en todas las regiones.
Perfiles
La mayor parte de TTML se escribe con un perfil: un subconjunto del lenguaje, con reglas propias. Subtitld lee cada uno como TTML.
| Perfil | Dónde se usa | Sus costumbres |
|---|---|---|
| DFXP | El primer perfil de TTML, y la extensión .dfxp |
Archivos antiguos en el espacio de nombres http://www.w3.org/2006/10/ttaf1 |
| IMSC 1 | Streaming sobre DASH, CMAF y HLS | El perfil del W3C para subtítulos en línea |
| EBU‑TT‑D | Reproductores en línea de las emisoras europeas | Elementos a menudo escritos con prefijo: <tt:p> |
| SMPTE‑TT | Subtítulos en línea de la televisión estadounidense | Añadidos de SMPTE, para subtítulos trasladados desde la emisión |
iTT (.itt) |
Entregas a iTunes Store y Apple TV | Tiempos en fotogramas (ttp:timeBase="smpte") |
TTML en Subtitld
- El texto y los saltos de línea de cada subtítulo
- Cursiva, negrita, subrayado, tachado y color
- Dónde se sitúa en pantalla
- Hablantes, como agentes
- Inicio y fin, al milisegundo, en orden
- Tipografías, tamaños, fondos y contornos línea a línea
- El tamaño y el lugar exactos de una región
- Estilos que cambian con el tiempo, ruby, subtítulos de imagen
- Traducciones junto al original, doblajes, caras de los hablantes
Guarda un proyecto .usfx para conservar lo que es de Subtitld.
Abrir un archivo TTML
Subtitld abre .ttml, .dfxp, .itt y .xml, y:
- lee TTML como esté escrito: en su espacio de nombres, en el DFXP antiguo, o con
tt:delante de cada elemento; - lee todas las formas de tiempo, cada una contada desde el div y el body en que está;
- sigue los estilos tal como los aplica TTML, conservando cursiva, negrita, subrayado, tachado y cualquier color distinto del blanco;
- pone cada subtítulo donde lo muestra su región;
- toma los agentes como hablantes, listos para el doblaje, y el
xml:langdel archivo como idioma del proyecto; - lee la codificación que declara el archivo, y las entidades de HTML como
.
Un archivo que no es XML bien formado se abre con un mensaje que indica la línea y la columna. Un archivo que no es TTML en absoluto lo dice.
Exportar TTML
Exportar, y después Subtítulos y TTML o DFXP, ofrece:
- TextoEl original, una traducción, o ambos, con la traducción debajo.
- Nombres de hablantesSe omiten, van antes del texto (Thom: …), o como agentes (
ttm:agent), la forma propia de TTML. - FormatoSe conserva, o se quita.
- Desplazar tiemposCada subtítulo antes o después en la misma cantidad.
- AspectoBlanco con contorno negro, o tal como lo dibuja la vista previa de Subtitld: su tipografía, color y recuadro translúcido.
El archivo es TTML 1 en UTF-8. Los tiempos se escriben como 00:00:23.000, cada lugar donde se sitúan los subtítulos como una región, el formato como span, y los saltos de línea como <br/>. Su xml:lang es el idioma del texto que contiene. TTML y DFXP obtienen el mismo archivo; solo cambia la extensión.
TTML o WebVTT
WebVTT para un <track> en una página web: los navegadores lo leen por sí mismos. TTML para las emisoras, para los servicios de streaming que lo piden, y para reproductores que lo leen, como dash.js y Shaka Player. La página de WebVTT tiene el resto.
Curiosidades
TTML 1.0 se convirtió en Recomendación del W3C en noviembre de 2010, tras borradores que llevaban el nombre de su primer perfil: el Distribution Format Exchange Profile, DFXP.
El espacio de nombres antiguo, http://www.w3.org/2006/10/ttaf1, viene de los borradores de 2006, cuando TTML era el Timed Text Authoring Format. Los archivos todavía lo llevan.
En 2016 el W3C recibió un Technology & Engineering Emmy por TTML, junto a HBO, Netflix, Telestream y SMPTE.
Formatos relacionados
Ábrelo en Subtitld con el vídeo y reajústalo sobre la forma de onda.