Aller au contenu principal
SubtitleMatrix

Convertir SSA en TTML

Conversion de formatsSubStation Alpha (SSA)
Ou collez le texte d'un sous-titre

Ce que cette conversion change

2 éléments perdus ou à décider

  • Karaoké

    le minutage karaoké (surlignage par syllabe)

  • 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 SSA en TTML, le format XML utilisé par le web, la télévision et les plateformes de diffusion. Chaque sous-titre devient un élément `<p>` avec ses attributs `begin` et `end`, rangé dans un `<body>`.

Dans ce sens, deux choses seulement se perdent : le karaoké et les constructions propres au SSA. Le style et la position, eux, passent, parce que TTML sait les exprimer. La liste affichée en haut de page vient de ce que chaque format sait exprimer, pas de votre fichier : elle ne change donc pas selon ce que vous déposez.

La sortie commence par une déclaration XML et conserve les accents en UTF-8. Les sauts de ligne durs deviennent des `<br/>`, et un fragment italique devient un `<span>` avec l’attribut de style correspondant.

Exemples

Un fichier SSA courant converti en TTML

Entrée

[Script Info]
Title: Example SSA
ScriptType: v4.00
Collisions: Normal

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\i1}Italic{\i0} line.
Dialogue: Marked=0,0:00:09.00,0:00:12.00,Default,,0,0,0,,Two\Nlines

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.</p>
<p begin="00:00:05.000" end="00:00:08.000"><span tts:fontStyle="italic">Italic</span> line.</p>
<p begin="00:00:09.000" end="00:00:12.000">Two<br/>lines</p>  </body>
</tt>

Perdus dans cette sortie : le karaoké et les constructions propres au SSA. Style, position, texte et temps sont conservés dans le XML.

La même conversion sur une entrée abîmée

Entrée

[Script Info]
Title: Dirty SSA
ScriptType: v4.00

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: Marked=0,0:00:00.00,0:00:01.00,Default,,0,0,0,,not a subtitle
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,{\b1}Bold{\b0} and {\u1}underlined{\u0}.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,A soft\nbreak and a {\p1}mystery{\p0} code.

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"><span tts:fontWeight="bold">Bold</span> and <span tts:textDecoration="underline">underlined</span>.</p>
<p begin="00:00:05.000" end="00:00:08.000">A soft<br/>break and a {\p1}mystery{\p0} code.</p>  </body>
</tt>

BOM, fins de ligne Windows et champs vides : le document TTML reste du XML valide, et les réparations effectuées à la lecture apparaissent dans le rapport.

Questions fréquentes

Que devient le minutage karaoké d’un SSA dans un TTML ?

Les codes `\k`, `\kf` et `\ko` marquent un instant à l’intérieur d’une ligne. TTML décrit des débuts et des fins de paragraphe, pas des allumages de syllabe : le minutage interne est perdu et les syllabes arrivent en texte ordinaire.

Que deviennent `[Script Info]` et les blocs intégrés du SSA dans un TTML ?

Seuls les `Dialogue:` deviennent des sous-titres. `[Script Info]`, son titre, la table `[V4 Styles]`, les lignes `Comment:` et le contenu de `[Fonts]` et `[Graphics]` n’ont pas d’équivalent dans le document TTML produit ; ils sont abandonnés et comptés comme tels.

À quoi ressemble la sortie quand un SSA devient un TTML ?

À un document TTML : une déclaration XML, un élément `tt`, un `body`, puis un `<p begin="00:00:04.130" end="00:00:07.000">` par sous-titre. Un dialogue sur deux lignes utilise `<br/>` à l’intérieur du paragraphe.

Les temps du SSA sont-ils exacts dans le fichier TTML ?

Oui. `0:00:04.13` vaut 4 130 ms et s’écrit `00:00:04.130` dans les attributs `begin` et `end`. TTML accepte la milliseconde, donc les centièmes du SSA se traduisent par un zéro final, sans arrondi ni décalage.

Le style et la position d’un SSA sont-ils conservés dans le TTML ?

Oui, contrairement à la plupart des formats de sortie. TTML dispose d’un modèle de style et de placement : l’italique, le gras, le soulignement et la couleur d’un fragment deviennent des éléments ou attributs de style, et la position du SSA trouve un équivalent dans le document.

Le TTML produit peut-il revenir vers un SSA sans perte ?

Non. Le retour TTML vers SSA coûte la précision, parce que SSA arrondit au centième, et les constructions propres à TTML n’ont pas de place dans un SSA. Ce que cette page a déjà abandonné ne peut pas être reconstruit au retour.

Outils associés