Converter SSA 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 converte SSA em JSON. Arraste um arquivo — ou cole o texto — e receba de volta a versão JSON. A conversão roda inteiramente no seu navegador, então nada é enviado e não é preciso criar conta.
Os dois formatos não guardam as mesmas coisas, e a diferença não é cosmética: conteúdo específico do formato não tem onde ficar no JSON, que representa cada legenda como um objeto com `start`, `end` e `lines`. A lista acima vem do que cada formato consegue expressar, não do seu arquivo, então a resposta é a mesma antes de você carregar qualquer coisa.
Um arquivo só está ótimo, e uma temporada inteira também: a fila processa na ordem, você pode parar no meio e os resultados descem juntos num único ZIP.
Exemplos
Um arquivo SSA típico, convertido para JSON
Entrada
[Script Info]
Title: Example SSA
ScriptType: v4.00
Collisions: Normal
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\i1}Italic{\i0} line.
Dialogue: Marked=0,0:00:09.00,0:00:12.00,Default,,0,0,0,,Two\Nlines
Saída
{
"version": 1,
"title": "Example SSA",
"styles": {
"Default": {
"name": "Default",
"Name": "Default",
"Fontname": "Arial",
"Fontsize": "20",
"PrimaryColour": "&H00FFFFFF",
"SecondaryColour": "&H000000FF",
"TertiaryColour": "&H00000000",
"BackColour": "&H00000000",
"Bold": "0",
"Italic": "0",
"BorderStyle": "1",
"Outline": "2",
"Shadow": "2",
"Alignment": "2",
"MarginL": "10",
"MarginR": "10",
"MarginV": "10",
"AlphaLevel": "0",
"Encoding": "1",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#ffffff",
"bold": false,
"italic": false
}
},
"cues": [
{
"start": 1000,
"end": 4000,
"lines": [
"Hello there."
],
"style": "Default"
},
{
"start": 5000,
"end": 8000,
"lines": [
{
"text": "Italic line.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 6
}
]
}
],
"style": "Default"
},
{
"start": 9000,
"end": 12000,
"lines": [
"Two",
"lines"
],
"style": "Default"
}
]
}
Perdido nesta saída: conteúdo específico do formato. Todo o resto bate linha por linha.
A mesma conversão num arquivo problemático
Entrada
[Script Info]
Title: Dirty SSA
ScriptType: v4.00
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: Marked=0,0:00:00.00,0:00:01.00,Default,,0,0,0,,not a subtitle
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,{\b1}Bold{\b0} and {\u1}underlined{\u0}.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,A soft\nbreak and a {\p1}mystery{\p0} code.Saída
{
"version": 1,
"title": "Dirty SSA",
"styles": {
"Default": {
"name": "Default",
"Name": "Default",
"Fontname": "Arial",
"Fontsize": "20",
"PrimaryColour": "&H00FFFFFF",
"SecondaryColour": "&H000000FF",
"TertiaryColour": "&H00000000",
"BackColour": "&H00000000",
"Bold": "0",
"Italic": "0",
"BorderStyle": "1",
"Outline": "2",
"Shadow": "2",
"Alignment": "2",
"MarginL": "10",
"MarginR": "10",
"MarginV": "10",
"AlphaLevel": "0",
"Encoding": "1",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#ffffff",
"bold": false,
"italic": false
}
},
"cues": [
{
"start": 1000,
"end": 4000,
"lines": [
{
"text": "Bold and underlined.",
"tags": [
{
"kind": "bold",
"start": 0,
"end": 4
},
{
"kind": "underline",
"start": 9,
"end": 19
}
]
}
],
"style": "Default"
},
{
"start": 5000,
"end": 8000,
"lines": [
"A soft",
"break and a {\\p1}mystery{\\p0} code."
],
"style": "Default"
}
]
}
É o tipo de dano que arquivos reais têm — fim de linha misturado, espaço solto, campo vazio. Compare com o exemplo organizado acima para ver o que o analisador perdoa.
Perguntas frequentes
O que acontece com o `[Script Info]`, as linhas `Comment:` e as fontes embutidas do SSA no JSON?
Sobrevive mais do que se espera: o título atravessa, e a tabela de estilos SSA inteira também — cada coluna, inclusive as que este site não modela, mais a fonte, o tamanho, a cor e as marcas de negrito e itálico já interpretados. O que o JSON não tem onde guardar é o resto do `[Script Info]` (`PlayResX`, `WrapStyle`, `Collisions` e afins), as linhas de evento que não são `Dialogue:` (`Comment:`, `Picture:`, `Sound:`) e qualquer coisa embutida em `[Fonts]` ou `[Graphics]`. Essas são descartadas.
Como fica a saída quando SSA vira JSON?
Como JSON: um arranjo de objetos de bloco, cada um com o próprio `id`, `start` e `end`. Cada bloco SSA vira um bloco JSON, na mesma ordem e com o mesmo texto.
Os tempos SSA ficam exatos no arquivo JSON?
Sim, ao milissegundo — que é o máximo dos dois formatos. O SSA escreve um instante como `0:00:04.13` e o JSON escreve o mesmo instante como `4126`; nada é arredondado nem deslocado entre os dois, e um bloco que ficou 2,9 segundos na tela continua com 2,9 segundos.
Como sai um bloco SSA de duas linhas no JSON?
Como duas entradas no arranjo `lines` do bloco. O par sobrevive — as duas linhas SSA ainda pertencem a uma legenda só na saída JSON, e o reprodutor mostra as duas juntas.
Os blocos SSA mantêm a ordem na saída JSON?
Mantêm, e são ordenados pelo horário de início no caminho — o mais cedo primeiro, que é como todo formato daqui espera e como os reprodutores leem. Se o seu arquivo SSA listava os blocos fora de sequência, a saída JSON os põe em ordem; isso muda a estrutura do arquivo, não o conteúdo, e é de propósito.
Dá para converter o JSON de volta para SSA?
Dá, e essa direção tem lista própria: converter JSON para SSA perde precisão. A lista é diferente da acima porque os dois formatos guardam coisas diferentes.
A saída JSON preserva a codificação do arquivo SSA?
Não — a saída é UTF-8, com fim de linha Unix e sem marca de ordem de bytes, seja qual for a codificação do arquivo SSA. Um arquivo em UTF-16 ou numa codificação Windows de um byte é decodificado na entrada (o painel de resultado avisa quando isso acontece); o que sai é sempre o mesmo JSON em UTF-8.