Saltar al contenido principal
SubtitleMatrix

Convertir VTT 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 convierte WebVTT a JSON. Se arrastra un archivo —o se pega el texto— y se recupera un documento JSON plano que describe los mismos subtítulos. La conversión se ejecuta por completo en tu navegador: no se sube nada, no hace falta ninguna cuenta y la página sigue funcionando sin red una vez cargada.

El JSON es el esquema de subtítulos documentado de este sitio, y su forma sigue a propósito el modelo de bloques con el que trabaja todo el conversor: un número de versión y después una entrada por bloque con su identificador, su inicio y su final en milisegundos enteros, y sus líneas como arrays de texto con tramos en línea. Los tiempos siguen en milisegundos enteros en vez de reescribirse como códigos de tiempo, y las líneas de un bloque siguen separadas en lugar de unirse, así que la salida está pensada para que la lea tu propio script y no un reproductor de vídeo.

Casi todo lo que guarda WebVTT se puede expresar con esa forma, y por eso el informe de arriba es corto. Lo que no tiene clave en el JSON es lo que vive fuera de los bloques: la cabecera WEBVTT y cualquier comentario sobre ella, los bloques NOTE, STYLE y REGION, y los ajustes que pueden seguir a una marca de tiempo, como align:start. Todo eso se descarta, no se guarda en un campo libre, y el informe de arriba lo cuenta en tu archivo antes de descargarlo. Los identificadores de bloque son la excepción en la otra dirección: a diferencia de SRT, este esquema tiene un campo id, así que intro sigue siendo intro.

La entrada incómoda no es problema: una cabecera ausente, finales de línea de Windows, una línea suelta antes de una marca de tiempo o una marca de orden de bytes se leen sin quejarse. Se puede arrastrar un archivo o una temporada entera; la cola los procesa en orden, se puede detener a medias y los resultados llegan juntos en un único ZIP.

Ejemplos

Un archivo VTT corriente convertido a JSON

Entrada

WEBVTT

intro
00:00:01.000 --> 00:00:04.000
Hello there.

00:00:04.500 --> 00:00:08.000 align:start position:10%
Second line with <i>italics</i>.

Resultado

{
  "version": 1,
  "cues": [
    {
      "id": "intro",
      "start": 1000,
      "end": 4000,
      "lines": [
        "Hello there."
      ]
    },
    {
      "start": 4500,
      "end": 8000,
      "lines": [
        {
          "text": "Second line with italics.",
          "tags": [
            {
              "kind": "italic",
              "start": 17,
              "end": 24
            }
          ]
        }
      ]
    }
  ]
}

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 incómoda

Entrada

a stray comment line
cue-id-1
00:00:01.000 --> 00:00:02.000
No header, two lines before the timecode.

Resultado

{
  "version": 1,
  "cues": [
    {
      "start": 1000,
      "end": 2000,
      "lines": [
        "No header, two lines before the timecode."
      ]
    }
  ]
}

Este es el tipo de daño que traen los archivos reales: finales de línea mezclados, espacios sueltos, campos vacíos. Si se compara con el ejemplo ordenado de arriba, se ve qué perdona el analizador.

Preguntas frecuentes

¿Cómo es el JSON de salida al convertir VTT a JSON?

Un número de versión y un array de bloques. Cada bloque tiene un id opcional, un inicio y un final en milisegundos enteros, y un array de líneas donde cada línea es o bien una cadena o bien un objeto con el texto y los tramos que lleva —cursivas, negritas y similares— como desplazamientos de inicio y fin. No hay códigos de tiempo que analizar ni centésimas de las que preocuparse.

¿Por qué la lista de lo perdido es tan corta al convertir VTT a JSON?

Porque el esquema se construyó para guardar todo lo que puede llevar el modelo de bloques del conversor, que cubre casi todo lo que tiene WebVTT. Lo que sobra es el material que WebVTT guarda fuera de los bloques: la cabecera, su comentario, los bloques NOTE, STYLE y REGION y los ajustes por bloque.

¿Se conservan los identificadores de los bloques VTT en la salida JSON?

Sí. WebVTT permite un identificador libre como intro o sign-1 antes de un bloque, y este esquema tiene un campo id para él, así que se escribe sin cambios. Convertir a SRT en su lugar renumeraría los bloques, porque el contador de SRT tiene que ser numérico.

¿Cambian los tiempos al convertir VTT a JSON?

No. Ambos lados trabajan en milisegundos enteros, así que 00:00:01.234 pasa a 1234 y vuelve sin redondeos ni desplazamientos.

¿Es seguro convertir una transcripción de VTT a JSON aquí?

Sí. El análisis y la escritura ocurren en el navegador, así que el archivo que se arrastra aquí nunca se envía a un servidor, algo que importa más de lo habitual en este par porque JSON es lo que consume un script o una tubería, y esas transcripciones suelen ser justo las que no pueden salir del edificio.

Herramientas relacionadas