Convertir ASS en CSV
Ou collez le texte d'un sous-titre
Ce que cette conversion change
4 é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)
- 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 CSV. Le fichier produit reprend la chronologie et le texte dans un tableau à trois colonnes — start, end, text — avec une ligne d'en-tête et un bloc par ligne.
Un CSV ne stocke ni style, ni position, ni karaoké : tout ce que le script portait autour du texte est perdu. Ce qui sort est le contenu des Dialogue, avec les codes temporels convertis du centième à la milliseconde, et les balises d'emphase écrites dans le texte, car le CSV conserve le balisage en ligne.
Un fichier ou une saison entière, traité dans le navigateur, avec un seul ZIP à la fin.
Exemples
Un fichier ASS typique, converti en CSV
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
start,end,text
00:00:01.000,00:00:04.000,Hello there.
00:00:05.000,00:00:08.500,<i>Italic</i> and <b>bold</b> text.
00:00:09.000,00:00:12.000,Positioned
00:00:13.000,00:00:16.000,<c>ka</c><c>ra</c><c>o</c><c>ke</c>
00:00:17.000,00:00:20.000,"Line one
Line two"
00:00:21.000,00:00:24.000,Top left
Les pertes annoncées sont le style, le positionnement, 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
start,end,text
00:00:01.000,00:00:04.000,"Hello, world"
00:00:05.000,00:00:08.000,"{\fad(300,300)}Unmodelled override"
00:00:09.000,00:00:12.000,"Both, wrong order"
00:00:13.000,00:00:16.500,One decimal centisecond
00:00:17.000,00:00:20.000,"Soft
break"
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 CSV d'un script ASS ?
Le texte et les temps des événements Dialogue, rien d'autre. Le tableau a trois colonnes, start, end et text, et chaque Dialogue devient une ligne ; la table de styles, les codes de placement et le karaoké n'ont aucune colonne.
Les codes de position ASS comme \pos ou \an7 passent-ils dans le CSV ?
Non : le CSV ne place pas un sous-titre. Un code \pos(320,240) ou \an7 est retiré avec le reste du positionnement, et la cellule text ne contient que le texte visible et ses balises d'emphase.
Le karaoké \k et \kf d'un ASS survit-il dans le CSV ?
Non : les durées de karaoké par syllabe n'ont pas de colonne et sont écartées. Le texte reste, mais l'animation qui liait chaque syllabe à un instant ne peut plus être reconstituée depuis le CSV.
Que deviennent [Script Info], [Fonts] et [Graphics] dans le CSV ?
Ils sont perdus : ce sont des constructions du script, pas des sous-titres. Le CSV ne stocke que des blocs, donc l'en-tête, la table de styles et les ressources embarquées n'ont aucun endroit où aller.
Les balises de gras et d'italique d'un ASS restent-elles dans le CSV ?
Oui : l'emphase écrite dans le texte du Dialogue est recopiée en balises dans la cellule. Ce que la table de styles déclarait — police, taille, couleurs, ombre, marges — est en revanche perdu, car il ne vit pas dans le texte.
Comment un Dialogue de deux lignes sort-il dans une cellule CSV ?
Sur deux lignes à l'intérieur de la cellule text, entre guillemets comme le demande le CSV. Le début et la fin restent uniques au bloc, donc la paire garde son statut de sous-titre unique.
Les temps ASS sont-ils exacts dans le CSV ?
Oui : le centième du script est converti en milliseconde, donc 0:00:04.13 devient 00:00:04.130. Le CSV écrit le point, la valeur ne bouge pas et rien n'est arrondi au-delà du centième d'origine.