Convertir TTML a ASS
O pega el texto de los subtítulos
Qué cambia esta conversión
2 cosas se descartan o requieren 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
- 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 TTML en ASS. Basta con arrastrar un archivo —o pegar el texto— para recibir 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 y el contenido propio del formato no tienen 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 TTML típico, convertido a ASS
Entrada
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
<head>
<styling>
<style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
</styling>
<layout>
<region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
</layout>
</head>
<body>
<div>
<p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
<p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
</div>
</body>
</tt>
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:01.00,0:00:03.50,Default,,0,0,0,,Hello {\i1}there{\i0}.
Dialogue: 0,0:00:03.50,0:00:06.00,Default,,0,0,0,,How are you?\NFine, thanks.
Se pierden la precisión y el contenido propio del formato. El resto coincide línea por línea.
La misma conversión con una entrada difícil
Entrada
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
ttp:frameRate="25" xml:lang="en">
<body>
<div>
<p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
<p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
<p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
<p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom & Jerry.</p>
</div>
</body>
</tt>
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:01.50,0:00:03.50,Default,,0,0,0,,Loaded from an offset and a duration.
Dialogue: 0,0:00:04.00,0:00:06.50,Default,,0,0,0,,A coarser clock spelling.
Dialogue: 0,0:00:07.00,0:00:08.48,Default,,0,0,0,,Frames, at 25fps.
Dialogue: 0,0:00:09.00,0:00:11.00,Default,,0,0,0,,{\c&H000000FF&}Half-open{\c} and Tom & Jerry.
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é se han movido los tiempos al pasar de TTML a ASS?
ASS guarda el tiempo como `0:00:04.13` donde TTML lo guarda como `00:00:04.126` —centésimas frente a milésimas—, así que cada código de tiempo 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 único punto donde esta conversión deja de ser exacta.
¿Qué pasa con el prólogo TTML y sus tablas <styling> y <layout> al convertir a ASS?
Se descartan. Un archivo TTML guarda su aspecto y su disposición en la cabecera, no en las palabras: la declaración XML y sus espacios de nombres, la tabla `<styling>` de estilos con nombre (`tts:color`, `tts:fontWeight`), la tabla `<layout>` de regiones con nombre (`tts:origin`, `tts:extent`), cualquier `<metadata>` y los atributos `style` / `region` con los que un `<p>` apunta a ellas. ASS guarda bloques de subtítulos, no un documento, así que nada de esa cabecera tiene dónde caer. El estilo escrito dentro de un párrafo es otra cosa: un `<span tts:fontStyle="italic">` es énfasis sobre las palabras y se escribe con la marca propia de ASS allí donde ASS la tiene.
¿Qué aspecto tiene la salida cuando TTML 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 TTML se convierte en un bloque ASS, en el mismo orden y con el mismo texto.
¿Cómo sale en ASS un bloque TTML 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 TTML siguen perteneciendo a un mismo subtítulo en la salida ASS, y el reproductor las muestra juntas.
¿Conservan los bloques TTML 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 TTML 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 TTML?
Sí, y esa dirección tiene su propia lista: convertir ASS en TTML pierde el karaoke y 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 TTML?
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 TTML. 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.