Convertir SSA a JSON
O pega el texto de los subtítulos
Qué cambia esta conversión
1 cosa se descarta o requiere una decisión
- Contenido específico del formato
contenido que el formato de origen guarda fuera de sus bloques (bloques que no son cue, texto de cabecera, ajustes por bloque, eventos comentados): el formato de destino no tiene sitio para él
Esta lista proviene de la matriz de capacidades de estos dos formatos, no del archivo concreto que has cargado. Un archivo específico puede perder más si usa características que el formato permite pero que la matriz no modela.
Convierte SSA a JSON y obtén una estructura que puedes leer desde código. Arrastra un archivo o pega el texto; la conversión se ejecuta entera en tu navegador, sin subir nada y sin cuenta.
Los dos formatos no guardan lo mismo, y la diferencia no es cosmética: el contenido propio del formato no tiene dónde ir en JSON. La lista de arriba sale de lo que cada formato puede expresar, no de tu archivo, así que es la misma respuesta antes de cargar nada.
Un archivo está bien y una temporada completa también: la cola los procesa en orden y los resultados se descargan juntos en un único ZIP.
Ejemplos
Un archivo SSA típico convertido a 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
Resultado
{
"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"
}
]
}
En esta salida solo se pierde el contenido propio del formato. Todo lo demás coincide línea por línea.
La misma conversión con una entrada incómoda
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.Resultado
{
"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"
}
]
}
Es el tipo de daño que traen los archivos reales: finales de línea mezclados, espacios sueltos y campos vacíos. Compáralo con el ejemplo ordenado de arriba para ver qué perdona el analizador.
Preguntas frecuentes
¿Qué ocurre con `[Script Info]`, las líneas `Comment:` y las fuentes incrustadas de SSA al convertir a JSON?
Sobrevive más de lo que podrías esperar: el título pasa, y también la tabla de estilos SSA completa —cada columna, incluidas las que este sitio no modela, más la fuente, el tamaño, el color y las marcas de negrita y cursiva ya interpretados—. Lo que JSON no tiene dónde poner es el resto de `[Script Info]` (`PlayResX`, `WrapStyle`, `Collisions` y similares), las líneas de evento que no son `Dialogue:` (`Comment:`, `Picture:`, `Sound:`) y todo lo incrustado en `[Fonts]` o `[Graphics]`. Eso se descarta.
¿Cómo se ve la salida cuando SSA se convierte en JSON?
Como JSON: una lista de objetos de cue, cada uno con su `id`, su `start` y su `end`, dentro de un documento que también lleva el título y la tabla de estilos. Cada cue SSA se convierte en un cue JSON, en el mismo orden y con el mismo texto.
¿Los tiempos SSA son exactos en el archivo JSON?
Sí, al milisegundo, que es la precisión máxima de ambos formatos. SSA escribe un instante como `0:00:04.13` y JSON escribe ese mismo instante como `4126`; nada se redondea ni se desplaza entre los dos, y un cue que estaba 2,9 segundos en pantalla sigue estándolo.
¿Cómo sale un cue SSA de dos líneas en JSON?
Como dos entradas en el arreglo `lines` del cue. El emparejamiento sobrevive: las dos líneas SSA siguen perteneciendo a un solo subtítulo en la salida JSON, y el reproductor las muestra juntas.
¿Los cues SSA conservan el orden en la salida JSON?
Sí, y de paso se ordenan por hora de inicio: primero el más temprano, que es como los espera cada formato de este sitio y como los leen los reproductores. Si tu archivo SSA listaba los cues desordenados, la salida JSON los devuelve al orden; es un cambio en la estructura del archivo, no en su contenido, y es deliberado.
¿Puedo convertir el JSON de vuelta a SSA?
Sí, y tiene su propia lista: convertir JSON a SSA pierde precisión. Esa lista es distinta de la de arriba porque los dos formatos conservan cosas diferentes.
¿La salida JSON conserva la codificación del archivo SSA?
No: la salida es UTF-8, con finales de línea de Unix y sin marca de orden de bytes, sea cual sea la codificación del archivo SSA. Un archivo en UTF-16 o en una codificación de un byte de Windows se decodifica al entrar (el panel de resultados lo indica cuando ocurre); lo que sale es siempre el mismo JSON en UTF-8.