Naar de hoofdinhoud
SubtitleMatrix

ASS naar SBV

FormaatconversieAdvanced SubStation Alpha (ASS)
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 zet een ASS-script om naar SBV, het ondertitelformaat dat YouTube voor zijn eigen uploads schreef. De vorm is eenvoudig: een begintijd, een komma, een eindtijd, dan de tekst, met een lege regel tussen blokken. Er zijn geen cue-nummers en geen kop, dus de stijltabel en het Script Info-blok vallen weg; de woorden, de regeleinden en de tijden gaan mee.

De tijdstempels worden in SBV-notatie herschreven — 0:00:01.000, één cijfer voor het uur en een punt vóór de milliseconden — en ze benoemen dezelfde momenten als de 0:00:01.00 waar ze vandaan komen, nu tot op de milliseconde. Cursief en vet overleven als tags, en karaokelettergrepen blijven als gemarkeerde stukjes tekst staan. Positie en de rest van de stijltabel gaan verloren.

Wat niet meekan, is het script als geheel: het Script Info-blok, de Comment-regels en de ingebedde lettertypen en afbeeldingen. SBV kent alleen cues. Het verliesoverzicht noemt het, en de omzetting draait in je browser.

Voorbeelden

Een typisch ASS-bestand, omgezet naar SBV

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

0:00:01.000,0:00:04.000
Hello there.

0:00:05.000,0:00:08.500
<i>Italic</i> and <b>bold</b> text.

0:00:09.000,0:00:12.000
Positioned

0:00:13.000,0:00:16.000
<c>ka</c><c>ra</c><c>o</c><c>ke</c>

0:00:17.000,0:00:20.000
Line one
Line two

0:00:21.000,0: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 timecode

Uitvoer

0:00:01.000,0:00:04.000
Hello, world

0:00:05.000,0:00:08.000
{\fad(300,300)}Unmodelled override

0:00:09.000,0:00:12.000
Both, wrong order

0:00:13.000,0:00:16.500
One decimal centisecond

0:00:17.000,0: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 SBV?

Ja. SBV schrijft de tekst van de cue ongewijzigd uit, dus een cursief of vet stuk in je ASS-event komt er als cursieve of vette tag weer uit. Wat niet meekomt, is de stijltabel: lettertype, grootte, kleur, rand, schaduw en marges horen bij het script en SBV kent geen scriptlaag.

Wat gebeurt er met de positie op het scherm van ASS naar SBV?

Die gaat verloren. SBV kent geen schermpositie: een speler toont de ondertitel op zijn eigen standaardplaats. Positie-, hoek- en verplaatsingscodes uit het ASS-script worden dus weggelaten, en de tekst komt zonder plaatsingsinformatie aan.

Wat gebeurt er met karaoketiming van ASS naar SBV?

De timing gaat weg, de woorden blijven. Karaoke zit in de codes die een ASS-event draagt en die markeren wanneer elke lettergreep oplicht; SBV kan geen moment binnen een regel vastleggen, dus de markeringen verdwijnen en de lettergrepen komen als gewone SBV-tekst aan, wel als stukjes gemarkeerd zodat je ze terugvindt.

Wat gebeurt er met het Script Info-blok en de rest van het script in SBV?

Alleen de Dialogue-regels worden ondertitels. Het Script Info-blok (de titel inbegrepen — SBV heeft er geen plek voor), de stijltabel, eventuele Comment-regels en alles wat in Fonts of Graphics is ingebed, vallen weg. Voor een script waarvan de styling met de hand is geschreven, is dat het verlies dat het meest opvalt.

Hoe ziet de SBV-uitvoer eruit als ASS wordt omgezet?

Als SBV: geen cue-nummers en geen kop — een regel met de twee tijden erop, en dan de tekst. Elke ASS-cue wordt één SBV-cue, in dezelfde volgorde, met dezelfde tekst.

Zijn de ASS-tijden exact in het SBV-bestand?

Ja, tot op de milliseconde — fijner gaat geen van beide formaten. ASS schrijft een moment als 0:00:04.13 en SBV schrijft hetzelfde moment als 0: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 SBV terecht?

Als twee regels, de ene onder de andere. Het paar blijft bij elkaar: de twee ASS-regels horen in de SBV-uitvoer nog steeds bij één ondertitel, en een speler toont ze samen.

Blijft de volgorde van ASS-blokken bewaard in SBV?

Ja, en ze worden onderweg op begintijd gesorteerd — vroegste eerst, zoals een speler ze verwacht. Stond je ASS-bestand niet in tijdsorde, dan zet de SBV-uitvoer de blokken terug in de juiste; dat is een structurele wijziging, geen inhoudelijke.

Kan ik de SBV daarna weer naar ASS omzetten?

Ja, en die richting heeft zijn eigen lijst: SBV naar ASS verliest precisie, omdat ASS in honderdsten van een seconde denkt. De oorspronkelijke stijltabel, positie en karaoketiming komen daarbij ook niet terug.

Behoudt de SBV-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; wat eruit komt is altijd dezelfde UTF-8-SBV.

Gerelateerde hulpmiddelen