Converter VTT para JSON
Ou cole o texto da legenda
O que esta conversão altera
1 coisa é descartada ou precisa de uma decisão
- Conteúdo específico do formato
conteúdo que o formato de origem guarda fora de seus blocos (blocos que não são cue, texto de cabeçalho, configurações por bloco, eventos comentados) — o formato de destino não tem lugar para ele
Esta lista vem da matriz de capacidades destes dois formatos, não do arquivo específico que você carregou. Um arquivo específico pode perder mais se usar recursos que o formato permite mas a matriz não modela.
Esta página transforma um WebVTT no esquema JSON deste site: um número de versão e uma lista de blocos, cada um com identificador, início e fim em milissegundos inteiros e as linhas separadas.
A conversão é quase total porque o esquema foi desenhado a partir do mesmo modelo de bloco que o WebVTT usa. Os tempos deixam de ser carimbos e viram números — 00:00:04.126 vira 4126 — e as linhas continuam separadas em vez de virarem uma string com quebras. Os identificadores do VTT, aquela palavra antes do carimbo, sobrevivem no campo id, coisa que uma origem SRT não permite.
Fica de fora o que vive fora dos blocos: o cabeçalho WEBVTT e seu comentário, os blocos NOTE, STYLE e REGION e os ajustes de carimbo. Eles não recebem um campo reserva nem são espremidos num extra. Um arquivo ou uma temporada inteira, no navegador.
Exemplos
Um arquivo VTT comum, convertido para JSON
Entrada
WEBVTT
intro
00:00:01.000 --> 00:00:04.000
Hello there.
00:00:04.500 --> 00:00:08.000 align:start position:10%
Second line with <i>italics</i>.
Saída
{
"version": 1,
"cues": [
{
"id": "intro",
"start": 1000,
"end": 4000,
"lines": [
"Hello there."
]
},
{
"start": 4500,
"end": 8000,
"lines": [
{
"text": "Second line with italics.",
"tags": [
{
"kind": "italic",
"start": 17,
"end": 24
}
]
}
]
}
]
}
Descartado nesta saída apenas o que é sintaxe exclusiva do WebVTT. O resto confere linha por linha.
A mesma conversão com uma entrada problemática
Entrada
a stray comment line
cue-id-1
00:00:01.000 --> 00:00:02.000
No header, two lines before the timecode.
Saída
{
"version": 1,
"cues": [
{
"start": 1000,
"end": 2000,
"lines": [
"No header, two lines before the timecode."
]
}
]
}
Cabeçalho ausente, fins de linha misturados e uma linha solta antes do carimbo: compare com o exemplo organizado acima para ver o que o analisador perdoa.
Perguntas frequentes
Que diferença há entre o JSON gerado a partir de VTT e o gerado a partir de SRT?
A mesma que há entre as duas origens: o esquema tem campo id, e o WebVTT pode trazer um identificador por bloco, então ele é preservado. Um arquivo SRT não tem identificador e o campo fica sem valor.
O que não cabe no JSON a partir do VTT?
O documento em volta dos blocos: cabeçalho, NOTE, STYLE, REGION e os ajustes de carimbo como align:start. O esquema descreve blocos, não a folha de estilo nem a geometria da tela.
Como os tempos ficam no JSON?
Como inteiros em milissegundos. 00:00:04.126 vira 4126 e um bloco de 2,9 s a partir dali termina em 7026; somar e comparar passa a ser aritmética simples, sem decodificar carimbo.
As linhas de um bloco ficam juntas?
Ficam, como itens de um arranjo. Uma linha sem estilo é uma string; uma linha com ênfase é um objeto com text e tags, e cada tag guarda o tipo e a faixa de caracteres que cobre.
O JSON resultante abre num player?
Não, e não é o objetivo: player nenhum lê este esquema. Ele existe para scripts, comparação com diff e controle de versão; para reproduzir, converta de volta a um formato de legenda.
Por que usar JSON em vez de CSV para processar legendas?
Porque o JSON preserva a estrutura: linhas separadas, tags como intervalos e identificadores. O CSV achata tudo em três colunas de texto, e você teria de reconstruir essa estrutura no seu código.