Convertir TTML en VTT
Ou collez le texte d'un sous-titre
Ce que cette conversion change
3 éléments perdus ou à décider
- Style
tout le style sauf le gras et l'italique (couleur, contour, ombre, marges)
- 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 WebVTT. La sortie commence par la ligne WEBVTT, puis chaque paragraphe devient un cue avec begin et end écrits en heures à trois décimales et séparés par une flèche. Les timecodes en images du TTML sont lus avec ttp:frameRate.
Les mises en forme en ligne sont traduites en balises reconnues par WebVTT : italique, gras, soulignement et couleur deviennent <i>, <b>, <u> ou <font color="#...">. Les tables <style> et <layout> et les positions de région ne sont pas reprises, car le VTT produit ne définit ni styles nommés ni zones.
Un paragraphe de deux lignes garde ses deux lignes dans un seul cue. Un paragraphe sans end reçoit 2 000 ms, et les entités du XML restent dans le texte telles qu’elles sont écrites. Le fichier est directement utilisable dans une balise <track> d’une page web.
Exemples
Un fichier TTML typique, converti en WebVTT
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
WEBVTT
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.
Le fichier commence par WEBVTT et l’italique en ligne devient <i> ; le paragraphe de deux lignes reste un seul cue.
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
WEBVTT
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 deviennent des cues à la milliseconde, et la couleur en ligne devient une balise font.
Questions fréquentes
Comment les blocs TTML deviennent-ils des cues WebVTT ?
Chaque <p> donne un cue : begin fournit l’heure de gauche, end l’heure de droite, et le texte du paragraphe devient la charge du cue. Le fichier commence par WEBVTT. Un paragraphe de deux lignes reste un seul cue avec un saut de ligne interne.
Les styles en ligne du TTML survivent-ils dans le WebVTT ?
Oui pour les balises que le VTT connaît : un span en italique devient <i>, un gras devient <b>, un soulignement devient <u>, et une couleur devient <font color="#RRGGBB">. Les styles nommés et les régions, eux, ne sont pas transportés.
Que deviennent region et tts:origin dans le VTT ?
Ils sont perdus. Le WebVTT possède des réglages de position, mais la conversion n’en fabrique pas à partir des régions TTML : le cue produit ne porte donc aucune information de placement, et le lecteur applique sa position par défaut.
Les timecodes en images demandent-ils un réglage ?
Non, ils sont lus avec le ttp:frameRate du document, éventuellement corrigé par ttp:frameRateMultiplier pour 29,97. La page TTML vers WebVTT ne demande pas de fréquence : le document source fournit celle qui s’applique à ses propres timecodes.
Le WebVTT produit a-t-il besoin d’un en-tête particulier ?
Oui, la première ligne doit être WEBVTT, suivie d’une ligne vide. C’est ce qui distingue un fichier VTT d’un SRT et ce qui permet au navigateur de l’accepter dans une balise <track>. La conversion l’écrit toujours en premier.
Comment le WebVTT complète-t-il un paragraphe TTML sans attribut end ?
Il reçoit 2 000 ms. Le WebVTT exige deux heures par cue, alors que le TTML autorise un paragraphe ouvert : la fin est donc ajoutée à start plus 2 000, puis signalée dans le rapport de pertes comme une valeur calculée.