Naar de hoofdinhoud
SubtitleMatrix

ASS naar LRC

FormaatconversieAdvanced SubStation Alpha (ASS)
Of plak ondertiteltekst

Wat deze conversie verandert

5 dingen vervallen of vragen om een beslissing

  • Timing

    de eindtijden van blokken (het uitvoerformaat legt alleen vast wanneer een blok begint)

  • 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 LRC, het formaat dat songtekstspelers lezen. LRC bewaart per regel wanneer hij begint, en niets anders: geen eindtijd en geen documentlaag. Elke Dialogue-regel wordt dus één regel met een tijdstempel tussen vierkante haken, in de volgorde waarin de cues staan. De titel uit het script komt over als een ti-tag bovenaan.

Dat kost nogal wat. De eindtijden verdwijnen, omdat een songtekstspeler een regel in beeld houdt tot de volgende begint. De tijd wordt in centiseconden bewaard, dus 0:00:04.13 blijft 4,13 seconden en een cue kan hooguit 5 ms verschuiven. Alle opmaak valt weg: cursief, vet, kleur, lettertype en rand hebben in LRC geen plek. Positie en karaoketiming verdwijnen ook, en van het Script Info-blok blijft alleen de titel over.

Het verliesoverzicht noemt alle punten voordat je iets laadt, en de omzetting zelf draait lokaal in je browser.

Voorbeelden

Een typisch ASS-bestand, omgezet naar LRC

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

[ti:Example]
[00:01.00]Hello there.
[00:05.00]Italic and bold text.
[00:09.00]Positioned
[00:13.00]karaoke
[00:17.00]Line one
[00:17.00]Line two
[00:21.00]Top left

In deze uitvoer verloren: timing, 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

[ti:Dirty sample]
[00:01.00]Hello, world
[00:05.00]{\fad(300,300)}Unmodelled override
[00:09.00]Both, wrong order
[00:13.00]One decimal centisecond
[00:17.00]Soft
[00:17.00]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

Wat gebeurt er met de eindtijd van elk ASS-blok in LRC?

Die valt weg. LRC legt alleen vast wanneer een regel begint; een songtekstspeler laat hem staan tot de volgende regel komt, dus een eindtijd zou overbodig zijn. Elke ASS-start blijft onaangeroerd.

Wat gebeurt er met vet, cursief en kleur van ASS naar LRC?

LRC bewaart geen opmaak van welke soort dan ook. Cursief, vet, kleur, lettertype, rand en schaduw hebben geen plek, en elke regel wordt als platte tekst geschreven. De woorden zelf blijven onaangeroerd.

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

Die verdwijnt. LRC kent geen schermpositie: het is een lijst regels met een begintijd, en een songtekstspeler beslist zelf waar hij ze toont. Positie- en hoekcodes uit het script worden dus weggelaten.

Wat gebeurt er met karaoketiming van ASS naar LRC?

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

Wat gebeurt er met het Script Info-blok van ASS in LRC?

Elke Dialogue-regel wordt een songtekstregel, en de titel komt over als een ti-tag. Al het andere gaat weg: de stijltabel, de overige Script Info-sleutels, eventuele Comment-regels en alles wat in Fonts of Graphics is ingebed. LRC kent geen script, alleen regels en wanneer ze beginnen.

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

Als LRC: geen cue-nummers en geen tijdstempelregel — elke regel draagt zijn eigen tijdstempel tussen vierkante haken, gevolgd door de tekst. Elke ASS-cue wordt één LRC-regel, in dezelfde volgorde, met dezelfde woorden.

Hoe komt een ASS-blok van twee regels in LRC terecht?

Als twee regels met dezelfde tijdstempel, de manier waarop LRC zegt dat ze bij elkaar horen. Het paar blijft bij elkaar: de twee ASS-regels horen in de LRC-uitvoer nog steeds bij één ondertitel, en een speler toont ze samen.

Blijft de volgorde van ASS-blokken bewaard in LRC?

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

Kan ik de LRC daarna weer naar ASS omzetten?

Ja, maar die richting moet de eindtijden verzinnen die LRC nooit heeft bewaard, en dat staat als verlies in het overzicht van die pagina. De stijltabel, de positie en de karaoketiming van het oorspronkelijke script komen ook niet terug.

Behoudt de LRC-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-LRC.

Gerelateerde hulpmiddelen