BookTranslator
BookTranslator

Jak překládat titulky ASS/SSA bez rozbití stylů, pozic nebo karaoke

Překládejte pouze viditelný dialog v souboru .ass a poté zkontrolujte časování, tagy, karaoke a fonty. S ukázkovým souborem, bezplatným nástrojem pro kontrolu a testem lokálního LLM o 9 bězích.

BookTranslator

BookTranslator Team

12 min read

Soubor titulků ASS nebo SSA je malý program: hlavička, tabulka stylů a seznam časovaných událostí, jejichž poslední pole mísí dialog s formátovacím kódem. Chcete-li jej přeložit, změňte pouze čitelná slova v tomto posledním poli, vše ostatní ponechte bajt po bajtu beze změny a poté zkontrolujte tři věci, které za vás žádný překladatelský nástroj neopraví: fonty, kódy pro mezery a karaoke řádky.

Přeložili jsme ukázku se 14 událostmi do zjednodušené čínštiny devětkrát pomocí lokálního modelu, se třemi různými prompty, a každý výsledek jsme zkontrolovali skriptem, který jsme napsali. Časování, pozice, barvy, komentáře a kresby přežily ve všech devíti případech. Co se rozbilo, byly části souboru, které předpokládají angličtinu: ve všech devíti případech neměly fonty stylů žádné čínské znaky, takže soubor by se spoléhal na to, že přehrávač nahradí font, a pevná mezera z anglického řádku se v čínštině stala viditelnou mezerou. Karaoke řádek se vrátil s časováním ukazujícím na nesprávná slova v každém běhu a ve čtyřech bězích některé slabiky nezvýraznily vůbec nic.

Rychlá odpověď: Co překládat a co nechat být

Část souboruPříklad z naší ukázkyPřeložit?
Hlavička [Script Info]PlayResX: 1920, WrapStyle: 0Ne. Pozice se vypočítávají z těchto hodnot.
[V4+ Styles]Style: Default,Trebuchet MS,64,...Ne, kromě názvu fontu, který možná budete muset záměrně změnit
Pole událostí 1–90,0:00:01.00,0:00:03.20,Default,Jun,0,0,0,Ne. Jedná se o vrstvu, časování, styl, mluvčího, okraje a efekt.
Přepisovací bloky{\i1}, {\an8\pos(960,120)}, {\k25}Ne
Kresby{\p1}m 0 0 l 200 0 200 60 0 60{\p0}Ne. Toto je vektorový tvar, nikoli text.
Události Comment:Comment: ...,Earlier draft: Try the stacks.Volitelné. Komentáře se nikdy nezobrazují na obrazovce.
Poznámky ve složených závorkách{TL note: "stacks" means the closed shelves}Volitelné. Přehrávače je ignorují.
Viditelný dialogDid you find the second volume?Ano
Kódy řádků\N, \n, \hPonechte \N. U \n a \h rozhodujte případ od případu.

Zbytek tohoto průvodce vysvětluje, proč je každý řádek důležitý a jak zkontrolovat výsledek.

Jak je sestaven řádek ASS

Každý řádek v sekci [Events] dodržuje formát deklarovaný těsně nad ní:

Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:03.40,0:00:06.10,Default,Mara,0,0,0,,{\i1}I thought it was{\i0} sold out.

Pouze desáté pole, Text, obsahuje něco, co divák čte. Průvodce formátem souborů ASS projektu libass poznamenává, že toto poslední pole „může obsahovat čárky“, a proto neopatrné rozdělení podle každé čárky rozbije řádek jako Well, if it's there, then, we go now. Bezpečný nástroj rozděluje pouze podle prvních devíti čárek.

Uvnitř Text je cokoli ve složených závorkách přepisovací blok. Reference přepisovacích značek Aegisubu definuje kódy, se kterými se setkáte nejčastěji:

  • \N vynutí zalomení řádku ve všech režimech zalamování. \n zalomí řádek pouze v režimu zalamování 2, jinak je mezerou. \h je nedělitelná mezera.
  • \an8 nastavuje zarovnání pomocí rozložení numerické klávesnice, takže 8 je horní střed. \pos(960,120) umístí řádek na souřadnice skriptu.
  • \k25 je karaoke slabika; trvání je v setinách sekundy, takže 25 znamená čtvrt sekundy.
  • Po \p1 bude text „interpretován jako instrukce pro kreslení“, takže překladatel, který „přeloží“ m 0 0 l 200 0, zničí tvar.
  • Nerozpoznaný text ve složených závorkách „je tiše ignorován“, a proto fansub soubory často obsahují překladatelské poznámky ve složených závorkách.

Řádky začínající Comment: používají stejná pole, ale podle průvodce libass „se na obrazovce nic nezobrazí.“

Co jsme testovali

Napsali jsme sample-source.ass, scénu o 14 událostech zasazenou do knihkupectví, s jedním příkladem každé výše uvedené funkce: kurzíva, tvrdé zalomení, čárky v dialogu, poznámka ve složených závorkách, řádek komentáře, umístěný nápis, vektorový rámeček, prolínání, tvrdá mezera, změna barvy pomocí \r, měkké zalomení, efekt posouvání Banner a karaoke řádek o šesti slabikách.

Poté jsme požádali lokální model, aby jej přeložil do zjednodušené čínštiny třemi způsoby:

  1. Celý soubor. Vložte celý soubor .ass a požádejte o vrácení přeloženého souboru.
  2. Pouze text. Odešlete pouze pole Text každého dialogového řádku jako JSON, s vloženými značkami, a instrukci zachovat každý blok {...} a každý \N, \n a \h.
  3. Chráněné. Totéž, ale nejprve nahraďte každý blok ve složených závorkách a řádkový kód číslovaným zástupným symbolem a poté originály vraťte zpět.

Ve druhé a třetí podmínce skript nikdy neposílá vektorovou kresbu ani řádek komentáře modelu, takže tyto řádky mohly být poškozeny pouze v podmínce s celým souborem.

Model byl Qwen 3.6 27B (Q4_K_M) v LM Studio 0.4.8 na Apple M4 Max s 64 GB paměti, s vypnutým myšlením a teplotou 0,3. Každou podmínku jsme spustili třikrát, celkem devět běhů. První pokus o třetí běh skončil, když lokální server přerušil spojení, takže jsme jej restartovali a třetí kolo spustili znovu. Skript je run_llm_ass_test.py a všech devět výstupů je publikováno neupravených vedle něj; README uvádí každý soubor. Pokud jste nikdy nenastavovali lokální model, náš průvodce překladem s lokálním LLM pokrývá nastavení.

Byl to malý test jednoho modelu, jednoho jazykového páru a jednoho vzorku. Ukazuje, které problémy se vyskytují a jak je zachytit. Neřadí nástroje ani výzvy.

Výsledek: Mechanika přežila; anglické předpoklady ne

Každý výstup jsme zkontrolovali pomocí check_ass_translation.py. Úplný výstup je v check-results.txt a results.csv obsahuje jeden řádek na běh, včetně problémů, které skript nevidí.

KontrolaCelý souborPouze textChráněno
Časování, styly a pole 1–9 beze změny3 ze 33 ze 33 ze 3
Přepisovací tagy beze změny3 ze 32 ze 33 ze 3
Kreslicí a komentářové řádky nedotčeny3 ze 33 ze 33 ze 3
Styly písem schopné vykreslit překlad0 ze 30 ze 30 ze 3
\h a \n ponechány jako mezery v čínském textu3 ze 33 ze 33 ze 3
Všechny karaoke tagy zachovány, každý s textem3 ze 30 ze 31 ze 3

Dva výsledky nás překvapily. Vložení celého souboru zachovalo strukturu ve všech třech bězích, i když ve dvou z nich přeložilo i řádek Title v hlavičce. A prompt pouze s textem, který zní bezpečněji, vytvořil jediné poškozené tagy. V jednom běhu vrátil {\k25}翻{\k30}页,{\k45}开{\k60}灯 pro řádek se šesti karaoke tagy. Poslední dva tagy a 1,20 sekundy časování zvýraznění zmizely, takže zvýraznění by skončilo dávno před koncem řádku. Tentýž běh změnil Room\h12 is upstairs. na 12\h12号房间在楼上。, s číslem pokoje dvakrát.

Užitečná lekce tedy není „použijte prompt X“. Je to tak, že strukturální poškození, kterého se bojíte, lze snadno odhalit, a poškození, které skutečně prošlo ve všech devíti bězích, spočívá na třech místech, o kterých se stránky nástrojů pro překlad ASS nezmiňují.

1. Písma nedokážou vykreslit nový jazyk

Styly vzorku používají Trebuchet MS pro dialogy a Georgia pro nápisy, což je pro anglické vydání normální. Ani jedno z písem neobsahuje čínské znaky. Když jsme test glyfů našeho kontroloru namířili na oba soubory písem, všech 12 přeložených textových událostí v každém běhu selhalo:

ERROR   event 1: font 'Trebuchet MS' has no glyph for 9 characters, e.g. 了二你到卷吗找第?
ERROR   event 7: font 'Georgia' has no glyph for 10 characters, e.g. 书人仅作员工库架闭限

Přehrávač může nahradit nějaké jiné nainstalované písmo, takže titulky se mohou stále zobrazit, ale vydání už nekontroluje, jak vypadají, a divák, jehož systém nemá vhodné písmo, může vidět prázdné čtverečky. Řešením je záměrná úprava pole Fontname u každého stylu. Když jsme ve výstupu jednoho běhu změnili všechny tři styly na Hiragino Sans GB, čínské písmo, které je součástí macOS, a spustili test glyfů proti tomuto písmu, chyby glyfů klesly na nulu.

Vyberte písmo, které vaši diváci skutečně budou mít, nebo je přiložte k videu. Průvodce libass říká, že vydání by měla přiložit každé písmo, které používají, nejlépe do kontejneru MKV. Protože písmo cílového jazyka je nové, jeho přiložení je nyní součástí překladatelské práce.

2. Mezerníkové kódy nesou anglické zvyklosti

Room\h12 slepuje „Room“ s „12“, aby se nikdy nerozdělily na řádcích. V čínštině se slova neoddělují mezerami, ale každý běh někde \h zachoval: pět běhů ho umístilo mezi 12号房间 a 在楼上, tři před číslo a jeden mezi dvě kopie čísla. Ať tak či onak, divák vidí nadbytečnou mezeru. Wait\nhere. mělo stejný problém. S WrapStyle: 0 se \n vykreslí jako mezera, takže 在\n这里等 ukazuje mezeru uprostřed tříslovné věty.

Struktura je zde v pořádku; jazyk ne. Pro cílový jazyk bez mezer mezi slovy odstraňte \h a \n z přeloženého textu. Ponechte \N pouze tam, kde chcete vynucený zlom, a umístěte ho na přirozené místo v cílové větě. Kontrolor z tohoto důvodu hlásí změněné počty \h a \n jako varování, nikoli chyby, a varuje, když jeden z nich přežije uvnitř čínského, japonského nebo korejského textu.

3. Karaoke časování patří původním slovům

Karaoke řádek {\k25}Turn {\k30}the {\k45}page, {\k60}turn {\k40}the {\k80}light časuje každou anglickou slabiku na píseň. Překlad nemůže toto časování smysluplně zachovat, protože čínská slova nepadají na stejné doby. Naše běhy ukazují různé způsoby, jak se to pokazí:

  • Ve čtyřech bězích bylo zachováno všech šest tagů, každý na jiném slově než dříve. Jeden z nich skončil {\k40}打{\k80}开, „otevřít“, a z řádku úplně vypustil „light“.
  • Ve čtyřech bězích slabika nezvýraznila nic, například 打开{\k40}{\k80}灯 (0,40 sekundy zvýraznění na prázdné slabice). Ve dvou z nich slabika o délce 0,45 sekundy zvýraznila pouze čárku.
  • V jednom běhu dva tagy zmizely, jak je popsáno výše.

Kontrolor označí karaoke řádek přeložený na místě a jakoukoli slabiku ponechanou bez textu. Lepší řešení je redakční: nepřekládejte karaoke na místě. Ponechte původní časovaný řádek pro zpívání a přidejte překlad jako samostatnou událost: zkopírujte karaoke událost, dejte jí vlastní styl (například menší a umístěný dole), odstraňte tagy \k a přeložte text. Znovu ji načasujte slabiku po slabice, pouze pokud jste připraveni načasovat ji sami podle zvuku.

Postup, který obstojí

  1. Nejprve zajistěte čitelnost zdroje. Pokud soubor zobrazuje zkomolené znaky, opravte kódování dříve než cokoli jiného. Náš průvodce kódováním používá příklady SRT, ale stejné kroky na úrovni bajtů fungují i pro soubor .ass a zachovají původní bajty v bezpečí. Kontrolor čte pouze UTF-8 a UTF-16.

  2. Rozhodněte o rozsahu. Vypište styly a rozhodněte, které jsou dialogy, které jsou nápisy na obrazovce a které jsou karaoke. Nápisy obvykle potřebují překlad; karaoke obvykle potřebuje samostatný řádek; komentáře a poznámky ve složených závorkách je na vás, abyste rozhodli.

  3. Překládejte pouze pole Text. Použijte nástroj, který ASS parsuje, místo aby s ním zacházel jako s prostým textem, nebo si tagy ochraňte sami jako v našem třetím případě. Ponechte zdrojový soubor vedle výstupu.

  4. Spusťte strukturální kontrolu.

    python3 check_ass_translation.py source.ass translated.ass
    

    Porovnává počet událostí, typy událostí, pole 1–9, hodnoty stylů, bloky override, kresby, řádky komentářů, \N, karaoke slabiky a jejich trvání a řádky, které se vrátily prázdné nebo nezměněné. Nehodnotí kvalitu překladu.

  5. Opravte fonty záměrně. Změňte Fontname v každém stylu, který nyní obsahuje text v cílovém jazyce, a poté spusťte test glyfů proti souboru fontu, který budete distribuovat:

    pip install fonttools
    python3 check_ass_translation.py source.ass translated.ass --font "Noto Sans SC=/path/to/NotoSansSC-Regular.otf"
    

    Změněný název fontu se zobrazí jako varování, takže můžete potvrdit, že každá změna byla zamýšlená.

  6. Vyčistěte mezery a karaoke podle výše uvedeného popisu.

  7. Zkontrolujte to s videem. Otevřete soubor v Aegisub nebo ve svém přehrávači. Zkontrolujte, zda cedule stále sedí do tvarů nakreslených pod nimi, protože rámeček \p si zachovává anglickou velikost, zatímco přeložená cedule může být mnohem delší nebo kratší. Zkontrolujte, zda řádky nejsou příliš dlouhé na dobu, po kterou jsou na obrazovce. Ani jeden z těchto problémů není v souboru samotném vidět.

Kam zapadá BookTranslator

Překladač titulků BookTranslator přijímá soubory SRT, VTT, ASS a SSA. Podle stránky produktu zachovává časové značky a pořadí titulků a udržuje podporované stylování ASS a SSA připojené ke každé položce titulků, takže nemusíte text sami extrahovat a vkládat zpět. Dialogy překládá s okolními řádky jako kontextem, což pomáhá se jmény a opakujícími se vtipy v celé epizodě.

Tento vzorek jsme pro tento článek nespouštěli přes BookTranslator. Ať už použijete jakýkoli nástroj, proveďte na výsledku kroky 4 až 7. Styl, který si zachová anglický font, je stále styl, který nedokáže vykreslit čínštinu, a karaoke přeložené na místě stále vyžaduje redakční rozhodnutí. Zbytek pracovního postupu s titulky najdete v našem průvodci překladem titulků pomocí AI, v našem srovnání softwaru pro překlad titulků a pokud váš překlad míří na YouTube, v pracovním postupu pro titulky na YouTube.

Kdy místo toho převést na SRT

Převod ASS na SRT před překladem odstraní styly, pozice, kresby a karaoke, což také odstraní většinu výše uvedených problémů. To je rozumná výměna, pokud vaše cílová platforma zobrazuje pouze prosté titulky nebo pokud stylování nikdy nebylo pro vydání důležité. Je to špatná výměna pro anime a hudební vydání, kde jsou cedule a karaoke součástí díla. Rozhodněte se podle toho, kde bude soubor zobrazen, ne podle toho, který formát se snáze překládá.

Získejte testovací soubory

Vše z tohoto testu lze zdarma znovu použít:

Související příspěvky