O WebVTT é o formato de legenda que um navegador sabe ler. E é o único: coloque um SRT num vídeo HTML5 e absolutamente nada acontece. Nem erro, nem aviso, nem legenda.
A extensão dele é .vtt e, por dentro, ele se parece muito com um SRT. Três coisas mudam: ele carrega um cabeçalho obrigatório, coloca um ponto onde um SRT coloca uma vírgula, e sabe expressar consideravelmente mais que um SRT consegue.
O que tem dentro
WEBVTT
1
00:00:04.120 --> 00:00:06.480
Antes de entrar nos números,
vamos repassar onde estamos.
2
00:00:06.600 --> 00:00:09.000 line:90% align:start
O que eu não esperava
era a queda da segunda semana.
Aquela primeira linha é obrigada a dizer WEBVTT. Se ela não aparecer, se uma marca de ordem dos bytes ficar na frente dela, ou se uma linha em branco vier antes, o navegador se livra do arquivo inteiro.
Daí em diante, os mesmos blocos de sempre. Com duas diferenças que se veem de um golpe de vista: o ponto na frente dos milissegundos, e a possibilidade de pendurar configurações no fim da linha de tempo.
O que ele acrescenta em relação a um SRT
Posição e alinhamento. line:90% desce a legenda, align:start prende ela à esquerda e position:20% desloca ela para o lado. Útil para não cobrir uma legenda que já está na imagem.
Estilo. Um bloco STYLE com CSS de verdade no começo do arquivo, e classes espalhadas pelo texto por meio de <c.narrador>. Cores, tamanhos, sombras.
Quem está falando. Uma etiqueta <v Marta>Bom dia</v> é como a voz é marcada. Os players capazes de reconhecer ela podem pintar de outra cor; os outros passam direto. Numa entrevista ou numa reunião, essa é a fronteira entre um muro de texto e algo legível.
Notas e regiões. Os blocos NOTE guardam comentários que ninguém vê, e REGION delimita áreas da tela com rolagem própria, como as legendas que sobem numa transmissão ao vivo.
Identificadores de fala. Acima da linha de tempo, cada bloco aceita um nome — intro, pergunta-3 — para apontar para ele do JavaScript.
Quando você precisa de um VTT
Toda vez que o vídeo toca dentro de um navegador. Se a sua página tem um <video> com o <track> dele, esse arquivo tem que ser WebVTT:
<video controls>
<source src="reuniao.mp4" type="video/mp4" />
<track src="reuniao.vtt" kind="subtitles" srclang="pt-BR" label="Português" default />
</video>
E o mesmo com os players web de hoje (Video.js, Plyr, Shaka) e com a transmissão HLS, que distribui as legendas como segmentos WebVTT.
Passada a porta do navegador, quase ninguém pede ele: os editores de computador, os players que todo mundo sempre usou e quase todos os formulários de envio ainda esperam um SRT.
Duas coisas que quebram e não são culpa do arquivo
O servidor é obrigado a mandar ele como text/vtt. Entregue como text/plain ou como application/octet-stream, alguns navegadores jogam ele fora. Isso se mexe na configuração do servidor, nunca no arquivo.
E ele tem que vir da mesma origem, ou trazer CORS. Um .vtt hospedado em outro domínio sem o cabeçalho Access-Control-Allow-Origin nunca carrega, por mais que o endereço funcione perfeitamente quando você abre na mão. É a causa número um do clássico «o vídeo toca, as legendas não».
Nenhum dos dois é problema de conteúdo e nenhum deixa erro visível na página. Eles aparecem na aba de rede das ferramentas do navegador, e só se você souber que tem que ir olhar lá.
Converter ele
O caminho do SRT para o VTT é simples: colocar o cabeçalho, pôr um ponto onde estava a vírgula, e escapar aqueles caracteres & e < que um SRT guarda como texto e que o WebVTT confundiria com marcação. O nosso conversor de SRT em VTT resolve os três dentro do seu navegador, sem o arquivo sair dele.
Ao contrário, tudo o que um SRT não sabe dizer fica de fora — a posição, o estilo, as regiões — então o conversor de VTT em SRT descarta isso e transforma as etiquetas de voz em um «Marta:» abrindo a linha, que é como um SRT sabe mostrar. Qual escolher para quê.
Se o que você tem é o vídeo e não as legendas
Envie ele e a gente devolve a transcrição com os minutos, com cada voz separada e com nome, e com um resumo. O VTT cai disso já montado e com as vozes marcadas. Sem conta para começar.