Convertir ASS en SMI
Ou collez le texte d'un sous-titre
Ce que cette conversion change
3 éléments perdus ou à décider
- Style
tout le style sauf le gras et l'italique (couleur, contour, ombre, marges)
- 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 SMI (SAMI). Le fichier produit n'écrit ni numéros ni lignes de code temporel : chaque sous-titre est une balise SYNC Start= avec son texte dans un P, suivie d'un bloc vide qui remet l'écran à zéro.
Les deux formats ne conservent pas les mêmes choses : le style, le karaoké et les constructions propres au script n'ont pas de place dans un SMI. L'emphase écrite dans le Dialogue passe toutefois en balises b, i, u et font color, car le SAMI accepte le balisage en ligne ; la table de styles et les codes de placement sont perdus.
Un fichier ou une saison entière, traité dans le navigateur, avec un seul ZIP à la fin.
Exemples
Un fichier ASS typique, converti en SMI
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
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>Hello there.
<SYNC Start=4000>
<P>
<SYNC Start=5000>
<P><i>Italic</i> and <b>bold</b> text.
<SYNC Start=8500>
<P>
<SYNC Start=9000>
<P>Positioned
<SYNC Start=12000>
<P>
<SYNC Start=13000>
<P><c>ka</c><c>ra</c><c>o</c><c>ke</c>
<SYNC Start=16000>
<P>
<SYNC Start=17000>
<P>Line one<br>Line two
<SYNC Start=20000>
<P>
<SYNC Start=21000>
<P>Top left
<SYNC Start=24000>
<P>
</BODY>
</SAMI>
Les pertes annoncées sont le style, 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 timecodeSortie
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>Hello, world
<SYNC Start=4000>
<P>
<SYNC Start=5000>
<P>{\fad(300,300)}Unmodelled override
<SYNC Start=8000>
<P>
<SYNC Start=9000>
<P>Both, wrong order
<SYNC Start=12000>
<P>
<SYNC Start=13000>
<P>One decimal centisecond
<SYNC Start=16500>
<P>
<SYNC Start=17000>
<P>Soft<br>break
<SYNC Start=20000>
<P>
</BODY>
</SAMI>
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 SMI d'un script ASS ?
Le texte et les temps de chaque Dialogue. Chaque bloc devient une balise SYNC avec un P, suivi d'un P vide qui efface l'écran ; les codes de style et de position du script sont retirés, seules les balises d'emphase restent.
Le karaoké d'un ASS survit-il dans le SMI ?
Non : les durées par syllabe du script n'ont pas d'équivalent SAMI. Le texte reste, mais l'affichage progressif du karaoké ne peut plus être reproduit depuis la sortie.
Que devient la table de styles d'un ASS dans le SMI ?
Elle est perdue : le SAMI n'a pas de table de styles comparable, et un style nommé du script ne se retrouve pas dans un attribut SMI. Les balises écrites dans le texte, comme b ou i, passent en revanche.
Les codes \pos et \an7 d'un ASS passent-ils dans le SMI ?
Non : le SAMI ne lit pas les codes de surcharge ASS et place le texte selon ses propres règles. Le code est retiré, et la position que le script imposait ne peut pas être exprimée dans la sortie.
Comment un Dialogue ASS de deux lignes sort-il en SMI ?
Un seul P contenant une balise br entre les deux lignes, donc un seul bloc SYNC pour la paire. Le SAMI distingue les sous-titres par leurs balises SYNC, pas par le nombre de lignes du P.
Les temps au centième d'un ASS sont-ils exacts dans le SMI ?
Oui : le centième est converti en millisecondes, donc 0:00:04.13 devient Start=4130. Rien n'est arrondi au-delà du centième d'origine, et chaque bloc garde son instant.
Que deviennent [Script Info] et les événements Comment: dans le SMI ?
Ils sont perdus : ce ne sont pas des sous-titres. L'en-tête du script et les événements Comment:, Picture: ou Sound: n'ont pas de case dans un SMI, qui ne stocke que des blocs affichés.