Saltar al contenido principal
SubtitleMatrix

Convertir JSON a SMI

O pega el texto de los subtítulos

Qué cambia esta conversión

2 cosas se descartan o requieren una decisión

  • Estilo

    todo el estilo excepto negrita y cursiva (color, contorno, sombra, márgenes)

  • Karaoke

    la sincronización karaoke (resaltado por sílaba)

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 SMI. Arrastra un archivo —o pega el texto— y recibes la versión SMI. La conversión se ejecuta íntegramente en el navegador: no se sube nada y no se necesita cuenta.

Los dos formatos no guardan lo mismo, y la diferencia no es cosmética: el estilo y el karaoke no tienen dónde ir en SMI. La lista de arriba refleja lo que cada formato puede expresar, no lo que contiene tu archivo, así que no varía con lo que cargues.

Un archivo es suficiente, 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 JSON típico, convertido a SMI

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

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>Hello world.<br>Second line.
<SYNC Start=2000>
<P>&nbsp;
<SYNC Start=2500>
<P>Plain line.<br><i>Styled</i> line.
<SYNC Start=4000>
<P>&nbsp;
<SYNC Start=4500>
<P>Roger: I am here.
<SYNC Start=6000>
<P>&nbsp;
</BODY>
</SAMI>

Se pierden el estilo y el karaoke. 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

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>First.
<SYNC Start=1000>
<P>&nbsp;
<SYNC Start=1000>
<P>Second.
<SYNC Start=2000>
<P>&nbsp;
<SYNC Start=2000>
<P>Third.
<SYNC Start=3000>
<P>&nbsp;
</BODY>
</SAMI>

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

¿Qué estilo sobrevive de JSON a SMI?

El énfasis, escrito en el texto como etiquetas: la negrita, la cursiva, el subrayado y un color salen como `<b>`, `<i>`, `<u>` y `<font color="…">`, que los navegadores aplican. Lo que el archivo SMI no llevará es la tabla de estilos en la que se apoya JSON: la fuente, su tamaño, el contorno, la sombra y los márgenes se van, y la página que incrusta los subtítulos los estiliza con su propio CSS.

¿Qué ocurre con el karaoke al convertir JSON a SMI?

El tiempo se va; las palabras quedan. El karaoke vive en los tramos de karaoke que lleva un bloque JSON, que marcan cuándo se ilumina cada sílaba, y SMI no tiene forma de registrar un instante dentro de una línea, así que las marcas desaparecen y las sílabas llegan como texto normal de SMI.

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

Como SMI: sin números de bloque y sin línea de código de tiempo; cada bloque es una etiqueta `<SYNC Start=…>` con su texto en un `<P>` debajo, y —como un SYNC reemplaza lo que hubiera en pantalla— un bloque `<P>&nbsp;` justo después que deja la pantalla vacía. Cada bloque JSON se convierte en un bloque SMI, en el mismo orden y con el mismo texto.

¿Son exactos los tiempos de JSON en el archivo SMI?

Sí, al milisegundo, que es lo más fino que llega cualquiera de los dos formatos. JSON escribe un instante como `4126` y SMI escribe el mismo instante como `Start=4126`; nada se redondea ni se desplaza, y un bloque que estaba en pantalla 2,9 segundos sigue estándolo.

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

Como dos líneas con un `<br>` entre ellas, que es como SAMI 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 SMI, y el reproductor las muestra juntas.

¿Mantienen los bloques JSON su orden en la salida SMI?

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 SMI los devuelve a su orden; eso cambia la estructura del archivo, no su contenido, y es deliberado.

¿Puedo convertir el SMI de vuelta a JSON?

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

¿Conserva la salida SMI 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 SMI en UTF-8.

Herramientas relacionadas