ASS naar CSV
Of plak ondertiteltekst
Wat deze conversie verandert
4 dingen vervallen of vragen om een beslissing
- Opmaak
alle opmaak (vet, cursief, kleur, contour, schaduw)
- Positionering
positionering op het scherm (elk blok keert terug naar de standaardpositie)
- Karaoke
karaoke-timing (markering per lettergreep)
- Formaatspecifieke inhoud
inhoud die het bronformaat buiten zijn blokken bewaart (blokken die geen ondertitel zijn, koptekst, instellingen per blok, uitgecommentarieerde gebeurtenissen) — het doelformaat heeft er geen plek voor
Deze lijst komt uit de capaciteitenmatrix voor deze twee formaten, niet uit het bestand dat je hebt geladen. Een specifiek bestand kan meer verliezen wanneer het kenmerken gebruikt die het formaat toestaat maar de matrix niet modelleert.
Deze pagina schrijft een ASS-script als een spreadsheet: de kolommen start, end en text met een kopregel erboven, en één cue per rij. De tijdstempels krijgen een punt in plaats van een komma — 00:00:04.130 — omdat de komma het scheidingsteken tussen velden is en een ruwe ASS-tijd de rij in stukken zou knippen. Een veld met een komma of regeleinde wordt tussen aanhalingstekens gezet, zodat een cue van twee regels één rij blijft.
Wat het script als geheel zegt, heeft in een tabel geen plek. De stijltabel, de rest van het Script Info-blok, de Comment-regels en de ingebedde lettertypen en afbeeldingen vallen weg. Wat per stuk tekst bij de woorden hoort, blijft wel staan: cursief en vet worden tags in de cel, en karaokelettergrepen worden gemarkeerd, zodat je ze in de tabel kunt terugvinden.
Een tabel is de moeite waard zodra je op tijd wilt sorteren, overlappende blokken wilt vinden of het werk aan iemand anders wilt geven. Terug omzetten kan ook, en alles gebeurt in je browser.
Voorbeelden
Een typisch ASS-bestand, omgezet naar CSV
Invoer
[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
Uitvoer
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
In deze uitvoer verloren: styling, positionering, karaoke en formaateigen inhoud. Al het andere komt regel voor regel overeen.
Dezelfde omzetting op een rommelige invoer
Invoer
[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 timecodeUitvoer
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"
Zo zien echte bestanden eruit — gemengde regeleinden, losse spaties, lege velden. Vergelijk met het nette voorbeeld hierboven om te zien wat de parser vergeeft.
Veelgestelde vragen
Overleven vet en cursief van ASS naar CSV?
De nadruk wel, de stijltabel niet. Opmaak die bij een stuk tekst hoort — vet, cursief, onderstreept, een kleur — wordt als tag in de CSV-tekst geschreven, want dat is het enige soort styling dat een cue-formaat nog kan dragen. Wat verloren gaat, is wat het script globaal zei: lettertype, grootte, rand, schaduw en marges.
Wat gebeurt er met de positie op het scherm van ASS naar CSV?
CSV kan niet zeggen waar een ondertitel wordt getekend, dus de positie-, hoek- en verplaatsingscodes worden bij het verlaten van ASS weggelaten. Elke cue valt terug op de standaardpositie die de speler kiest — bij de meeste spelers onderaan het beeld, gecentreerd.
Wat gebeurt er met karaoketiming van ASS naar CSV?
De timing gaat weg, de woorden blijven. Karaoke zit in de codes die een ASS-event draagt en die markeren wanneer elke lettergreep oplicht; CSV kan geen moment binnen een regel vastleggen, dus de markeringen verdwijnen en de lettergrepen komen als gewone CSV-tekst aan. In de uitvoer zijn ze wel als stukjes gemarkeerd, zodat je ze terugvindt.
Wat gebeurt er met het Script Info-blok en de rest van het script in CSV?
Alleen de Dialogue-regels worden ondertitels. Het Script Info-blok (de titel inbegrepen — CSV heeft er geen plek voor), de stijltabel, eventuele Comment-regels en alles wat in Fonts of Graphics is ingebed, vallen weg. Voor een ASS-bestand waarvan de styling met de hand is geschreven, is dat het verlies dat het meest opvalt.
Hoe ziet de CSV-uitvoer eruit als ASS wordt omgezet?
Als CSV: een kopregel met start, end en text, en daarna één rij per cue. Elke ASS-cue wordt één CSV-cue, in dezelfde volgorde, met dezelfde tekst. De tijdstempels staan met een punt, omdat de komma al het scheidingsteken is.
Zijn de ASS-tijden exact in het CSV-bestand?
Ja, tot op de milliseconde — fijner gaat geen van beide formaten. ASS schrijft een moment als 0:00:04.13 en CSV schrijft hetzelfde moment als 00:00:04.130; niets wordt afgerond of verschoven, en een cue die 2,9 seconden in beeld was, blijft dat.
Hoe komt een ASS-blok van twee regels in CSV terecht?
Als twee regels binnen de ene tekstcel, tussen aanhalingstekens zoals CSV dat vereist. Het paar blijft bij elkaar: de twee ASS-regels horen in de CSV-uitvoer nog steeds bij één ondertitel.
Blijft de volgorde van ASS-blokken bewaard in CSV?
Ja, en ze worden onderweg op begintijd gesorteerd — vroegste eerst, zoals elke tabellezer en speler ze verwacht. Stond je ASS-bestand niet in tijdsorde, dan zet de CSV-uitvoer de rijen terug in de juiste; dat is een structurele wijziging, geen inhoudelijke.
Kan ik de CSV daarna weer naar ASS omzetten?
Ja, en die richting heeft zijn eigen lijst: CSV naar ASS verliest precisie, omdat ASS in honderdsten van een seconde denkt. Die lijst verschilt van de lijst hierboven omdat de twee formaten verschillende dingen bewaren.
Behoudt de CSV-uitvoer de tekencodering van het ASS-bestand?
Nee — de uitvoer is UTF-8, met Unix-regeleinden en zonder byte-order mark, wat het ASS-bestand ook gebruikte. Een bestand in UTF-16 of een Windows-eenbytecodering wordt bij het inlezen gedecodeerd (het resultatenpaneel zegt dat erbij); wat eruit komt is altijd dezelfde UTF-8-CSV.