Convertir TTML en LRC
Ou collez le texte d'un sous-titre
Ce que cette conversion change
5 éléments perdus ou à décider
- Minutage
les heures de fin des blocs (le format de sortie n'enregistre que le début d'un bloc)
- Style
tout le style (gras, italique, couleur, contour, ombre)
- Positionnement
le positionnement à l'écran (chaque bloc revient à la position par défaut)
- Précision
la précision du minutage — l'horloge de la sortie est plus grossière, chaque code temporel est donc arrondi au 10 ms le plus proche
- Contenu propre au format
le contenu que le format source garde hors de ses blocs (blocs hors sous-titres, texte d'en-tête, réglages par bloc, événements commentés) — le format cible n'a nulle part où le mettre
Ce rapport de pertes vient de la matrice de capacités de ces deux formats, pas du fichier particulier que vous avez chargé. Un fichier précis peut perdre davantage s'il utilise des fonctionnalités que le format autorise mais que la matrice ne modélise pas.
Cette page convertit un fichier TTML en LRC. Le TTML est un format complet, avec des paragraphes datés, des styles nommés, des régions et un prologue XML ; le LRC est un format de paroles qui ne connaît que l’heure de début et le texte. Le passage est donc volontairement réducteur.
Chaque ligne de texte reçoit son propre horodatage [mm:ss.xx]. Un paragraphe TTML de deux lignes produit deux entrées LRC au même instant, ce qui est la convention du format pour afficher une version originale et sa traduction ensemble. L’heure de fin du paragraphe est écartée : le LRC s’arrête au prochain horodatage.
Les styles, couleurs, positions et éléments propres au TTML disparaissent, et la précision tombe au centième de seconde. Les timecodes en images sont lus grâce à ttp:frameRate et ttp:frameRateMultiplier, qui permet d’exprimer 29,97. La conversion reste locale et accepte plusieurs fichiers.
Exemples
Un fichier TTML typique, converti en LRC
Entrée
<?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>
Sortie
[00:01.00]Hello there.
[00:03.50]How are you?
[00:03.50]Fine, thanks.
Le paragraphe de deux lignes donne deux entrées au même horodatage ; l’italique et la couleur ne sont pas repris.
La même conversion sur une entrée abîmée
Entrée
<?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>
Sortie
[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 & Jerry.
Les offsets, durées et images deviennent des horodatages au centième ; le paragraphe sans end reçoit 2 000 ms.
Questions fréquentes
Pourquoi une phrase TTML sur deux lignes donne-t-elle deux lignes LRC au même horodatage ?
Parce que le LRC associe un texte à un instant, sans notion de bloc multi-lignes. Pour conserver les deux lignes, la conversion écrit deux entrées qui partagent le même [mm:ss.xx] ; c’est aussi la façon dont une traduction est habituellement représentée dans ce format.
L’heure de fin TTML est-elle écrite dans le LRC ?
Non. Le LRC ne possède pas d’heure de fin : une ligne dure jusqu’au prochain horodatage. La fin du paragraphe source est donc abandonnée, et le lecteur LRC la remplacera implicitement par le début de l’entrée suivante.
Quelle précision le TTML abandonne-t-il en devenant un LRC ?
Le TTML peut exprimer des millisecondes et des fractions d’image, alors que le LRC n’écrit que des centièmes. Un temps de 1 234 ms devient 00:01.23, soit 1 230 ms : un écart de 4 ms qui peut compter si vous reconvertissez ensuite vers un format plus fin.
Les styles, couleurs et régions du TTML sont-ils conservés ?
Non. Le LRC n’a ni style, ni couleur, ni position : son contenu se limite à des horodatages et à du texte. Les balises <span>, les tables <style> et <layout> et le prologue XML sont donc tous abandonnés, comme l’indique le rapport de pertes.
Comment les timecodes en images sont-ils lus ?
Ils utilisent la fréquence déclarée par le document : ttp:frameRate pour une valeur comme 25, et ttp:frameRateMultiplier pour un rapport comme 30000 1001, qui vaut 29,97. Sans cette déclaration, un timecode 00:00:07:12 ne peut pas être converti en heure.
Peut-on revenir du LRC au TTML ?
Oui, mais le retour ne restaure rien : les styles, les régions et le prologue ont disparu, et les fins de paragraphes sont recalculées à partir du début suivant. Le TTML obtenu est un document minimal, pas une copie du fichier d’origine.