Timed Text Markup Language

AbrirSalvarXMLEstilizado

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ídiaapplication/ttml+xml
EspecificaçãoW3C, 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 tempoQualquer: frações de segundo, quadros ou ticks
Codificação do textoDeclarada no XML. Quase sempre UTF-8.
EstiloEstilos nomeados e atributos tts:: fonte, tamanho, cor, fundo, itálico, negrito, sublinhado, tachado, contorno
PosicionamentoRegiões: caixas posicionadas e dimensionadas em qualquer lugar da imagem
FalantesAgentes (ttm:agent), nomeados no cabeçalho
Em contêineresMP4 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. 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. 2 · Cabeçalho

    Estilos nomeados, as regiões da tela e quem fala.

  3. 3 · Tempo

    O begin de cada parágrafo, e seu end ou dur.

  4. 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

Guardado no .ttml
  • 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
Sem lugar para ir
  • 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:lang do arquivo como o idioma do projeto;
  • lê a codificação que o arquivo declara, e as entidades do HTML, como &nbsp;.

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

Caixa de exportação do Subtitld com TTML escolhido e os falantes escritos como agentes

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

2010

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.

ttaf1

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.

Emmy

Em 2016 o W3C recebeu um Technology & Engineering Emmy pelo TTML, ao lado da HBO, Netflix, Telestream e SMPTE.

Formatos relacionados

Tem um .ttml para corrigir?

Abra no Subtitld com o vídeo e reajuste-o na forma de onda.

Baixar o Subtitld