Oma projekt: eestikeelsete animafilmide kogu · 2026
Resync: eestikeelne dublaaž Blu-ray pildile, kaadri täpsusega
Automaatne töövoog, mis paneb vana eestikeelse DVD-filmi heli Blu-ray pildi alla täpselt õigesse kohta. Tulemus näeb välja peaaegu nagu Blu-ray originaal, aga fail on 13,7 korda väiksem.
Eesmärk
Paljudest eesti keelde dubleeritud animafilmidest on alles ainult vanad DVD-koopiad: väike pilt, pehmed jooned ja sageli veidi kiirendatud. Sama filmi Blu-ray on 20–40 GB suur, aga eesti keelt seal pole. Heli käsitsi paika nihutamine võtab ühe filmi peale tunde ja ei klapi ikka, sest versioonid erinevad kiiruse, kadreeringu ja väljalõigatud stseenide poolest. Eesmärk oli täisautomaatne töövoog: sisse kaks faili, välja üks, kus on Blu-ray pilt ja eesti heli täpselt paigas. Pilt pidi jääma silmaga originaalist eristamatuks, fail pidi olema kordades väiksem ja kõik pidi käima nii kiiresti, et terve riiulitäis filme valmib ühe õhtuga.
Tulemus numbrites
Mis muutus
18/18
filmi esimesest järjekorrast valmis automaatselt, ilma käsitsi parandamata
≤1 ms
on heli ja pildi vahe valmis failis, ehk täiesti märkamatu
97,5×
pildikvaliteet 100-palli skaalal Blu-ray originaali vastu (DVD-koopial 37,5)
13,7×
väiksem fail kui Blu-ray (Tuhkatriinu: 31,7 GB → 2,32 GB)
24,5×
kiirem kui film ise: 92-minutilise filmi pilt pakitakse 3 min 46 s-ga
Olukord
Kõige lihtsam mõte oleks võrrelda kahe faili heli. See ei tööta, sest üks on eesti ja teine inglise keeles. Seega tuleb võrrelda pilti. Aga pilt on kahes versioonis väga erinev. DVD on väike (Tuhkatriinu DVD-koopia on 656×496 pikslit), Blu-ray on 1920×1080. Üks võib olla kitsam ja kärbitud, teine laiem ja mustade ribadega. DVD-l võivad olla pildi sisse põletatud subtiitrid, telerist salvestatud koopial kanali logo ja reklaamipausid. Euroopa DVD-d jooksevad sageli 4,27% kiiremini kui film kinos, nii et ka hääled on veidi kõrgemad. Tihti on ka algus- ja lõputiitrid erinevad või mõni stseen välja lõigatud.
Kui on selge, milline hetk kummas failis kus asub, tuleb heli venitada nii, et see püsiks huultega kokku kogu filmi ulatuses. Siis tuleb 20+ GB pildist teha kordades väiksem fail, ilma et kvaliteedikadu oleks näha. Ja kõik see ilma, et keegi peaks ühtegi filmi käsitsi läbi vaatama.
Iga probleemi juures on kirjas ka see, mis esimese hooga ei töötanud ja miks. Enamik parimaid lahendusi tuli just ebaõnnestunud katsetest.
Piirangud
- Heli ei saa otse võrrelda, sest keeled on erinevad. Kokku tuleb viia pilt.
- Versioonid erinevad kiiruse, pildi suuruse, kadreeringu ja väljalõigatud stseenide poolest, telerist salvestatud koopiatel ka reklaamipauside poolest.
- Blu-ray fail on 20–40 GB. Kogu filmi täissuuruses läbivaatamine iga sammu jaoks oleks liiga aeglane.
- Tulemus peab olema kordades väiksem, aga originaalist silmaga eristamatu.
- Kõik peab käima järjekorras ilma inimese sekkumiseta ja katkestuse korral jätkama sealt, kus pooleli jäi.
Lahendus
Kuidas lahendasin
Pildi sõrmejälg
Kuidas võrrelda kahte videot, millel on erinev suurus, värvid, kadreering ja subtiitrid?
Kõigepealt mõõdetakse mõlemad failid üle: kus on mustad ribad, milline on pildi õige kuju ja kui palju heli videost ette või taha jääb. Siis vaadatakse mõlemat filmi 5 kaadrit sekundis, väga väikese mustvalge pildina, graafikakaardi abil. Igast kaadrist tehakse lühike „sõrmejälg”: 128 bitti, mis kirjeldavad pildi heledamaid ja tumedamaid alasid. Sama stseen annab mõlemast failist peaaegu sama sõrmejälje, ka siis, kui värvid ja teravus erinevad. Kaadri alumine osa jäetakse välja, et subtiitrid ja logod ei segaks.
All oleval pildil on Tuhkatriinu sama kaader DVD-koopiast ja Blu-rayst: 128 bitist erineb ainult 2. Hoopis teise stseeniga erineb peaaegu pool. Kadreeringu jaoks proovitakse kolme varianti (täis, laiem ja kõrgem), et kitsam ja laiem versioon leiaksid teineteist ikkagi, ja võidab variant, mis annab kõige rohkem kindlaid vasteid.
Ajakaart
Kuidas leida kahe versiooni vahel iga hetke vaste, kui osa stseene on puudu, osa üleliigseid ja kiirus erinev?
Mis ei töötanud: esimene versioon ei võrrelnud pilti otse, vaid püüdis ajastust ära arvata stseenivahetuste järgi. Umbes 800 lõikega filmis leidis see juhuslikult vale lahenduse, mis sobis veidi paremini kui õige, ja heli sattus kümneid kuni sadu sekundeid valesse kohta. Õige suuna andis lihtne skript, mis otsis pildisisu otse. Sõrmejälgedega hakkas see töötama kindlalt.
Kuidas see nüüd käib: iga 8 sekundi tagant võetakse ühest failist 3-sekundiline lõik ja otsitakse sellele vastet teise faili igast kohast. Vaste loetakse kindlaks ainult siis, kui see on selgelt parem kui kõik teised kohad. Graafikul all on päris otsing: õige koha juures on terav langus, mujal on tulemus palju halvem. Mustad kaadrid jäetakse vahele, sest must pilt sobib kõigega.
Kindlatest vastetest visatakse välja kõrvalekalded ja ülejäänutest tehakse ajakaart: millisele hetkele ühes failis vastab milline hetk teises. Kiiruse erinevus paistab siin lihtsalt kaldena, lisastseenid ja puuduvad kohad eraldi lõikudena. Tuhkatriinu puhul leiti 548 vastet, mis kõik olid ühel sirgel: heli tuli nihutada 0,24 sekundit ning DVD alguses ja lõpus olev lisamaterjal eraldati.
Reklaamipausid
Telerist salvestatud koopias on reklaamipausid, mille pilt ei vasta millelegi. Kuidas leida täpselt koht, kus film jätkub?
Mis ei töötanud: pildi järgi otsimine. Pausi ümber oli tihti mõlemal pool „auku” sama kaader, lihtsalt pisut teistmoodi kärbitud, nii et pilt ei öelnud, kus täpselt lõigata. Viga oli kuni 12 sekundit.
Mis töötab: heli, aga nutikalt. Kui stereoheli vasakust kanalist lahutada parem, kaob keskele paigutatud dialoog peaaegu täielikult ja alles jäävad muusika ning heliefektid. Need on mõlemas keeleversioonis samad. Mõlema faili nii saadud helikõveraid võrreldakse ja lõikekoht valitakse sinna, kus need kõige paremini kattuvad. Sama filmi kõik kolm pausi said paika 0,11 sekundi täpsusega. Kui heli kindlat vastust ei anna, proovitakse pilti, ja kui ka see ei aita, ei lõigata midagi.
Kaadri täpsus
5 kaadrit sekundis tähendab, et ajastus võib olla kuni 0,2 sekundit nihkes. Huulte järgi on see selgelt näha. Kuidas jõuda kaadri täpsuseni ilma kogu filmi täiskiirusel läbi vaatamata?
Täpsustus käib kahes astmes. Esmalt leitakse mõlemast failist stseenivahetused ja paaritatakse need. Siis valitakse kuni 16 kõige selgemat lõikekohta, umbes üks iga 5 minuti kohta, ja ainult nende ümbrus vaadatakse üle kõigi kaadritega. Täpne lõikekaader leitakse mõlemas failis ja ajakaarti parandatakse selle järgi. Nii jõuab täpsus umbes 0,04 sekundini, mis on alla selle, mida silm märkab, kuigi uuesti vaadatakse vaid mõni sekund kogu filmist.
Heli
Kuidas venitada eesti heli nii, et see püsiks paigas terve filmi, hääled kõlaksid õigesti ja lõikekohtades ei kostaks klõpse?
Väike venitus (kuni 6%) tehakse nii, et koos kiirusega muutub ka helikõrgus. Kiirendatud DVD puhul on see just õige: kiirendamine tõstis hääli, nii et aeglustades saavad hääled tagasi oma loomuliku kõrguse. Arvutus on nii täpne, et ka üle tunni pikkuse lõigu peale jääb nihe alla 0,006 sekundi. Suuremate venituste puhul kasutatakse tööriista, mis hoiab helikõrguse paigal.
Mis ei töötanud, 1: lõikude kokkuliitmine sujuva üleminekuga. Iga liitekoht lühendas heli natuke ja sadade lõikude peale kogunes sekundeid nihet. Nüüd liidetakse lõigud nii, et muutub ainult valjus, mitte pikkus, ja ajatelg püsib täpselt paigas.
2: ühe filmi alguses oli 11 sekundit eesti heli, millel polnud kindlat vastet. Esimene versioon venitas selle 13,4 sekundi pikkuseks ja tulemus kõlas „nagu vee all”. Nüüd mängitakse selline algus tavakiirusel ja nii, et see lõpeb täpselt esimese kindla vaste juures.
3: vaikus kohtades, kus eesti heli pole. Paar sekundit vaikust kõlas nagu katkine fail. Nüüd täidetakse need kohad originaalfilmi heliga, sobitatud sama valjuks: paar sekundit originaalkeelt mõjub tõlkimata hetkena, vaikus aga veana.
Pildi pakkimine
Kuidas teha 20+ GB Blu-ray pildist kordades väiksem fail ilma nähtava kvaliteedikaota ja teha seda kiiresti?
Pilt pakitakse uue AV1-koodekiga, mis annab sama kvaliteedi palju väiksema failiga. Töövoog proovib ise järele, milline arvuti riistvara seda kõige kiiremini teeb, alustades graafikakaardist. Proovib päriselt, viie kaadri pakkimisega, sest tihti väidab tarkvara, et oskab midagi, mida riistvara tegelikult ei toeta.
Mis ei töötanud: faili suuruse valimine filmi nime järgi. Üks versioon arvas nime järgi, et tegu on klassikalise joonisfilmiga, ja andis sellele liiga vähe ruumi. Nüüd sõltub faili suurus ainult pildi suurusest ja kaadrisagedusest, eesmärgiga hoida kvaliteet selgelt üle nähtava piiri.
Uuematel NVIDIA kaartidel on kaks pakkimismootorit (NVENC), nii et film jagatakse kaheks pooleks, mis pakitakse korraga. 92-minutilise filmi pakkimine kiirenes umbes 5 minutilt 3 minutile ja 46 sekundile.
Pärast pakkimist mõõdetakse kvaliteeti VMAF-iga. See on Netflixi loodud mõõdik 100-palli skaalal, kus üle 90 on silmaga originaalist raske eristada. Ka see ei töötanud esimese hooga: mõõtja võrdles kaadreid naabritega ja andis umbes 96 väärt failile hindeks 13–86. Nüüd võrreldakse täpselt samu kaadreid.
All on Tuhkatriinu näitel sama ala kolmest failist Blu-ray pikslites. DVD-koopia on suurendatud 1080p peale nii, nagu teler seda näitaks. Kogu filmi peale on tulemuse VMAF 97,5 (nõrgim koht 95,4) ja DVD-koopial 37,5. Fail on 2,32 GB, 13,7 korda väiksem kui 31,7 GB Blu-ray. 734 MB DVD-koopiast on see suurem, aga vahe pildis on näha ka ilma mõõtmata.
Kvaliteedi mõõtmine
Kuidas teada, kas tulemus on päriselt parem kui DVD-koopia ja milline paljudest allikatest on kõige parem?
Kahe eri väljalaske võrdlemiseks ehitasin mõõtmise, mis joondab kõigepealt ajateljed ja pildi kuju ning otsib iga lõigu jaoks parima kaadrivaste. Nii ei loeta väikest ajalist nihet kvaliteedikaoks. Pildi teisendamine ise võtab paar punkti, nii et tulemus on pigem ala- kui ülehinnatud.
Et kogu kollektsiooni ei peaks selleks läbi pakkima, treenisin masinõppe mudeli, mis hindab kvaliteeti ilma originaalita, ainult faili enda andmete põhjal. Mudel õppis 1224 näite pealt: Blu-ray lõigud, mis olid pakitud eri seadetega. Jälgisin, et mudel ei õpiks lihtsalt filme ära tundma. Iga filmi hinnang tuleb 12 lühikesest proovist ilma pilti lahti pakkimata. Nii hinnati läbi 635 filmi.
Kiirus
Kuidas mõõta kiirust nii, et ei parandaks valet asja?
Iga kiirendus läbib sama kontrolli: vana ja uus kood jooksevad sama filmi peal ning kõik vahetulemused ja lõplik helifail peavad olema bitt-bitilt samad. Alles siis loeb kiirus.
Kõige õpetlikum viga: üks kiirendus tundus mõõtmistes kasutu ja kustutasin selle. Tegelikult ei töötanud see kordagi: väike viga andis kaks korda rohkem kaadreid, kontroll kukkus läbi ja kood läks vaikselt tagasi vanale aeglasele teele. Mõõtsin seega kuus korda sama asja. Pärast parandust läks see samm 1,6 korda kiiremaks. Nüüd annab selline tagasilangus kõva häälega teada.
Suurim võit peitus ühes seades. Viimane samm võttis 69% kogu ajast. Tükkideks lahti võttes selgus, et süüdi oli Blu-ray originaalne helirada, mis jagunes failis miljoniteks väikesteks tükkideks. Selle väljajätmine tegi sammu 6,4 korda kiiremaks ja faili 6,1 GB väiksemaks.
Veel mõõdetud: protsessoril töötamine on 4,7 korda aeglasem kui graafikakaardil, nii et sinna liikumine pole lahendus.
Automaatika
Kuidas lasta järjekorral terve öö üksi töötada ja olla hommikul kindel, et kõik läks hästi?
Iga sammu tulemus salvestatakse vahemällu, nii et kui muuta näiteks ainult heliseadeid, ei pea kogu filmi uuesti läbi vaatama. Enne algust kontrollitakse, et kõik failid on olemas. Töö käib kahe filmi kaupa korraga, igal filmil on oma logi ja järjekorra seis salvestatakse nii, et katkestus ei saa seda rikkuda. Iga valmis filmi puhul mõõdetakse heli ja pildi vahe uuesti üle.
Mis ei töötanud: lasta tööriistal ise otsustada, kumma faili pilt alles jääb. „Rohkem piksleid võidab” kõlas mõistlikult, aga valis ühel korral nähtavalt halvema pildi, mis oli lihtsalt suurem. Nüüd valib pildifaili inimene ja kõik muu leitakse endiselt automaatselt.
Tulemus
Esimeses järjekorras oli 18 filmi. Kõik 18 valmisid automaatselt, igaüks 3–9 minutiga (tavaliselt umbes 4 min 43 s), kaasa arvatud pildi pakkimine, kaks filmi korraga. Valmis failides oli heli ja pildi vahe kõigil kuni 1 millisekund.
Tuhkatriinu (1950) näitel: Blu-ray on 31,7 GB, eestikeelne DVD-koopia 734 MB. Tulemus on 2,32 GB fail Blu-ray pildi ja eesti heliga. Pildikvaliteet Blu-ray vastu on 97,5 punkti 100-st (nõrgim koht 95,4), DVD-koopial 37,5.
Edasi
Järgmisena kasutan kvaliteedi hindajat allikate automaatseks valikuks: kui samast filmist on mitu versiooni, valib töövoog ise parima pildi ja parima eesti heli ning paneb järjekorra kokku ilma käsitsi paaritamata.