Rainbow Captions Blog Baixar

Formato .ytt:uma referência de trabalho

Uma referência do formato de texto sincronizado do YouTube — o XML por trás das legendas estilizadas, salvo como .ytt e conhecido dentro do YouTube como formato 3, ou SRV3. Tudo o que vem abaixo é o que o formato aceita na prática, inclusive os valores que parecem razoáveis e são descartados em silêncio.

O desenho de um arquivo

<timedtext format="3">
  <head>
    <pen id="1" b="1" fc="#FEFEFE" fo="254" et="4" ec="#000000"/>
    <wp id="0" ap="7" ah="50" av="90"/>
    <ws id="0" ju="2"/>
  </head>
  <body>
    <p t="1000" d="1600" wp="0" ws="0" p="1">Today we fix that.</p>
  </body>
</timedtext>

O cabeçalho declara os estilos reutilizáveis: pen para o texto, wp para onde fica a janela da legenda, ws para como o texto se alinha dentro dela. O corpo é a lista de linhas de legenda, cada uma apontando por id para os estilos que usa.

<pen> — o estilo do texto

AtributoValoresSignificado
fs0–7Fonte: 0 sans padrão, 1 Courier New, 2 Times New Roman, 3 Lucida Console, 5 Comic Sans MS, 6 Monotype Corsiva, 7 Carrois Gothic SC. O 4 não é definido.
szintegerTamanho. 100 é o padrão do YouTube; a escala não é linear (veja abaixo).
b, i, u"1"Negrito, itálico, sublinhado. Só são escritos quando verdadeiros.
fc#RRGGBBCor do texto. O branco puro #FFFFFF costuma ser escrito como #FEFEFE.
fo0–254Opacidade do texto. O 255 é descartado — totalmente opaco é 254.
bc, bo#RRGGBB, 0–254Cor da caixa de fundo e a opacidade dela. bo="0" remove a caixa.
et1–4Borda: 1 sombra dura, 2 relevo, 3 brilho, 4 sombra suave. Não existe um tipo contorno — usa-se um brilho escuro no lugar.
ec#RRGGBBCor da borda. O padrão é #222222 na opacidade do texto.
of0–2Deslocamento: 0 subscrito, 1 normal, 2 sobrescrito.
rb0–5Anotação ruby (furigana): 0 nenhuma, 1 base, 2 parênteses, 4 texto antes, 5 texto depois.

A fórmula do tamanho

O valor em sz não é o tamanho que você quer dizer. Ele anda quatro vezes mais rápido que a escala real:

sz    = (1 + (scale − 1) × 4) × 100
scale = 1 + (sz / 100 − 1) / 4

Então sz="100" é 100%, sz="200" é 125% e sz="50" fica em torno de 87%. O tamanho padrão de legenda do YouTube é mais ou menos 4,6–4,8% da altura do quadro, que é o tamanho em que sz="100" é renderizado.

<wp> — a posição da janela

AtributoValoresSignificado
ap0–8Ponto de ancoragem: 0 superior esquerdo, 1 superior central, 2 superior direito, 3 meio esquerdo, 4 centro, 5 meio direito, 6 inferior esquerdo, 7 inferior central, 8 inferior direito.
ah0–100Posição horizontal.
av0–100Posição vertical.

As posições não são porcentagens cruas do quadro. O YouTube as mapeia para uma área segura:

screen% = value × 0.96 + 2

av="0" cai a 2% do topo e av="100", a 98%. Um conversor no sentido inverso usa value = (screen% − 2) / 0.96.

<ws> — o estilo da janela

AtributoValoresSignificado
ju0–2Alinhamento: 0 à esquerda, 1 à direita, 2 centralizado.
pd0–3Direção de escrita; 0 é horizontal da esquerda para a direita.
sd0–1Direção de rolagem, para texto vertical.

<p> e <s> — linhas e segmentos

AtributoValoresSignificado
p.t≥ 1 msTempo de início. Alguns players Android ignoram uma linha que começa em 0.
p.d> 0 msDuração.
p.wp, p.wsidPosição da janela e estilo da janela a usar.
p.pidCaneta para a linha inteira.
s.pidCaneta para um segmento dentro da linha.
s.t≥ 0 msInício do segmento, relativo à linha — é assim que funciona o tempo palavra por palavra.

As esquisitices que custam uma tarde

De onde vêm estas informações

O YouTube não documenta o formato publicamente. O comportamento de referência vem do YTSubConverter, o conversor open source cujo código-fonte é a especificação de fato, conferido com faixas de legenda reais baixadas do YouTube e com o que os players de fato renderizam. O Rainbow Captions escreve o mesmo formato — você pode montar as faixas na mão com as tabelas acima ou deixar o app cuidar das camadas, das proteções e do tempo palavra por palavra.

Deixe o app escrever o XML

O Rainbow Captions cuida das canetas, dos contornos em camadas, dos caracteres de proteção e do tempo palavra por palavra, em 170 idiomas. Download grátis e os 10 primeiros idiomas de graça.

Baixar para Mac