Saltar al contenido principal
SubtitleMatrix

Convertir TTML a SRT

O pega el texto de los subtítulos

Qué cambia esta conversión

3 cosas se descartan o requieren una decisión

  • Estilo

    todo el estilo (negrita, cursiva, color, contorno, sombra)

  • Posición

    la posición en pantalla (cada bloque vuelve a la posición predeterminada)

  • 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 SRT. Arrastra un archivo —o pega el texto— y recibes la versión SRT. La conversión se ejecuta sin salir del navegador: no se sube nada y no hace falta registrarse.

Los dos formatos no guardan lo mismo, y la diferencia no es cosmética: el estilo, la posición y el contenido propio del formato no tienen dónde ir en SRT. 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 trata en orden y los resultados bajan juntos en un solo ZIP.

Ejemplos

Un archivo TTML típico, convertido a SRT

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

1
00:00:01,000 --> 00:00:03,500
Hello <i>there</i>.

2
00:00:03,500 --> 00:00:06,000
How are you?
Fine, thanks.

Se pierden el estilo, la posició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 &amp; Jerry.</p>
    </div>
  </body>
</tt>

Resultado

1
00:00:01,500 --> 00:00:03,500
Loaded from an offset and a duration.

2
00:00:04,000 --> 00:00:06,500
A coarser clock spelling.

3
00:00:07,000 --> 00:00:08,480
Frames, at 25fps.

4
00:00:09,000 --> 00:00:11,000
<font color="#FF0000">Half-open</font> and Tom &amp; 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

¿Sobreviven la negrita y la cursiva al pasar de TTML a SRT?

El énfasis sí; la tabla de estilos no. El formato que pertenece a un fragmento de texto —negrita, cursiva, subrayado, un color— se escribe en el texto SRT como etiquetas (`<i>`, `<b>`, `<u>`, `<font color="…">`), porque es el único tipo de estilo que un formato por bloques puede llevar. Se pierde todo lo que el archivo TTML decía globalmente: la fuente, su tamaño, el contorno, la sombra y los márgenes.

¿Qué pasa con la posición en pantalla al convertir TTML a SRT?

SRT no puede decir dónde se dibuja un subtítulo, así que las referencias `region` y `style` que lleva un `<p>` se descartan al salir de TTML, y cada bloque vuelve a la posición predeterminada que elige el reproductor: el borde inferior del fotograma, centrado, en la mayoría de los casos.

¿Qué sucede con el prólogo TTML y sus tablas <styling> y <layout> en SRT?

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. SRT 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 SRT allí donde SRT la tiene.

¿Qué aspecto tiene la salida cuando TTML pasa a SRT?

Como SRT: un número encima de cada código de tiempo, contando desde 1. Cada bloque TTML se convierte en un bloque SRT, en el mismo orden y con el mismo texto.

¿Son exactos los tiempos de TTML en el archivo SRT?

Sí, al milisegundo, que es lo más fino que llega cualquiera de los dos formatos. TTML escribe un instante como `00:00:04.126` y SRT 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 SRT un bloque TTML de dos líneas?

Como dos líneas, una debajo de la otra. La pareja se mantiene: las dos líneas TTML siguen perteneciendo a un mismo subtítulo en la salida SRT, y el reproductor las muestra juntas.

¿Mantienen los bloques TTML su orden en la salida SRT?

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

¿Puedo volver de SRT a TTML?

Sí, y esa dirección no cuesta nada: un archivo SRT guarda menos de lo que TTML puede, así que no se pierde nada más al volver. Lo que esta dirección perdió sigue perdido: el estilo, la posición y el contenido propio del formato no se reconstruyen desde un archivo SRT, porque nada en él registra cómo eran.

¿Respeta la salida SRT 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 SRT en UTF-8.

Herramientas relacionadas