Convertir TTML en CSV
Ou collez le texte d'un sous-titre
Ce que cette conversion change
3 éléments perdus ou à décider
- Style
tout le style (gras, italique, couleur, contour, ombre)
- Positionnement
le positionnement à l'écran (chaque bloc revient à la position par défaut)
- 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 CSV à trois colonnes : start, end et text. Les heures sont écrites au format HH:MM:SS.mmm et reprennent les valeurs du TTML, qu’elles viennent d’une horloge, d’un offset ou d’un timecode en images converti avec ttp:frameRate.
Le CSV n’a pas de couche de style : les mises en forme portées par un <span> sont donc rendues sous forme de balises dans la colonne text. Un tts:fontStyle="italic" donne <i>…</i>, et un tts:color donne <font color="#RRGGBB">…</font>. Les tables <style> et <layout> n’ont pas d’équivalent et sont perdues.
Un paragraphe de deux lignes reste une seule cellule, avec un saut de ligne entre les deux lignes, et cette cellule est encadrée de guillemets. Le CSV convient donc au contrôle et au traitement par tableur, pas à l’affichage direct des sous-titres. Tout est traité dans le navigateur.
Exemples
Un fichier TTML typique, converti en CSV
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
start,end,text
00:00:01.000,00:00:03.500,Hello <i>there</i>.
00:00:03.500,00:00:06.000,"How are you?
Fine, thanks."
L’italique en ligne apparaît comme <i> dans la colonne texte, et le paragraphe de deux lignes reste une cellule entre guillemets.
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
start,end,text
00:00:01.500,00:00:03.500,Loaded from an offset and a duration.
00:00:04.000,00:00:06.500,A coarser clock spelling.
00:00:07.000,00:00:08.480,"Frames, at 25fps."
00:00:09.000,00:00:11.000,"<font color=""#FF0000"">Half-open</font> and Tom & Jerry."
Les offsets, durées et images sont convertis en heures exactes ; la couleur en ligne devient une balise font dans le texte.
Questions fréquentes
Pourquoi trouve-t-on des balises i et font dans la colonne texte du CSV ?
Parce que le CSV n’a aucun moyen de stocker un style. Pour ne pas perdre complètement l’italique ou la couleur portés par un <span>, la conversion les écrit sous forme de balises HTML dans le texte. Un tableur les affiche comme du texte, et un outil qui lit le CSV peut les réinterpréter.
Les heures TTML sont-elles exactes dans le CSV ?
Oui, à la milliseconde près, tant que la source exprime un temps convertible. Une horloge 00:00:01.500 reste 00:00:01.500, et un timecode 00:00:08:12 à 25 fps devient 00:00:08.480. Le CSV n’arrondit pas au centième comme le fait l’ASS.
Que deviennent les éléments style et region du TTML ?
Ils sont perdus. Le CSV ne décrit que le temps et le texte, sans notion de style nommé ni de zone d’affichage. Une position déclarée par tts:origin et tts:extent dans <layout> ne peut donc pas être reportée dans une colonne.
Comment un texte multiligne est-il écrit dans le CSV ?
Il reste dans une seule cellule, avec un saut de ligne réel entre les lignes, et la cellule est placée entre guillemets. Sans ces guillemets, le saut de ligne serait lu comme une fin d’enregistrement et le tableau compterait une ligne de plus que de blocs.
Le CSV garde-t-il la position à l’écran des sous-titres ?
Non. Le TTML peut décrire une région avec un point d’origine et une étendue, mais le CSV n’a ni colonne ni syntaxe pour cela. La position est donc comptée parmi les pertes, avec les styles nommés et le prologue du document.
Une couleur déclarée dans un style nommé apparaît-elle dans le CSV ?
Non, seule une couleur portée directement par un <span> devient une balise font. Une couleur définie dans <styling> et référencée par un paragraphe dépend d’un style nommé : comme le CSV ne transporte pas la table des styles, cette couleur est perdue.