Convertir CSV en TTML
Ou collez le texte d'un sous-titre
Ce que cette conversion change
Rien n'est perdu dans ce sens — chaque fonctionnalité du format source a un équivalent dans le format cible.
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 tableau CSV en TTML. Chaque ligne devient un élément `<p>` avec `begin` et `end`, rangé dans un `<body>`, sous une déclaration XML. Les heures `00:00:04.126` du tableau passent telles quelles.
Le CSV et le TTML notent tous deux la milliseconde et le TTML sait décrire tout ce que le tableau porte : début, fin, texte et lignes multiples. La liste ci-dessus est donc vide, par croisement des capacités et non par approximation.
Un fichier ou tout un lot : la file les traite dans l’ordre et les résultats descendent dans un ZIP. Le traitement reste local.
Exemples
Un fichier CSV typique, converti en TTML
Entrée
start,end,text
00:00:01.000,00:00:03.500,The quick brown fox.
00:00:04.000,00:00:06.250,"Jumps over, the lazy dog."
00:00:07.000,00:00:09.000,"Two lines here.
And a second one."
Sortie
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:01.000" end="00:00:03.500">The quick brown fox.</p>
<p begin="00:00:04.000" end="00:00:06.250">Jumps over, the lazy dog.</p>
<p begin="00:00:07.000" end="00:00:09.000">Two lines here.<br/>And a second one.</p> </body>
</tt>
Rien n’est perdu ici : les bornes et les lignes du tableau se retrouvent à l’identique dans les éléments p.
La même conversion sur une entrée abîmée
Entrée
id,start,end,note,text
1,00:00:01,000,00:00:04,000,cue one,"Hello there, friend."
2,00:00:05.000,00:00:07.000,cue two,Second line.
bad,notatime,00:00:09.000,cue three,Unreadable start.
4,00:00:10.000,00:00:09.000,cue four,End before start.
5,00:00:12.000,00:00:14.000,cue five,Unquoted comma in text, right here.
Sortie
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:01.000" end="00:00:04.000">Hello there, friend.</p>
<p begin="00:00:05.000" end="00:00:07.000">Second line.</p>
<p begin="00:00:10.000" end="00:00:10.001">End before start.</p>
<p begin="00:00:12.000" end="00:00:14.000">Unquoted comma in text, right here.</p> </body>
</tt>
C’est le genre de dégâts des vrais fichiers : fins de ligne mélangées, espaces parasites, champs vides. Comparez avec l’exemple propre ci-dessus pour voir ce que le lecteur pardonne.
Questions fréquentes
Comment une ligne d’un CSV devient-elle un élément p dans le TTML ?
En `<p begin="00:00:04.126" end="00:00:06.250">`, dans un `<body>` et généralement un `<div>`, sous une déclaration XML. Le texte de la cellule remplit l’élément.
Les heures d’un CSV sont-elles exactes dans le TTML ?
Oui. Les deux formats écrivent trois décimales : les bornes sortent caractère pour caractère, sans arrondi ni décalage. Une durée de 2,9 s reste 2,9 s.
Une cellule CSV de plusieurs lignes reste-t-elle groupée en TTML ?
En plusieurs lignes dans le même `<p>`, séparées par `<br/>`. Le regroupement est conservé.
Le TTML produit depuis un CSV contient-il une table de styles ?
Un en-tête minimal, oui, pour que le document soit bien formé. Comme le CSV n’apporte ni police, ni couleur, ni région, il n’y a rien d’autre à traduire dans `<styling>` ou `<layout>`.
Puis-je revenir d’un TTML vers le CSV d’origine ?
Oui, et c’est la direction avec perte : styles, position et contenu propre au format n’ont pas de colonne dans un tableau. Ce sens-ci ne retire rien, le coût n’apparaît qu’au retour.