Ir para o conteúdo principal
SubtitleMatrix

Formato de legenda TTML

O que este formato consegue expressar

Estilo do texto
Fontes, cor, contorno, sombra
Posição na tela
Sim
Sincronização karaokê
Não
Quebras de linha dentro de um bloco
Sim
Linha do tempo
Hora de início e de término para cada bloco
Resolução dos tempos
1 ms
Tempos guardados como números de quadro
Não
Texto da direita para a esquerda
Sim

Exemplos

Um arquivo TTML típico e o que se lê dele

Arquivo

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
  <head>
    <styling>
      <style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
    </styling>
    <layout>
      <region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
    </layout>
  </head>
  <body>
    <div>
      <p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
      <p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
    </div>
  </body>
</tt>

O que ele contém

2 cues, 3 lines of text

  00:00:01.000 → 00:00:03.500
    Hello there.   [italic ×1]
    [region="bottom" style="s1"]
  00:00:03.500 → 00:00:06.000
    How are you?
    Fine, thanks.
    [region="bottom"]

Outside the cues:
  prolog     an XML declaration and the namespace bindings, kept as they came in
  styling    1 × <style> — "s1", the colour and weight a paragraph points at by name
  layout     1 × <region> — "bottom", the origin and extent a paragraph points at by name
  resolved   the head is kept as it was written and is not applied here — a paragraph's style="s1" region="bottom" stays an attribute, not a colour or a screen position

O lado direito não é um arquivo convertido: é o que este site lê do lado esquerdo e o ponto de partida de qualquer conversão desse arquivo.

Um arquivo TTML problemático e o que ainda se lê dele

Arquivo

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
    <div begin="00:00:01.000" end="00:00:05.000">
      <p>Inherits its timing from the div, which we do not resolve.</p>
      <p begin="00:00:06.000" end="00:00:07.000">This one has its own timing.</p>
    </div>
    <!-- <p begin="00:00:08.000" end="00:00:09.000">commented out</p> -->
    <div>
      <p begin="00:00:10.000"/>
      <p begin="00:00:11.000" end="00:00:12.000">Last one.</p>
    </div>
  </body>
</tt>

O que ele contém

3 cues, 2 lines of text

  00:00:06.000 → 00:00:07.000
    This one has its own timing.
  00:00:10.000 → 00:00:12.000
    (no text)
  00:00:11.000 → 00:00:12.000
    Last one.

Outside the cues:
  prolog     an XML declaration and the namespace bindings, kept as they came in
  head       none — no <styling> and no <layout>, and no paragraph points at one either
  comments   the commented-out <p> stays a comment, in the place it was written
  divs       the timings on an enclosing <div> are not pushed down onto the paragraphs inside it

Reported while reading — repaired or skipped, never silently:
  1 × paragraphs with no readable begin time of their own (they were skipped — see the note about timing inherited from an enclosing div)
  1 × paragraphs with neither an end time nor a duration of their own (their end times were generated)

Arquivos reais chegam com BOM, fins de linha do Windows, uma linha solta antes de um timecode ou um valor que não dá para ler. Nada disso lança exceção: o que não é entendido é reportado, não descartado em silêncio.

Converter TTML (Timed Text) para outro formato

Cada uma destas roda inteiramente no seu navegador. Os rótulos dizem o que aquela direção custa antes de você abri-la.

Convertendo para este formato

TTML (Timed Text) é um dos formatos de legenda que este site trata, e esta página é a sua referência: o que ele guarda, o que não guarda e uma página para cada formato para o qual dá para converter.

A tabela acima é o retrato completo — não existe lista de recursos escondida. Quando uma linha diz não, é exatamente isso que se perde ao converter para TTML, e cada página de conversão abaixo diz o mesmo antes de você abrir um arquivo.

Todas essas conversões rodam no navegador. Nada é enviado e não há cadastro, o que importa para material sob NDA, prontuário de paciente ou embargo de transmissão.

Perguntas frequentes

O que é um arquivo TTML?

É um documento XML de texto cronometrado usado na transmissão e no streaming: o <head> declara estilos e regiões com nome, e os elementos <p> são as legendas. Perfis como SMPTE-TT e IMSC são construídos sobre ele.

O TTML guarda estilo?

Guarda bastante: a seção <styling> traz estilos nomeados com tts:color, tts:fontWeight e tts:fontFamily, e <layout> traz regiões nomeadas com tts:origin e tts:extent. Um <p> aponta para eles por nome, como style="s1" region="bottom".

O TTML guarda tempo de karaokê?

Não. O arquivo registra quando um cue começa e termina, não quando cada sílaba acende. Por isso converter um ASS com karaokê para TTML perde a marcação por sílaba, e a página de conversão respectiva informa isso.

Como um instante aparece em um arquivo TTML?

Como 00:00:04.126, exato ao milissegundo. O começo pode vir de um deslocamento mais uma duração, como begin="1.5s" dur="2s", ou de um número de quadro como 00:00:07:00 com ttp:frameRate="25".

O que o TTML guarda fora dos cues?

A declaração XML, os namespaces, o <head> inteiro com <styling>, <layout> e <metadata>, além de comentários. Um tempo herdado de um <div> não é resolvido: parágrafos sem begin próprio são pulados e reportados.