Gå til hovedindholdet
SubtitleMatrix

Fjern ASS-override-tags fra undertekster

Tekst og formateringFjern markup og tags
Eller indsæt underteksttekst

Indstillinger

Én boks, syv valg, og hvert valg har sin egen side. Kursiv, fed, understregning og farve fjerner netop den ene slags interval og lader resten af linjens formatering være. Alle fjerner hvert interval, som værktøjet modellerer – de fire plus karaoke-timing – mens alt andet i teksten lades urørt. HTML gør det samme og fejer derefter også den vinkelbeslag-markering væk, der blev efterladt i teksten, fordi værktøjet ikke modellerer den, som VTT's <v Bob>-talerkoder og <c.className>. ASS gør det samme for override-blokke i stedet og rydder de {...}-koder, der ikke blev genkendt ved parsing, som {\fad(500,500)}. Denne side udfylder boksen med det valg, dens titel nævner, og viser ingen andre.

Hvilken billedhastighed tiderne tælles i. På formatsiderne er det, hvad MicroDVD har brug for, fordi formatet gemmer tider som billednummer. På siderne om billedhastighed er det den hastighed, filen blev timet efter – den version, underteksterne blev lavet til – og sidens anden boks tager hastigheden for den video, du skal bruge dem med. 23,976, 24, 25, 29,97, 30, 50, 59,94 og 60 er de almindelige. Tager man fejl, forskydes hele tidslinjen, og på siderne om billedhastighed forskydes den med et forhold i stedet for et fast beløb.

Denne side rydder override-koderne ud af en ASS- eller SSA-fil: formateringsrangerne, karaoketimingen, de tiloversblevne effektblokke og placeringen. Tilbage står ren tidsbestemt tekst — ordene, tekstblokkens tider og filens egen struktur, med linjerne siddende dér, hvor deres navngivne typografi anbringer dem.

ASS er det format, der kan sige mest, og det meste af det, det kan sige, er skrevet som override-koder inde i teksten på en linje. Nogle af de koder er formatering, som værktøjet modellerer — {\i1}, {\b1}, {\c&H...&}, {\k50} — og nogle er effekter, det ikke gør: fading, flyt, skalering, sløring, alle skrevet som blokke i samme form. De umodellerede blokke bliver med vilje liggende i teksten, mens filen læses, fordi at spise markup, værktøjet ikke kan læse, ville være at miste data. Det er denne side, der fejer dem væk.

Placeringen ryddes også her, og det er den ene ting, siden gør, som ikke bare er at fjerne markup: hvor en linje sidder, er en egenskab ved hele tekstblokken frem for ved et interval i teksten, så en placeret linje falder tilbage til dér, hvor dens navngivne typografi anbringer den. Det er det, der gør resultatet virkelig rent. Selve typografiarket lades i fred — en tekstblok med fed typografi ser stadig fed ud, fordi fedheden tilhører typografien og ikke teksten.

Én kode bliver stående, og siden siger det, i stedet for at lade dig opdage det: en ni-cellers justering som {\an8} bevares, som den er skrevet. Den koder både lodret og vandret placering, mens værktøjets egen idé om justering kun dækker venstre, center og højre, så der er intet sted at gemme den anden halvdel. At forstå den halvt ville give en fil, der runder forkert. Intet uploades; en fil uden noget at fjerne kommer ud byte for byte.

Eksempler

Formatering og en tiloversbleven effektblok

Input

[Script Info]
Title: fade

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\fad(500,500)}{\i1}hello{\i0}

Resultat

[Script Info]
Title: fade

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,hello

{\fad(500,500)} beder afspilleren fade linjen ind og ud over en halv sekund hver vej. Værktøjet har aldrig modelleret den, så den blev liggende i teksten, indtil denne kørsel fejede den væk — og kursiv-paret ved siden af går samme vej og efterlader selve linjen. Intet i resultatet fortæller, at faden nogensinde var der.

En placeret linje

Input

[Script Info]
Title: position

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\pos(100,200)}hello there

Resultat

[Script Info]
Title: position

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,hello there

Linjen får ikke længere at vide, hvor den skal sidde, så den falder tilbage til dér, hvor typografien på hændelsen anbringer den. Det er den ene del af kørslen, som ikke blot fjerner markup, og det er derfor, siden er den rigtige for en fil, der skal blive ren og ikke bare ufremhævet.

En ni-cellers justering, der bliver stående

Input

[Script Info]
Title: alignment

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\an8}hello there

Resultat

[Script Info]
Title: alignment

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\an8}hello there

Denne kommer uændret ud, og det er ikke en forglemmelse. {\an8} siger både top og center på én gang, mens værktøjets justering kun dækker venstre, center og højre — den lodrette halvdel har ingen plads, så taggen bevares helt frem for at blive halvt forstået. Placeringskoden ryddes, denne gør ikke.

Ofte stillede spørgsmål

Hvorfor overlever en ni-cellers justering som {\an8} denne kørsel, når {\pos} forsvinder?

Fordi værktøjet ikke kan gengive den præcist. En justering som {\an8} navngiver én af ni celler og koder dermed en vandret og en lodret placering på samme tid, mens værktøjets egen justering kun har venstre, center og højre. At gemme den vandrette halvdel og smide den anden væk ville gøre filen forkert ved rundkørsel, så taggen bevares ordret. Placeringskoden ryddes, justeringskoden gør ikke, og siden siger det frem for at lade dig bemærke det.

Hvad er en override-blok, og hvorfor stod den inde i selve teksten?

Det er et sæt instrukser skrevet inde i en linjes tekst, mellem krølleparenteser, som fortæller afspilleren at gøre noget ved den linje: ændre formateringen, animere den, fade den, flytte den. Værktøjet modellerer det almindelige formateringssubset og læser det ind i sin egen struktur, men lader resten ligge præcis, hvor det fandt det — fading, flyt, sløring og lignende bevares ordret frem for at blive kasseret, fordi at kassere markup, læseren ikke forstår, ville være at miste data i stilhed. Denne side er, hvor de endelig forsvinder.

Ændrer rydningen af override-koderne tekstblokkenes tider eller ordene i dem?

Nej. Ordene kommer ud byte for byte, hver tekstblok beholder sin start og slutning til millisekundet, og rækkefølgen er filens egen. Linjeskift inde i en tekstblok er en del af tekstblokken frem for af dens formatering, så de bliver, hvor filen satte dem. Det, der ændrer sig, er instrukserne omkring ordene, og i nogle tilfælde hvor linjen sidder på skærmen.

Hvad sker der med de navngivne typografier i [V4+ Styles] efter denne kørsel?

De lades præcis, som de var, og det gør den typografi, hver tekstblok peger på, også. Siden arbejder på de koder, der er skrevet inde i teksten på en linje, og en tekstblok, hvis navngivne typografi er fed, ser stadig fed ud bagefter, fordi fedheden kommer fra typografien frem for fra linjens egen tekst. At rense et typografiark er en anden opgave, og der er endnu ingen side til den.

Kan jeg bruge siden på en SRT-fil, eller virker den kun på ASS og SSA?

Du kan droppe ethvert af de formater, sitet læser, ind i den. På en SRT- eller WebVTT-fil gør den første halvdel stadig sit arbejde — formateringsrangerne forsvinder — og fejningen finder simpelthen intet, da krølleparentesblokke ikke forekommer i de formater. En fil, der hverken har formatering eller krølleparentesblokke, kommer ud byte for byte, og det er det ærlige resultat af en kørsel uden noget at lave.

Hvad sker der med en override-kode, hvor den åbne krølleparentes aldrig lukkes?

Den bliver stående. Fejningen kræver en lukket krølleparentes, så en blok som {\fad(500,500 uden en afsluttende parentes betragtes som en misdannet fil og efterlades, som den er. Det er en bevidst konservativ regel: et manglende parentespar kan lige så godt være et tegn, brugeren skrev i dialogen, og at gætte, hvor blokken slutter, ville fjerne tekst, der aldrig var markup.

Relaterede værktøjer