Saltar al contenido principal
SubtitleMatrix

Convertir TTML a LRC

O pega el texto de los subtítulos

Qué cambia esta conversión

5 cosas se descartan o requieren una decisión

  • Tiempos

    las horas de fin de los bloques (el formato de salida solo registra cuándo empieza un bloque)

  • Estilo

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

  • Posición

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

  • 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 LRC. Arrastra un archivo —o pega el texto— y recibes la versión LRC. La conversión se ejecuta por completo en el navegador, así que no se sube nada y no necesitas cuenta.

Los dos formatos no guardan lo mismo, y la diferencia no es cosmética: los tiempos, el estilo, la posición, la precisión y el contenido propio del formato no tienen dónde ir en LRC. La lista de arriba sale de lo que cada formato puede expresar, no de tu archivo, así que no depende de lo que cargues.

Un archivo basta, y una temporada completa también: la cola los trata en orden y los resultados se descargan juntos en un único ZIP.

Ejemplos

Un archivo TTML típico, convertido a LRC

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

[00:01.00]Hello there.
[00:03.50]How are you?
[00:03.50]Fine, thanks.

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

Resultado

[00:01.50]Loaded from an offset and a duration.
[00:04.00]A coarser clock spelling.
[00:07.00]Frames, at 25fps.
[00:09.00]Half-open 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

¿Qué ocurre con la hora de fin de cada bloque TTML?

LRC registra cuándo empieza una línea y nada más: un reproductor de letras mantiene una línea hasta que empieza la siguiente, así que una hora de fin sobraría. Todo final se descarta y ningún inicio TTML se toca.

¿Qué pasa con la negrita, la cursiva y el color de TTML a LRC?

LRC no guarda estilo de ningún tipo, así que se va todo: un `<span tts:color="…">` dentro de un párrafo, o un estilo con nombre de la tabla `<styling>` al que apunte, no tiene dónde caer, y cada línea se escribe como texto plano. Las palabras en sí no se tocan.

¿Qué sucede con la posición en pantalla al convertir TTML a LRC?

LRC 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 del reproductor: el borde inferior del fotograma, centrado, casi siempre.

¿Por qué cambian los códigos de tiempo de TTML a LRC?

LRC guarda el tiempo como `[00:04.12]` donde TTML lo guarda como `00:00:04.126` —centésimas frente a milésimas—, así que cada código 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 punto donde la conversión deja de ser exacta.

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

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

¿Cómo se ve la salida cuando TTML se transforma en LRC?

Como LRC: sin números de bloque; cada línea lleva su propia marca de tiempo entre corchetes. Cada bloque TTML se convierte en un bloque LRC, en el mismo orden y con el mismo texto.

¿Cómo aparece en LRC un bloque TTML de dos líneas?

Como dos líneas con marca de tiempo que llevan la misma hora, que es como LRC dice «estas dos van juntas». La pareja se mantiene: las dos líneas TTML siguen perteneciendo a un mismo subtítulo en la salida LRC, y el reproductor las muestra juntas.

¿Se conserva el orden de los bloques TTML en la salida LRC?

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

¿Puedo volver de LRC a TTML?

Sí, y esa dirección tiene su propia lista: convertir LRC en TTML pierde los tiempos. La lista es distinta de la de arriba porque los dos formatos guardan cosas distintas.

¿Mantiene la salida LRC 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 LRC en UTF-8.

Herramientas relacionadas