Aller au contenu principal
SubtitleMatrix

Convertir TTML en SBV

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 SBV. Chaque paragraphe devient un bloc dont la première ligne porte deux heures séparées par une virgule, par exemple 0:00:01.500,0:00:03.500, suivie du texte et d’une ligne vide. Le SBV n’ajoute ni numéro de bloc ni flèche.

Les heures du TTML sont conservées à la milliseconde : une horloge, un offset ou un timecode en images converti avec ttp:frameRate donnent la même valeur numérique, écrite dans la convention du SBV. Un paragraphe de deux lignes garde ses deux lignes dans le même bloc.

Le SBV n’a pas de couche de style. Les mises en forme portées par un <span> sont donc rendues comme du texte balisé, par exemple <i> ou <font color="#RRGGBB">, tandis que les tables <style> et <layout> sont perdues. La conversion reste locale et accepte plusieurs fichiers à la suite.

Exemples

Un fichier TTML typique, converti en SBV

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

0:00:01.000,0:00:03.500
Hello <i>there</i>.

0:00:03.500,0:00:06.000
How are you?
Fine, thanks.

Les heures du TTML deviennent des lignes 0:00:01.500,0:00:03.500 sans numéro, et le bloc de deux lignes reste groupé.

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 &amp; Jerry.</p>
    </div>
  </body>
</tt>

Sortie

0:00:01.500,0:00:03.500
Loaded from an offset and a duration.

0:00:04.000,0:00:06.500
A coarser clock spelling.

0:00:07.000,0:00:08.480
Frames, at 25fps.

0:00:09.000,0:00:11.000
<font color="#FF0000">Half-open</font> and Tom &amp; Jerry.

Les timecodes en images sont convertis grâce à ttp:frameRate ; l’italique en ligne sort sous forme de balise dans le texte.

Questions fréquentes

Comment les heures TTML sont-elles écrites dans le SBV ?

Sous la forme 0:00:01.500,0:00:03.500 : heure à un chiffre, minutes et secondes à deux, millisecondes à trois, et une virgule entre les deux bornes. Une horloge ou un offset du TTML est transcrit tel quel en millisecondes, sans arrondi.

Les balises span deviennent-elles des styles dans le SBV ?

Non, le SBV n’a pas de styles. Le texte garde la trace de la mise en forme sous forme de balises HTML littérales, comme <i>…</i> ou <font color="#FF0000">…</font>. Un lecteur SBV les affichera probablement comme du texte, mais l’information n’est pas perdue.

Que deviennent les tables style et region du TTML ?

Elles sont abandonnées. Le SBV ne connaît ni style nommé ni zone d’affichage, donc une référence de style sur un paragraphe ou une position définie par tts:origin et tts:extent n’a aucun endroit où aller dans le fichier produit.

Les timecodes en images demandent-ils un réglage de fréquence ?

Non, pas celui de la page. Ils sont lus avec le ttp:frameRate déclaré dans le document, et ttp:frameRateMultiplier permet d’exprimer 29,97 par 30000 1001. Le SBV ne stocke pas cette fréquence : elle ne sert qu’à convertir les images en millisecondes.

Comment le SBV complète-t-il un paragraphe sans attribut end ?

Il reçoit 2 000 ms de durée. Le TTML accepte un paragraphe ouvert, alors que le SBV exige deux heures pour chaque bloc : la fin est donc ajoutée, et le rapport de pertes précise qu’elle ne vient pas du document source.

Pourquoi le SBV n’a-t-il pas de numéro de bloc ?

C’est la convention du format : une ligne d’heures, un texte, une ligne vide. Un numéro serait lu comme la première ligne du texte et apparaîtrait à l’écran. Cette absence de numérotation simplifie aussi la comparaison avec le nombre de paragraphes du TTML.

Outils associés