Convertir TTML en SMI
Ou collez le texte d'un sous-titre
Ce que cette conversion change
2 éléments perdus ou à décider
- Style
tout le style sauf le gras et l'italique (couleur, contour, ombre, marges)
- 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 SMI, le format SAMI de Windows Media. Chaque paragraphe devient un <SYNC Start=...> suivi d’un <P>, et un second SYNC à l’heure de fin écrit <P> pour effacer l’écran. Les heures sont des millisecondes entières, calculées depuis begin et end.
Le SMI est une page HTML, donc il peut porter une partie de la mise en forme du TTML : un <span> en italique ou en couleur devient <i> ou <font color="#...">, et un saut de ligne devient <br>. En revanche, les tables <style> et <layout> et les positions déclarées par région ne sont pas transportées.
Les quatre écritures de temps du TTML sont acceptées, y compris les images, grâce à ttp:frameRate et à son multiplicateur. Un paragraphe sans end reçoit 2 000 ms, et un paragraphe vide produit un SYNC d’ouverture puis un nettoyage. Tout le traitement reste dans le navigateur.
Exemples
Un fichier TTML typique, converti en SMI
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
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>Hello <i>there</i>.
<SYNC Start=3500>
<P>
<SYNC Start=3500>
<P>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P>
</BODY>
</SAMI>
L’italique en ligne survit en balise HTML dans le paragraphe, tandis que le style nommé et la région 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
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1500>
<P>Loaded from an offset and a duration.
<SYNC Start=3500>
<P>
<SYNC Start=4000>
<P>A coarser clock spelling.
<SYNC Start=6500>
<P>
<SYNC Start=7000>
<P>Frames, at 25fps.
<SYNC Start=8480>
<P>
<SYNC Start=9000>
<P><font color="#FF0000">Half-open</font> and Tom & Jerry.
<SYNC Start=11000>
<P>
</BODY>
</SAMI>
Les offsets, durées et images deviennent des SYNC en millisecondes ; la couleur en ligne devient une balise font.
Questions fréquentes
Quel style TTML survit dans le SMI ?
Le style porté directement par le texte, c’est-à-dire un <span> en italique, en couleur ou souligné, qui devient une balise HTML dans le paragraphe. Les styles nommés de <styling> et les positions de <layout> ne survivent pas, car le SMI produit ne les référence nulle part.
Comment un bloc est-il terminé dans le SMI ?
Par un second <SYNC> à l’heure de fin, contenant <P> . Le SMI n’a pas d’attribut end : la fin est un nouvel état qui remplace le texte par un espace insécable. Un paragraphe de deux lignes reste visible jusqu’à ce nettoyage.
Que deviennent les attributs tts:origin et tts:extent ?
Ils sont perdus. Le SMI produit ne contient pas de positionnement par région : son bloc <STYLE> se limite à centrer le texte en Arial. Une région définie dans <layout> n’a donc pas de contrepartie dans la page SAMI.
Les timecodes en images du TTML sont-ils convertis ?
Oui. Une valeur comme 00:00:07:12 est lue avec ttp:frameRate, et un rapport comme 30000 1001 est appliqué pour obtenir 29,97. Le SMI n’a besoin que du résultat en millisecondes, pas de la fréquence elle-même.
Quel SYNC le SMI produit reçoit-il pour un paragraphe sans end ?
Il reçoit 2 000 ms, ce qui produit un SYNC d’ouverture puis un SYNC de nettoyage à start plus 2 000. Le document source ne fournit pas cette fin ; elle est ajoutée pour que chaque paragraphe ait une durée exploitable.
Le SMI est-il encore pris en charge par les navigateurs ?
Le format SAMI est un héritage de Windows Media, construit sur une syntaxe HTML. Les navigateurs modernes ne l’utilisent pas comme piste de sous-titres ; le fichier reste lisible comme texte, et une conversion vers SRT ou VTT est préférable pour le web.