SUP (PGS) naar SRT
De eerste run downloadt de tekstlezer — ongeveer 4 MB plus het taalmodel, door deze site geleverd en daarna door de browser gecachet. Niets wordt geüpload, en het resultaat is machinaal gelezen: lees het proef voordat je erop vertrouwt.
Opties
Een bitmapondertitel is een afbeelding van tekst, dus de woorden moeten er weer uit worden gelezen. Vertel de lezer in welke taal de ondertitels zijn geschreven — de lijst dekt elke taal waarin deze site verschijnt. Russische ondertitels met het Engelse model gelezen komen er als ruis uit, niet als Russisch. Alleen het model dat je kiest wordt gedownload (de andere nooit), dus wisselen kost één download per taal, daarna uit de cache.
Een .sup-bestand is een PGS-stroom, het beeldondertitelformaat dat Blu-ray-schijven gebruiken. Er staat geen enkel teken in: elke ondertitel is opgeslagen als een bitmap, samen met een palet en het moment waarop hij moet verschijnen, en een speler legt hem over de video heen. Er tekst uit halen betekent dus de letters in elk beeld lezen. Deze pagina doet dat in de tab met een tekstherkenningsengine die de site zelf serveert, en schrijft het resultaat als een .srt-bestand.
Het formaat is een reeks segmenten, elk met een header van dertien bytes die een presentatietijdstempel in eenheden van 90 kHz, een type en een lengte draagt. Vier typen doen ertoe: de paletdefinitie (PDS), die indexwaarden via YCbCr naar volledige RGB vertaalt; de objectdefinitie (ODS), die één run-lengthgecodeerde bitmap bevat; de presentatiesamenstelling (PCS), die zegt welke objecten waar op het frame staan; en de displayset die ze stapelt. De start van een blok is de tijdstempel van de displayset die hem toont. Een PGS-stroom draagt helemaal geen eindtijd — een ondertitel blijft op het scherm tot de volgende displayset hem vervangt — dus het einde van elk blok is hier de start van het volgende, precies wat een speler doet.
Omdat elk blok door een machine wordt gelezen, is de tekst een lezing en geen transcriptie: een schreefletter op een kleine maat, een ongewone font of een zware rand kan een teken in een ander teken veranderen. Proeflees het bestand voordat je erop vertrouwt. Die waarschuwing is geen standaardzinnetje — dit is de enige plek op deze site waar de uitvoer niet is afgeleid van wat het bestand zei, en de pagina zegt dat in plaats van het resultaat als exact te presenteren.
Kies de taal waarin de ondertitels werkelijk zijn geschreven. De lijst dekt elke taal waarin deze site verschijnt; elk model leest zijn eigen schrift. Een Engels model op Japanse ondertitels loslaten levert ruis op in plaats van een slechte vertaling, omdat de herkenner naar vormen zoekt die er niet zijn. Alleen het model dat je kiest wordt gedownload, en daarna is het gecacht.
Blokken waarvan de beelden helemaal geen tekst opleveren — een fade-frame, een logo, een zwart blok — worden weggelaten en in het verliesoverzicht geteld in plaats van als lege regels geschreven. Alles wat een afbeelding was blijft in wezen een afbeelding: font, kleur, rand en positie op het scherm bestaan niet in een .srt, en het verliesoverzicht zegt dat één keer voor het hele bestand.
Veelgestelde vragen
Wat zit er in een .sup-bestand dat van SRT-conversie een herkenningstaak maakt?
Segmenten, geen tekens. Elke ondertitel in een PGS-stroom is een object: een run-lengthgecodeerde bitmap van paletindexen, plus een paletdefinitie die die indexen in RGB verandert. De enige tekstachtige waarden in het bestand zijn de presentatietijdstempels, en dat zijn gehele getallen van 90 kHz in plaats van iets dat iemand leest. Dat naar SRT omzetten betekent elke bitmap op een canvas leggen en de letters herkennen, en daarom moet het resultaat worden proefgelezen en vraagt de pagina naar de taal van de ondertitels.
Waarom eindigt de laatste ondertitel in de uitvoer een paar seconden later dan hij zou moeten?
Omdat PGS nooit zegt wanneer een ondertitel eindigt. Een speler toont een samenstelling tot de volgende arriveert of tot de stroom wordt gewist, dus de enige eindtijd die in het bestand bestaat is de start van de volgende. Voor het laatste blok is er geen volgende; de pagina geeft het twee seconden en legt die keuze vast in het verliesoverzicht. Bleef de disc zijn laatste regel werkelijk tien seconden staan, dan is de eerlijke oplossing een verschuiving of een duurcorrectie, niet een gok die in de converter wordt verstopt.
Welk taalmodel moet ik kiezen voor ondertitels met zowel Japanse als Engelse regels?
Dat van de taal waarin het grootste deel van de dialoog staat. Een PGS-frame kan schriften in één regel mengen — een Japanse zin met een Engelse leenwoord in Latijnse letters komt vaak voor — maar de herkenner krijgt één model per run, en een model dat op het ene schrift is getraind leest het andere als onzin. Wisselt het bestand werkelijk tussen twee schriften, laat het dan twee keer lopen, één keer per taal, en houd de regels die elke doorgang goed had: de uitvoer is een gewone .srt, dus de twee samenvoegen is een diff, geen nieuwe export.
Worden de kleuren van de ondertitels overgenomen in de SRT?
Nee, en dat kan niet. Een .sup codeert kleur drie keer: in het palet (YCbCr met een alfakanaal, per blok), in de samenstelling (waar de bitmap op een frame van 1920×1080 staat) en in de rand en schaduw die in de bitmap zelf zijn getekend. SRT heeft geen van die plekken. De pagina leest de luminantie van elke pixel om te beslissen wat inkt is en wat achtergrond, wat alles is wat OCR nodig heeft, en het verliesoverzicht meldt opmaak één keer voor het bestand in plaats van te doen alsof de kleuren het hebben overleefd.
Sommige blokken kwamen leeg of ontbrekend eruit. Wat is ermee gebeurd?
Een beeld dat geen tekst opleverde is weggegooid in plaats van als leeg blok geschreven. Dat gebeurt bij fade-in- en fade-outframes, bij blokken die alleen een logo of symbool zijn, en bij zeer kleine tekst onder de maat die de herkenner kan oplossen. Elk geval wordt in het verliesoverzicht geteld, zodat het bestand dat je krijgt niet stilzwijgend korter is dan het bestand dat je gaf. Is het aantal hoog, dan is de gebruikelijke oorzaak het verkeerde taalmodel of een stroom waarvan de bitmaps ongewoon klein zijn.
Wordt het .sup-bestand of worden de beelden ergens naartoe geüpload?
Nee. De herkenner draait in de tab, en zijn worker, WebAssembly-core en taalmodel worden allemaal vanaf deze site geserveerd en door de browser gecacht. De enige verzoeken die de pagina doet zijn voor die bestanden. Dat is hier belangrijker dan op een tekstpagina: een PGS-stroom die van een disc is geëxtraheerd is vaak juist het materiaal dat een studio of een jurist het minst graag aan een derde geeft, en het hele punt van deze pagina is dat dat niet hoeft.