Aller au contenu principal
SubtitleMatrix

Convertir TTML en SRT

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 SRT. Le TTML est un XML de sous-titrage avec des paragraphes datés, des styles nommés et des régions ; le SRT est une suite de blocs numérotés avec deux heures et du texte. La conversion conserve donc le texte et le minutage, pas l’architecture du document.

Les mises en forme portées par un <span> sont traduites en balises SRT : italique, gras, soulignement et couleur deviennent <i>, <b>, <u> ou <font color="#...">. Les tables <style> et <layout>, les marges et les positions de région n’ont pas d’équivalent et sont perdues, ce que le rapport indique.

Les quatre écritures de temps sont lues, y compris les images grâce à ttp:frameRate. Les heures du SRT gardent la milliseconde, donc un temps TTML à 1 500 ms devient 00:00:01,500 sans arrondi au centième. Un paragraphe sans end reçoit 2 000 ms.

Exemples

Un fichier TTML typique, converti en SRT

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

1
00:00:01,000 --> 00:00:03,500
Hello <i>there</i>.

2
00:00:03,500 --> 00:00:06,000
How are you?
Fine, thanks.

L’italique en ligne devient <i> dans le texte SRT, et le paragraphe de deux lignes reste un seul sous-titre.

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

1
00:00:01,500 --> 00:00:03,500
Loaded from an offset and a duration.

2
00:00:04,000 --> 00:00:06,500
A coarser clock spelling.

3
00:00:07,000 --> 00:00:08,480
Frames, at 25fps.

4
00:00:09,000 --> 00:00:11,000
<font color="#FF0000">Half-open</font> and Tom &amp; Jerry.

Les timecodes en images sont convertis à la milliseconde près ; la couleur en ligne devient une balise font et le paragraphe sans end reçoit 2 000 ms.

Questions fréquentes

Les balises span en italique deviennent-elles de l’italique SRT ?

Oui. Un span avec tts:fontStyle="italic" encadre une portion de texte qui ressort entre <i> et </i> dans le SRT. La position des balises est calculée sur le texte de la ligne, donc l’italique couvre exactement les caractères concernés.

Et la couleur tts:color dans le SRT ?

Elle devient une balise <font color="#RRGGBB"> autour du texte concerné. Le SRT accepte ce balisage de fait, même s’il n’est pas normalisé : les lecteurs qui l’ignorent afficheront le texte sans couleur plutôt que de refuser le fichier.

Où passent les styles nommés et les régions du TTML dans le SRT ?

Ils sont perdus. Le SRT ne possède ni table de styles nommés ni régions d’affichage. Un paragraphe qui référençait un style de <styling> ou une région de <layout> arrive donc avec son texte, mais sans la couleur, la police ou la position que ces définitions décrivaient.

Les frames TTML exigent-elles la fréquence de la page ?

Non. Elles sont lues avec la fréquence déclarée dans le document, ttp:frameRate, éventuellement corrigée par ttp:frameRateMultiplier pour 29,97. La page TTML vers SRT ne demande pas de champ de fréquence, car le document fournit la valeur nécessaire.

Les heures sont-elles exactes dans le SRT ?

Oui, à la milliseconde. Le SRT écrit trois décimales après la virgule, ce qui correspond à la résolution du TTML dans la plupart des cas. Un offset 1.5s devient 00:00:01,500, et un timecode 00:00:08:12 à 25 fps devient 00:00:08,480.

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

Il reçoit 2 000 ms. Le SRT exige deux heures par bloc, et 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 fabriquée.

Outils associés