Saltar al contenido principal
SubtitleMatrix

Convertir JSON a ASS

O pega el texto de los subtítulos

Qué cambia esta conversión

1 cosa se descarta o requiere una decisión

  • Precisión

    la precisión de los tiempos: el reloj del resultado es más grueso, así que cada marca de tiempo se redondea al 10 ms más cercano

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.

Esta página convierte JSON en ASS. Arrastra un archivo —o pega el texto— y recibes la versión ASS. La conversión se ejecuta por completo en el navegador, así que no se sube nada y no hace falta cuenta.

Los dos formatos no guardan lo mismo, y la diferencia no es cosmética: la precisión no tiene dónde ir en ASS. 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 entera también: la cola los procesa en orden y los resultados se descargan juntos en un único ZIP.

Ejemplos

Un archivo JSON típico, convertido a ASS

Entrada

{
  "version": 1,
  "title": "Fixture: typical",
  "fps": 25,
  "styles": {
    "Default": {
      "name": "Default",
      "fontFamily": "Arial",
      "fontSize": 20,
      "primaryColor": "#FFFFFF",
      "bold": false,
      "italic": false
    }
  },
  "generator": "subtitlematrix fixtures",
  "cues": [
    {
      "id": "1",
      "start": 0,
      "end": 2000,
      "lines": [
        "Hello world.",
        "Second line."
      ],
      "style": "Default",
      "position": {
        "x": 100,
        "y": 200,
        "align": "center"
      }
    },
    {
      "id": "2",
      "start": 2500,
      "end": 4000,
      "lines": [
        "Plain line.",
        {
          "text": "Styled line.",
          "tags": [
            {
              "kind": "italic",
              "start": 0,
              "end": 6
            }
          ]
        }
      ]
    },
    {
      "id": "3",
      "start": 4500,
      "end": 6000,
      "lines": [
        "Roger: I am here."
      ],
      "speaker": "Roger"
    }
  ]
}

Resultado

[Script Info]
Title: Fixture: typical
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,,,,0,0,,,,,,,,,,,,,,

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:02.00,Default,,0,0,0,,{\pos(100,200)}Hello world.\NSecond line.
Dialogue: 0,0:00:02.50,0:00:04.00,Default,,0,0,0,,Plain line.\N{\i1}Styled{\i0} line.
Dialogue: 0,0:00:04.50,0:00:06.00,Default,,0,0,0,,Roger: I am here.

Se pierde la precisión. El resto coincide línea por línea.

La misma conversión con una entrada difícil

Entrada

[
    { "start": 0, "end": 1000, "lines": ["First."] },
    { "start": 1000, "end": 2000, "text": "Second." },
    "not an object",
    { "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]

Resultado

[Script Info]
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,First.
Dialogue: 0,0:00:01.00,0:00:02.00,Default,,0,0,0,,Second.
Dialogue: 0,0:00:02.00,0:00:03.00,Default,,0,0,0,,Third.

Estos son los daños que traen los archivos reales: finales de línea mezclados, espacios sueltos, campos vacíos. Compáralo con el ejemplo limpio de arriba para ver qué perdona el analizador.

Preguntas frecuentes

¿Por qué cambian los tiempos al convertir JSON a ASS?

ASS guarda el tiempo como `0:00:04.13` donde JSON lo guarda como `4126` —centésimas frente a milésimas—, así que cada código se redondea a los 10 ms más cercanos: 00:00:04,126 sale como 4,13 segundos. Nada se estira ni se reordena y ningún bloque se mueve más de 5 ms, pero si vas a alinear estos subtítulos con otro archivo, ese es el punto donde la conversión deja de ser exacta.

¿Qué aspecto tiene la salida cuando JSON se convierte en ASS?

Como ASS: sin números de bloque; cada subtítulo es una línea `Dialogue:` dentro de la sección `[Events]`, con un campo de capa donde SRT guarda el número. Cada bloque JSON se convierte en un bloque ASS, en el mismo orden y con el mismo texto.

¿Cómo sale en ASS un bloque JSON de dos líneas?

Como dos líneas con `\N` entre ellas, que es como ASS escribe un salto de línea duro. La pareja se mantiene: las dos líneas JSON siguen perteneciendo a un mismo subtítulo en la salida ASS, y el reproductor las muestra juntas.

¿Conservan los bloques JSON su orden en la salida ASS?

Sí, y de paso se ordenan por hora de inicio: primero los más tempranos, que es lo que esperan todos los formatos de este sitio y cómo los leen los reproductores. Si tu archivo JSON traía los bloques desordenados, la salida ASS los devuelve a su orden; eso cambia la estructura del archivo, no su contenido, y es deliberado.

¿Puedo convertir el ASS de vuelta a JSON?

Sí, y esa dirección tiene su propia lista: convertir ASS en JSON pierde el contenido propio del formato. La lista es distinta de la de arriba porque los dos formatos guardan cosas distintas.

¿Mantiene la salida ASS la codificación del archivo JSON?

No: la salida es UTF-8, con finales de línea Unix y sin marca de orden de bytes, sea cual sea la que usara el archivo JSON. Un archivo que llega en UTF-16 o en una codificación Windows de un solo byte se decodifica a la entrada (el panel de resultados lo indica cuando ocurre); lo que sale es siempre el mismo ASS en UTF-8.

Herramientas relacionadas