Timed Text Markup Language
O XML do W3C para legendas e legendagem, o que emissoras e serviços de streaming pedem. DFXP foi o nome do seu primeiro perfil, e muitos arquivos ainda o carregam. IMSC, EBU-TT-D e o iTT da Apple também são TTML, cada um com seus hábitos.
Resumo
| Extensão | .ttml |
|---|---|
| Tipo de mídia | application/ttml+xml |
| Especificação | W3C, Timed Text Markup Language 1 (TTML1), uma Recommendation. O TTML2 o estende; IMSC e EBU-TT-D são subconjuntos para distribuição. |
| Precisão de tempo | Qualquer: frações de segundo, quadros ou ticks |
| Codificação do texto | Declarada no XML. Quase sempre UTF-8. |
| Estilo | Estilos nomeados e atributos tts:: fonte, tamanho, cor, fundo, itálico, negrito, sublinhado, tachado, contorno |
| Posicionamento | Regiões: caixas posicionadas e dimensionadas em qualquer lugar da imagem |
| Falantes | Agentes (ttm:agent), nomeados no cabeçalho |
| Em contêineres | MP4 como stpp (ISO/IEC 14496-30), em fluxos DASH, CMAF e HLS |
Anatomia de um arquivo
Um documento XML: um cabeçalho que nomeia estilos e regiões, e um corpo de parágrafos, um para cada legenda.
<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 · Raiz
<tt>, com os namespaces do TTML, o idioma e o relógio pelo qual os tempos são contados:ttp:frameRate,ttp:tickRate. - 2 · Cabeçalho
Estilos nomeados, as regiões da tela e quem fala.
- 3 · Tempo
O
beginde cada parágrafo, e seuendoudur. - 4 · Texto
A legenda. Os spans aplicam estilo a partes dela, e
<br/>quebra a linha.
Tempos
O TTML escreve um tempo de mais maneiras do que qualquer outro formato de legenda:
| Escrito como | O que é |
|---|---|
00:00:23.500 |
Horas, minutos, segundos e uma fração |
00:00:23:12 |
Quadros depois dos segundos: doze, pelo ttp:frameRate do arquivo |
23.5s, 23500ms, 1h |
Um deslocamento em horas, minutos, segundos ou milissegundos |
564f |
Quadros |
235000000t |
Ticks, ttp:tickRate deles por segundo |
Os tempos são contados a partir do que os contém. O begin de um parágrafo conta a partir do início da sua <div> e do seu <body>, e um parágrafo sem fim próprio termina junto com eles.
Estilos
Um estilo é um conjunto de atributos tts:. O texto os recebe em ordem: da sua região, depois do corpo, da div, do parágrafo e do span ao redor. Cada elemento recebe os estilos que nomeia (style="s1 s2", e os que estes nomeiam), depois os seus próprios atributos.
| Atributo | Efeito | No Subtitld |
|---|---|---|
tts:fontStyle="italic" |
Itálico | Mantido |
tts:fontWeight="bold" |
Negrito | Mantido |
tts:textDecoration="underline", "lineThrough" |
Sublinhado, tachado | Mantidos |
tts:color |
Cor do texto: um nome, #rrggbb, #rrggbbaa ou rgb() |
Mantida, sem a transparência |
tts:displayAlign, tts:textAlign |
Onde o texto fica em sua região | Mantidos, como um dos nove lugares |
tts:fontFamily, tts:fontSize |
Fonte e tamanho | Não mantidos |
tts:backgroundColor, tts:textOutline |
Uma caixa atrás do texto, um contorno | Não mantidos |
<set> |
Um estilo que muda com o tempo | Não mantido |
Regiões
Uma região é uma caixa sobre a imagem, posicionada por tts:origin e dimensionada por tts:extent. Dentro dela, tts:displayAlign põe o texto no topo, no meio ou na base (before, center, after), e tts:textAlign a um lado ou no centro.
<region xml:id="top"
tts:origin="10% 10%"
tts:extent="80% 80%"
tts:displayAlign="before"/>
O Subtitld descobre onde o texto cai, se a região é medida em porcentagens, pixels ou células, e escolhe o mais próximo dos nove lugares que {\an1} a {\an9} do SubRip nomeiam. Ao gravar um arquivo, cada lugar usado é uma região com esse nome: bottom, top, top-left…
Quando o arquivo não diz. Os padrões do próprio TTML colocam o texto no canto superior esquerdo da região, mas os players o mostram embaixo e centralizado, e o Subtitld faz o mesmo. Ele também lê textAlign="start" numa região sem tamanho nem posição como centralizado: arquivos escritos com o pycaption, inclusive os do Subtitld mais antigo, o colocam em todas as regiões.
Perfis
A maior parte do TTML é escrita em um perfil: um subconjunto da linguagem, com regras próprias. O Subtitld lê cada um deles como TTML.
| Perfil | Onde é usado | Seus hábitos |
|---|---|---|
| DFXP | O primeiro perfil do TTML, e a extensão .dfxp |
Arquivos antigos no namespace http://www.w3.org/2006/10/ttaf1 |
| IMSC 1 | Streaming por DASH, CMAF e HLS | O perfil do W3C para legendas e legendagem online |
| EBU‑TT‑D | Players online de emissoras europeias | Elementos muitas vezes escritos com prefixo: <tt:p> |
| SMPTE‑TT | Legendagem online da televisão americana | Acréscimos da SMPTE, para legendas trazidas da transmissão |
iTT (.itt) |
Entregas à iTunes Store e à Apple TV | Tempos em quadros (ttp:timeBase="smpte") |
TTML no Subtitld
- O texto e as quebras de linha de cada legenda
- Itálico, negrito, sublinhado, tachado e cor
- Onde a legenda fica na tela
- Falantes, como agentes
- Início e fim, até o milissegundo, em ordem
- Fontes, tamanhos, fundos e contornos linha a linha
- O tamanho e o lugar exatos de uma região
- Estilos que mudam com o tempo, ruby, legendas em imagem
- Traduções ao lado do original, dublagens, rostos dos falantes
Salve um projeto .usfx para manter o que é próprio do Subtitld.
Abrindo um arquivo TTML
O Subtitld abre .ttml, .dfxp, .itt e .xml, e:
- lê o TTML como ele estiver escrito: no seu namespace, no namespace antigo do DFXP, ou com
tt:antes de cada elemento; - lê todas as formas de tempo, cada uma contada a partir da div e do body em que está;
- segue os estilos como o TTML os aplica, mantendo itálico, negrito, sublinhado, tachado e qualquer cor diferente do branco;
- coloca cada legenda onde a sua região a mostra;
- toma os agentes como falantes, prontos para dublagem, e o
xml:langdo arquivo como o idioma do projeto; - lê a codificação que o arquivo declara, e as entidades do HTML, como
.
Um arquivo que não é XML bem formado abre com uma mensagem indicando a linha e a coluna. Um arquivo que não é TTML de forma alguma diz isso.
Exportando TTML
Exportar, depois Legendas e TTML ou DFXP, oferece:
- TextoO original, uma tradução, ou os dois, com a tradução abaixo.
- Nomes dos falantesOmitidos, antes do texto (Thom: …), ou como agentes (
ttm:agent), a forma própria do TTML. - FormataçãoMantida, ou removida.
- Deslocar horáriosCada legenda antes ou depois, pelo mesmo intervalo.
- VisualBranco com contorno preto, ou como a pré-visualização do Subtitld a desenha: sua fonte, cor e uma caixa translúcida.
O arquivo é TTML 1 em UTF-8. Os tempos são escritos como 00:00:23.000, cada lugar em que as legendas ficam como uma região, a formatação como spans e as quebras de linha como <br/>. Seu xml:lang é o idioma do texto que ele guarda. TTML e DFXP recebem o mesmo arquivo; só a extensão muda.
TTML ou WebVTT?
WebVTT para um <track> em uma página web: os navegadores o leem sozinhos. TTML para emissoras, para serviços de streaming que o pedem, e para players que o leem, como dash.js e Shaka Player. A página do WebVTT traz o resto.
Curiosidades
O TTML 1.0 virou uma Recommendation do W3C em novembro de 2010, depois de rascunhos batizados com o nome do seu primeiro perfil: o Distribution Format Exchange Profile, DFXP.
O namespace antigo, http://www.w3.org/2006/10/ttaf1, vem dos rascunhos de 2006, quando o TTML era o Timed Text Authoring Format. Os arquivos ainda o carregam.
Em 2016 o W3C recebeu um Technology & Engineering Emmy pelo TTML, ao lado da HBO, Netflix, Telestream e SMPTE.
Formatos relacionados
Abra no Subtitld com o vídeo e reajuste-o na forma de onda.