Saltar al contenido
Free Subtitle Converter
Idioma
Tema de color
Apóyanos

Subtítulos XML explicados: TTML, DFXP e IMSC

Qué son los archivos de subtítulos TTML, DFXP e IMSC, cómo funcionan sus tiempos y qué lee exactamente de ellos el conversor de este sitio y qué deja fuera.

Por Syed Peera Saheb · Publicado

La respuesta corta

TTML, DFXP e IMSC son archivos de subtítulos XML basados en el Timed Text Markup Language del W3C. DFXP es un nombre anterior de TTML, e IMSC es un perfil suyo que se usa en entregas para streaming y televisión.

Si tienes un archivo de subtítulos .ttml, .dfxp o .xml y necesitas SRT o VTT, el conversor de este sitio puede leer su texto, sus tiempos, sus saltos de línea y la cursiva, la negrita y el subrayado. No conserva posiciones, colores ni fuentes, y no lee todos los archivos XML que contienen subtítulos.

Una familia, varios nombres

TTML es un estándar del W3C para texto temporizado. Mientras se redactaba se llamaba DFXP, Distribution Format Exchange Profile, y la especificación TTML 1 todavía señala que el nombre antiguo sobrevive en nombres de perfiles y extensiones de archivo. En la práctica, un archivo .dfxp y un archivo .ttml contienen el mismo tipo de documento. TTML2 es la segunda versión y añade más funciones.

Como TTML es muy amplio, los distintos sectores definen perfiles: subconjuntos que indican qué funciones puede usar un archivo. IMSC, el perfil Internet Media Subtitles and Captions, es uno de los más comunes. Sus versiones actuales definen un perfil solo de texto y otro solo de imagen. EBU-TT es un perfil usado por las cadenas europeas, y SMPTE-TT se usa en la televisión estadounidense. Todos empiezan con un elemento raíz <tt>.

Cómo es un archivo TTML

Un documento TTML tiene una cabecera (head) y un cuerpo (body). La cabecera puede definir estilos, como una fuente o un color, y regiones, que son zonas de la pantalla. El cuerpo contiene párrafos, elementos <p>, cada uno con un tiempo de inicio y de fin y el texto del subtítulo. Un <br/> empieza una línea nueva, y los elementos <span> dan estilo o tiempo a partes de una línea.

Un archivo TTML breve
<?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:tickRate="10000000">
  <head>
    <styling><style xml:id="it" tts:fontStyle="italic" tts:color="yellow"/></styling>
    <layout><region xml:id="top" tts:origin="10% 5%" tts:extent="80% 20%"/></layout>
  </head>
  <body>
    <div>
      <p begin="12000000t" end="35000000t" region="top">Hello<br/><span style="it">there</span></p>
    </div>
  </body>
</tt>

Cómo funcionan los tiempos en TTML

TTML permite escribir un tiempo de varias formas. Los tiempos de reloj son como 00:00:01.200, o 00:00:01:05 con un número de fotograma al final. Los tiempos de desplazamiento son un número con una unidad: 1.2s, 1200ms, 30f para fotogramas o 12000000t para ticks. Los ticks son habituales en archivos de servicios de streaming; el atributo tickRate del elemento raíz indica cuántos ticks forman un segundo, así que con una frecuencia de 10.000.000, 12000000t son 1,2 segundos.

Los tiempos también pueden ser relativos. Un div puede tener su propio tiempo de inicio, que se suma al de los párrafos que contiene; un párrafo puede indicar una duración en lugar de un tiempo de fin, y un párrafo sin tiempos puede tomarlos de sus spans. Por eso las herramientas sencillas de buscar y reemplazar suelen equivocarse con los tiempos de TTML.

Lo que lee este sitio

El conversor reconoce TTML por su elemento raíz <tt>, sea cual sea la extensión del archivo, así que se abren los archivos .ttml, .dfxp y .xml. El ejemplo de arriba se convierte en un subtítulo de 1,2 a 3,5 segundos con dos líneas, la segunda en cursiva. En detalle, lee:

  • Horas de reloj con fracciones o fotogramas, y tiempos de desplazamiento en horas, minutos, segundos, milisegundos, fotogramas y ticks.
  • Los ajustes frameRate, frameRateMultiplier, subFrameRate y tickRate del elemento raíz. Sin frecuencia de ticks, la deduce de la frecuencia de fotogramas, o usa un tick por segundo, como describe la especificación.
  • Begin, end y dur en párrafos y spans, sumando los tiempos de inicio del body y los div que los contienen.
  • Saltos de línea escritos como <br/>.
  • Cursiva, negrita y subrayado, tanto si se definen directamente en un elemento como mediante un estilo con nombre.
  • Elementos con prefijo de espacio de nombres, como <tt:p> en EBU-TT y algunos archivos IMSC. Los metadatos, como las notas para editores, se omiten y nunca se convierten en texto de subtítulo.

Qué deja fuera

El conversor conserva las palabras y los tiempos y descarta la presentación. No se trasladan las regiones y posiciones, los colores, las fuentes, los tamaños, los fondos, los contornos ni los ajustes de dirección del texto. Si un archivo muestra dos párrafos a la vez en regiones distintas, por ejemplo dos hablantes arriba y abajo, se convierten en dos subtítulos superpuestos; el verificador de subtítulos te los señalará.

Algunos archivos XML de subtítulos no son TTML en absoluto, y la página indica que no los reconoce como subtítulos. Entre ellos está el propio XML timedtext de YouTube, cuyo elemento raíz es <timedtext> o <transcript> en lugar de <tt>. Los archivos IMSC basados en imágenes, que guardan imágenes del texto, no contienen texto que leer. Los modos de tiempo poco habituales, como los códigos de tiempo SMPTE drop-frame, no reciben un tratamiento especial, así que compara con el vídeo algunos subtítulos cerca del final de la vista previa.

Qué escribe

Al convertir a TTML o DFXP, el conversor escribe un documento TTML 1 sencillo: cada subtítulo se convierte en un párrafo con tiempos de inicio y de fin en milisegundos, los saltos de línea pasan a ser <br/>, y la cursiva, la negrita y el subrayado se convierten en spans con el atributo de estilo correspondiente. No hay cabecera con estilos ni regiones, así que los reproductores usan su aspecto predeterminado. La opción DFXP escribe el mismo documento con la extensión .dfxp.

El atributo de idioma del elemento raíz se deja vacío, porque el conversor no puede saber en qué idioma están tus subtítulos. Algunas plataformas lo exigen. Si la tuya lo hace, abre el archivo en un editor de texto y rellena xml:lang con un código como en o es antes de subirlo.

El archivo que escribe el conversor a partir del ejemplo
<?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="">
  <body>
    <div>
      <p begin="00:00:01.200" end="00:00:03.500">Hello<br/><span tts:fontStyle="italic">there</span></p>
    </div>
  </body>
</tt>

Convertir TTML o DFXP a SRT o VTT

La conversión tarda unos segundos y el archivo se queda en tu dispositivo.

  • Abre el conversor de TTML a SRT o de DFXP a SRT, o el conversor principal, y elige tu archivo .ttml, .dfxp o .xml.
  • Revisa el resumen. Indica cuántos subtítulos se han encontrado y si algún párrafo tenía tiempos que no se han podido leer.
  • Elige el formato de salida, como SRT o VTT, y revisa la vista previa.
  • Reproduce el resultado con tu vídeo y compara un subtítulo cerca del principio y otro cerca del final, por si el archivo usaba un modo de tiempos que el conversor no maneja.
  • Descarga el archivo. Se guarda en UTF-8.

Cuándo usar TTML y cuándo no

Usa TTML o DFXP cuando te lo pida una plataforma, un servicio de streaming o una cadena de televisión; sus especificaciones de entrega suelen indicar un perfil, y un archivo TTML 1 sencillo puede cumplirlo o no. Para el uso diario en reproductores, editores y plataformas de vídeo, SRT o WebVTT es más sencillo y más compatible. Si recibes un archivo TTML y solo quieres verlo o editarlo, conviértelo a SRT.

Conserva el archivo original en cualquier caso. Al convertir a SRT se pierden para siempre las regiones y los estilos, así que si más adelante tienes que volver a entregar TTML con sus posiciones originales, te interesará tener el original y no un TTML reconstruido a partir de SRT.

Preguntas frecuentes

¿DFXP es lo mismo que TTML? A efectos prácticos, sí. DFXP era el nombre que se usaba mientras se redactaba TTML, y el conversor trata ambos de la misma forma.

¿Por qué mi archivo .xml dice que no es un archivo de subtítulos? O no es TTML, por ejemplo el XML timedtext de YouTube, o no contiene un elemento raíz <tt>. El conversor no lee esos archivos.

¿El SRT convertido conservará la posición de cada subtítulo? No. SRT no tiene una forma estándar de colocar los subtítulos, y el conversor no traslada las regiones de TTML a ningún formato.

Abrir el conversor de subtítulos
Invítame a un café