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
| Atributo | Valores | Significado |
|---|---|---|
fs | 0–7 | Fonte: 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. |
sz | integer | Tamanho. 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 | #RRGGBB | Cor do texto. O branco puro #FFFFFF costuma ser escrito como #FEFEFE. |
fo | 0–254 | Opacidade do texto. O 255 é descartado — totalmente opaco é 254. |
bc, bo | #RRGGBB, 0–254 | Cor da caixa de fundo e a opacidade dela. bo="0" remove a caixa. |
et | 1–4 | Borda: 1 sombra dura, 2 relevo, 3 brilho, 4 sombra suave. Não existe um tipo contorno — usa-se um brilho escuro no lugar. |
ec | #RRGGBB | Cor da borda. O padrão é #222222 na opacidade do texto. |
of | 0–2 | Deslocamento: 0 subscrito, 1 normal, 2 sobrescrito. |
rb | 0–5 | Anotaçã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
| Atributo | Valores | Significado |
|---|---|---|
ap | 0–8 | Ponto 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. |
ah | 0–100 | Posição horizontal. |
av | 0–100 | Posiçã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
| Atributo | Valores | Significado |
|---|---|---|
ju | 0–2 | Alinhamento: 0 à esquerda, 1 à direita, 2 centralizado. |
pd | 0–3 | Direção de escrita; 0 é horizontal da esquerda para a direita. |
sd | 0–1 | Direção de rolagem, para texto vertical. |
<p> e <s> — linhas e segmentos
| Atributo | Valores | Significado |
|---|---|---|
p.t | ≥ 1 ms | Tempo de início. Alguns players Android ignoram uma linha que começa em 0. |
p.d | > 0 ms | Duração. |
p.wp, p.ws | id | Posição da janela e estilo da janela a usar. |
p.p | id | Caneta para a linha inteira. |
s.p | id | Caneta para um segmento dentro da linha. |
s.t | ≥ 0 ms | Início do segmento, relativo à linha — é assim que funciona o tempo palavra por palavra. |
As esquisitices que custam uma tarde
- Só uma borda por caneta. Contorno e sombra no mesmo texto significam escrever a linha duas vezes, com duas canetas, uma por cima da outra.
- Contorno mais grosso é cópia empilhada. Repita algumas vezes a mesma linha com borda de brilho; não aumente a fonte das cópias de baixo, ou as camadas se descolam na horizontal.
- A opacidade 255 desaparece. Use 254.
- Preenchimento de largura zero. Linhas que misturam vários segmentos estilizados precisam de espaços de largura zero em volta, senão alguns players de celular achatam o estilo na caneta da própria linha.
- Sem animação. Zoom e roll-up são séries de entradas de legenda, com algumas dezenas de milissegundos de intervalo.
- Os ajustes de quem assiste vencem. Quem mudou a aparência das legendas no player vê os ajustes dele, não as suas canetas.
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.
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