Convertir JSON a TTML
O pega el texto de los subtítulos
Qué cambia esta conversión
1 cosa se descarta o requiere una decisión
- 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 TTML. Arrastra un archivo —o pega el texto— y recibes la versión TTML. La conversión corre entera dentro del navegador: no se sube nada y no se pide cuenta.
Los dos formatos no guardan lo mismo, y la diferencia no es cosmética: el karaoke no tiene dónde ir en TTML. La lista de arriba procede de lo que cada formato puede expresar, no de tu archivo, así que es la misma respuesta antes de cargar nada.
Un archivo basta, y una temporada completa también: la cola los procesa en orden y los resultados llegan juntos como un único ZIP.
Ejemplos
Un archivo JSON típico, convertido a TTML
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
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:00.000" end="00:00:02.000">Hello world.<br/>Second line.</p>
<p begin="00:00:02.500" end="00:00:04.000">Plain line.<br/><span tts:fontStyle="italic">Styled</span> line.</p>
<p begin="00:00:04.500" end="00:00:06.000">Roger: I am here.</p> </body>
</tt>
Se pierde 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
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:00.000" end="00:00:01.000">First.</p>
<p begin="00:00:01.000" end="00:00:02.000">Second.</p>
<p begin="00:00:02.000" end="00:00:03.000">Third.</p> </body>
</tt>
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é pasa con el karaoke al convertir JSON a TTML?
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 TTML 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 TTML.
¿Qué aspecto tiene la salida cuando JSON se convierte en TTML?
Como TTML: sin números de bloque; cada subtítulo es un elemento `<p>` con atributos `begin` y `end`, anidado en un `<body>` (y normalmente en un `<div>`), con una declaración XML encima de todo el documento. Cada bloque JSON se convierte en un bloque TTML, en el mismo orden y con el mismo texto.
¿Son exactos los tiempos de JSON en el archivo TTML?
Sí, al milisegundo, que es lo más fino que llega cualquiera de los dos formatos. JSON escribe un instante como `4126` y TTML escribe el mismo instante como `00:00:04.126`; nada se redondea ni se desplaza, y un bloque que estaba en pantalla 2,9 segundos sigue estándolo.
¿Cómo sale en TTML un bloque JSON de dos líneas?
Como dos líneas con un `<br/>` entre ellas, que es como TTML 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 TTML, y el reproductor las muestra juntas.
¿Mantienen los bloques JSON su orden en la salida TTML?
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 TTML los devuelve a su orden; eso cambia la estructura del archivo, no su contenido, y es deliberado.
¿Puedo volver de TTML a JSON?
Sí, y esa dirección tiene su propia lista: convertir TTML 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 TTML 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 TTML en UTF-8.