Aller au contenu principal
SubtitleMatrix

Convertir ASS en TTML

Conversion de formatsAdvanced SubStation Alpha (ASS)
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 ASS en TTML. Chaque Dialogue devient un élément p avec des attributs begin et end, imbriqué dans un body et souvent un div, sous une déclaration XML. Aucun numéro de bloc n'apparaît : la structure remplace le compteur.

Les deux formats ne conservent pas les mêmes choses : le karaoké et les constructions propres au script n'ont pas de place dans le TTML. Les codes de position ASS, eux, n'ont pas de correspondance automatique ; les temps au centième deviennent des millisecondes exactes, et les balises d'emphase écrites dans le Dialogue passent en éléments.

Un fichier ou une saison entière, traité dans le navigateur, avec un seul ZIP à la fin.

Exemples

Un fichier ASS typique, converti en TTML

Entrée

[Script Info]
Title: Example
ScriptType: v4.00+
WrapStyle: 0

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
Style: Title,Arial,36,&H0000FFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: 0,0:00:05.00,0:00:08.50,Default,,0,0,0,,{\i1}Italic{\i0} and {\b1}bold{\b0} text.
Dialogue: 0,0:00:09.00,0:00:12.00,Title,,0,0,0,,{\pos(320,240)}Positioned
Dialogue: 0,0:00:13.00,0:00:16.00,Default,,0,0,0,,{\k50}ka{\k30}ra{\k20}o{\k10}ke
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Line one\NLine two
Dialogue: 1,0:00:21.00,0:00:24.00,Default,,0,0,0,,{\an7}Top left

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.500"><span tts:fontStyle="italic">Italic</span> and <span tts:fontWeight="bold">bold</span> text.</p>
<p begin="00:00:09.000" end="00:00:12.000">Positioned</p>
<p begin="00:00:13.000" end="00:00:16.000">karaoke</p>
<p begin="00:00:17.000" end="00:00:20.000">Line one<br/>Line two</p>
<p begin="00:00:21.000" end="00:00:24.000">Top left</p>  </body>
</tt>

Les pertes annoncées sont le karaoké et les constructions propres au script : le texte se compare ligne par ligne.

La même conversion sur une entrée mal formée

Entrée

[Script Info]
; 一份真实的脏文件:BOM + CRLF + 认不出的覆写码 + Comment + 坏时间码
Title: Dirty sample
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Fonts]
fontname: Arial
!!!!!!!!!!!!!!!!!!!!!!!!!!!!

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,这是一条注释,不该变成字幕
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello, world
Dialogue: 0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\fad(300,300)}Unmodelled override
Dialogue: 0,0:00:09.00,0:00:12.00,Default,,0,0,0,,{\an7\pos(320,240)}Both, wrong order
Dialogue: 0,0:00:13.00,0:00:16.5,Default,,0,0,0,,One decimal centisecond
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Soft\nbreak
Dialogue: 0,0:00:xx.00,0:00:24.00,Default,,0,0,0,,Broken timecode

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, world</p>
<p begin="00:00:05.000" end="00:00:08.000">{\fad(300,300)}Unmodelled override</p>
<p begin="00:00:09.000" end="00:00:12.000">Both, wrong order</p>
<p begin="00:00:13.000" end="00:00:16.500">One decimal centisecond</p>
<p begin="00:00:17.000" end="00:00:20.000">Soft<br/>break</p>  </body>
</tt>

C'est le genre de dégâts que portent les vrais fichiers : fins de ligne mélangées, espaces parasites, champs vides. Comparez avec l'exemple propre ci-dessus pour voir ce que l'analyseur pardonne.

Questions fréquentes

Que garde un TTML d'un script ASS ?

Le texte et les temps de chaque Dialogue. Chaque bloc devient un élément p avec begin et end, dans un body ; le karaoké et les constructions propres au script sont écartés, et les balises d'emphase passent en éléments.

Le karaoké d'un ASS survit-il dans le TTML ?

Non : les durées par syllabe du script n'ont pas d'équivalent dans la sortie. Le TTML sait styler du texte, mais la conversion n'invente pas d'éléments pour un karaoké qu'elle ne modélise pas.

Que deviennent les codes \pos et \an7 d'un ASS dans le TTML ?

Ils sont retirés : le TTML place le contenu avec ses propres styles et régions, et la conversion n'établit pas de correspondance automatique. Le texte reste au même instant, mais le placement du script n'est pas reproduit.

Les temps au centième d'un ASS sont-ils exacts dans le TTML ?

Oui : 0:00:04.13 devient 00:00:04.130. Le TTML écrit à la milliseconde, donc la valeur gagne des zéros sans être arrondie ni décalée.

Comment un Dialogue ASS de deux lignes sort-il en TTML ?

Un seul élément p, avec un br entre les deux lignes. La paire garde un seul begin et un seul end, ce qui la maintient comme un sous-titre unique dans le document XML.

Que deviennent [Script Info], [Fonts] et [Graphics] dans le TTML ?

Ils sont perdus : le TTML a son propre en-tête et son propre vocabulaire de styles, et il ne reprend ni la table [V4+ Styles], ni les ressources [Fonts] ou [Graphics]. Les événements Comment: ne deviennent pas non plus des p.

Le script converti en TTML reste-t-il un XML valide ?

Oui : le document s'ouvre sur une déclaration XML et ferme tous ses éléments. Il est écrit en UTF-8, avec des fins de ligne Unix et sans BOM, quel que soit l'encodage du script d'origine.

Outils associés