Aller au contenu principal
SubtitleMatrix

Convertir ASS en CSV

Conversion de formatsAdvanced SubStation Alpha (ASS)
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 timecode

Sortie

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.

Outils associés