Saltar al contenido principal
SubtitleMatrix

Convertir SMI 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.

Esta página pasa un archivo SAMI (SMI) a JSON. Arrastra el archivo o pega el texto y recibes el documento; la conversión corre en el navegador, sin subir nada y sin registrarte.

Se pierde una sola cosa: el contenido propio de SAMI. El bloque <STYLE> de la cabecera, el <TITLE>, los atributos Class=ENCC y los bloques <P>&nbsp; que vaciaban la pantalla quedan fuera del modelo de bloques y no tienen representación en JSON; el informe de pérdidas de arriba los cuenta. Todo lo demás se conserva: cada bloque es un objeto con start y end en milisegundos (Start=4126 pasa a 4126), las líneas van en un arreglo lines y el orden se mantiene.

Da igual si es un archivo o una temporada entera: la cola los procesa en orden y entrega todos los resultados en un solo ZIP.

Ejemplos

Un archivo SMI típico convertido a JSON

Entrada

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial; }
.ENCC { Name: English; lang: en-US; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P Class=ENCC>Hello there.
<SYNC Start=3000>
<P Class=ENCC>&nbsp;
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

Resultado

{
  "version": 1,
  "cues": [
    {
      "start": 1000,
      "end": 3000,
      "lines": [
        "Hello there."
      ]
    },
    {
      "start": 3500,
      "end": 6000,
      "lines": [
        "How are you?",
        "Fine, thanks."
      ]
    }
  ]
}

En esta salida se pierde: contenido propio del formato. Todo lo demás coincide línea por línea.

La misma conversión con una entrada difícil

Entrada

<SAMI>
<HEAD>
<TITLE>Episode 1</TITLE>
<STYLE TYPE="text/css">
<!--
.ENCC { Name: English; }
-->
</STYLE>
</HEAD>
<BODY>
<sync start="00:00:02,500">
<P Class=ENCC>Line one<br>Line two
<sync start=9000>
<P Class=ENCC>Tom &amp; Jerry
<SYNC Start=12000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

Resultado

{
  "version": 1,
  "cues": [
    {
      "start": 2500,
      "end": 9000,
      "lines": [
        "Line one",
        "Line two"
      ]
    },
    {
      "start": 9000,
      "end": 12000,
      "lines": [
        "Tom &amp; Jerry"
      ]
    }
  ]
}

Es el tipo de daño 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é pasa con el bloque STYLE, el TITLE y los Class de SAMI al convertir a JSON?

No se escriben en la salida: el modelo de bloques guarda tiempos, líneas y estilos en línea, y esas tres cosas son metadatos del documento SAMI, no de un bloque. El JSON no tiene un campo donde meterlos, así que se cuentan como contenido propio del formato perdido, igual que los bloques <P>&nbsp; que vaciaban la pantalla.

¿Cómo se ve la salida cuando un SAMI se convierte en JSON?

Como JSON: un arreglo de objetos de bloque, cada uno con su id, su start y su end. Cada bloque SMI se convierte en un bloque JSON, en el mismo orden y con el mismo texto.

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

Sí, al milisegundo, que es el máximo detalle de ambos formatos. SAMI escribe un instante como Start=4126 y JSON lo escribe como 4126; no hay redondeo ni desplazamiento entre los dos, y un bloque que estaba en pantalla 2,5 s sigue estándolo.

¿Qué ocurre con un bloque SMI de dos líneas al pasar a JSON?

Se convierte en dos entradas del arreglo lines del bloque. La pareja se mantiene: el <br> del SAMI sigue siendo un salto de línea duro en la salida y el reproductor las muestra juntas.

¿Se conserva el orden de los bloques SMI en la salida JSON?

Sí, y de paso se ordenan por hora de inicio: primero el más temprano, que es lo que esperan todos los formatos de este sitio y cómo los leen los reproductores. Si tu archivo SAMI traía los bloques 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 resultante de vuelta a SAMI?

Sí, y esa dirección tiene su propia lista: al convertir JSON a SMI se pierden el karaoke, los estilos y las posiciones. Esa lista es distinta de la de arriba porque los dos formatos guardan cosas diferentes.

¿La salida JSON mantiene la codificación del archivo SMI?

No: la salida es UTF-8, con finales de línea Unix y sin marca de orden de bytes, sea cual sea la codificación del archivo SMI. Un archivo que llega en UTF-16 o en una codificación mono 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.

Herramientas relacionadas