PNG-Tinterr

Manuál ve vývoji =)

interaktivní kolorování filmových záznamů

© Vít Čondák 2020-2024

eriador.condak.cz

0. Úvod

Program PNG-Tinterr je určený ke kolorování černobílých filmů, ale je možné ho použít i pro kolorování jednotlivých fotek.

Pro usnadnění kolorování filmů používá utilitu Frankensteiner (PNG-Frank2 (C# .NET) nebo PNG-Frank3 (C++ .exe)), která slouží k dopočítávání barev na sousedních snímcích a šetří tak část práce.

Z ne zcela jasných příčin jsem v programu všude použil anglické popisy a k napsání přepínání jazyka jsem se zatím neodhodlal. =}

Veřejně publikovaná verze je plně funkční, pouze do pravého horního rohu obrazu přidává logo Tinterr.

1. Příprava

Program záměrně nepracuje přímo s komprimovaným video souborem, protože většina video souborů používá ztrátovou kompresi a při každém zpětném ukládání upravených snímků by nevyhnutelně docházelo k jejich zkreslení kompresním algoritmem.

Program proto jako pracovní materiál používá snímky vyexportované do formátu .png.

Sám export snímků neprovádí, takže je pro export potřeba použít jiný program - nejlépe volně dostupnou utilitu FFMPEG.

Aktuální verzi je možné stáhnout na ffmpeg.org

Utilita se ovládá z příkazové řádky a příkaz k rozbalení všech snímků vypadá přibližně takto:

ffmpeg -i "jméno-video-souboru.mp4" %06d.png

Jméno video souboru se bude samozřejmě lišit podle toho, jaký soubor chcete upravit. =)

Druhý parametr udává formát, jak se budou soubory s obrázky jmenovat. "%06d" znamená, že jména budou šestimístná čísla (000000-999999), což by mělo obvykle bohatě stačit na běžný film. (Při obvyklých 25 snímcích za vteřinu a stopáži 90 minut se dostaneme na 135 000 snímků. V extrémních případech by bylo třeba jméno prodloužit na 7 číslic a parametr by tedy byl "%07d".)

Raději upozorňuji, že rozbalené snímky samozřejmě zaberou spoustu místa na disku, takže je třeba s tím počítat. Velikost každého snímku se liší v závislosti na rozlišení a jeho složitosti, ale u černobílého filmu se pravděpodobně bude pohybovat mezi 1 až 2 MB, takže pro rozbalení celého filmu je obvykle potřeba zhruba 250 GB volného místa. (A samozřejmě dalších 250 GB pro případné záložní kopie nebo pracovní verze.)

Pokud jsou součástí videa černé okraje (např. video má rozměr 1920x1080 (16x9), ale využitá část obrazu jen 1440x1080 (4x3), takže na obou stranách jsou stejně široké černé okraje, tak je vhodné okraje přímo při extrakci ořezat, protože se tím zmenší velikost všech souborů na disku a navíc díky tomu budou všechny následující operace trochu rychlejší.

Příkazový řádek pak bude vypadat například takto:

ffmpeg -i "jméno-video-souboru.mp4" -filter "crop=1490:1080" %06d.png

("Crop" znamená ořezání, první číslo (v tomto případě 1440) je šířka výsledné oblasti, druhé číslo (1080) její výška. Pokud jsou okraje různě široké, je možné přidat ještě dvě další čísla (zde by to bylo 240 a 0) udávají posunutí levého horního rohu ořezané oblasti oproti originálu.)

Většina filmů obsahuje i zvukovou stopu, takže je vhodné si ji také vyexportovat do samostatného souboru. Pokud budete audio také nějak upravovat (to PNG-Tinterr neřeší), tak je vhodné použít formát WAV:

ffmpeg -i "jméno-video-souboru.mp4" audio.wav

Jinak je možné použít i export původní audio stopy bez dekomprese. Např.

ffmpeg -i "jméno-video-souboru.mp4" -vn -acodec copy audio.aac

V praxi je poměrně dobrý nápad před kolorováním z černobílých snímků odstranit škrábance (k tomu používám program Png-Denny) a případně i nějak sjednotit jejich jas, protože jeho kolísání mezi sousedními snímky bude mít negativní vliv na kvality dopočítaných barevných masek.

2. Spuštění a nastavení

Program PNG-Tinterr je napsaný v C# a používá .NET Framework 4, takže je poměrně malý a není třeba ho instalovat, ale stačí ho nakopírovat do adresáře s projektem. Pro správnou funkci je potřeba, aby ve stejném adresáři byl nahraný i program png-frank3.exe.

Výpočet barev sousedních políček určují dva parametry:

Úroveň zmenšení masky Vzhledem k tomu, že doba výpočtů je závislá na počtu pixelů obrázku a komprese videa obvykle u sousedních pixelů stejně slučuje jejich barevný odstín, tak program standardně používá barevné masky s polovičním rozlišení (tedy se čtvrtinovou plochou) oproti původním černobílým snímkům, což odpovídá hodnotě 1 (zmenšení prvního stupně). Nastavením jiné hodnoty je možné za cenu zpomalení výpočtu (5x) zvýšit detaily (4x) nebo naopak. Pro FullHD film je hodnota 1 rozumný kompromis.
Omezení vzdálenosti vyhledávání Nižší hodnoty znamenají, že se aplikace snaží v obraze vyhledávat objekty posunuté na větší vzdálenost (s hodnotou 0 až o cca 20 % celkového rozměru obrázku), ale to může vést k tomu, že nachází více oblastí, které mají podobný tvar a barvu, ale jedná se o jiný objekt. Nastavení ideální hodnoty závisí i na tom, o jaký typ videa se jedná (kolik je v něm pohybu) a s množstvím klíčových snímků (čím je jich více, tím je praktičtější vzdálenost více omezit). Přednastavená hodnota je 2 (tedy cca 5 % celkového rozměru obrázku).
Černobílé snímky by měly být standardně umístěny v podadresáři jménem 3-denoise. Pokud ho program nenajde, objeví se výzva k vybrání některého z černobílých snímků ručně. Podle jeho umístění se pak nastaví pracovní adresář projektu a jméno podadresáře s černobílými snímky.

Další podadresáře mají pevně daná jména a program si je vytváří podle potřeby:

4-tpng pracovní adresář (cache), kam se ukládají spočítané transformační soubory
5-master adresář, kam se ukládají ručně nakreslené barevné masky (v polovičním rozlišení)
6-mask pracovní adresář s vygenerovanými transformovanými barevnými maskami
7-blended výstupní adresář, kam se ukládají sloučené barevné masky (v základním nastavení je tato funkce vypnutá)
8-colored výstupní adresář, kam se ukládají obarvené snímky (při každé návštěvě změněného políčka)

Výpočty interpolací je možné o něco vylepšit přidáním dalšího vstupního adresáře 2-depth a do něj uložit políčka s černobílou mapou hloubky. Ty je ovšem třeba nejprve vygenerovat pomocí jiných aplikací. Těch existuje více a v různých videí se chovají různě:

MiDaS https://github.com/isl-org/MiDaS
ViTA https://github.com/KexianHust/ViTA
NVDS https://github.com/RaymondWang987/NVDS

3. Princip práce

Pro používání programu je dobré udělat si alespoň přibližnou představu, jak uvnitř funguje, jaké jsou jeho schopnosti a jaká omezení.

Na počátku práce je třeba vybrat nějaký dostatečně reprezentativní snímek (schématická "mapa" sousedních políček je na horní liště), změnit ho na klíčový (například klávesou K) a celý ho ručně obarvit. Barva se ukládá do samostatné vrstvy a program ji průběžně aplikuje na černobílý snímek. Pro lepší orientaci je možné zobrazení přepínat a zobrazit pouze původní černobílý snímek nebo naopak pouze barevnou masku (klávesy Z a X).

Png-Frank začne okamžitě na pozadí generovat transformační soubory pro sousední políčka, takže pokud se na ně přesunete (například kurzorovými šipkami doleve a doprava), tak by se poměrně brzy měla zobrazit jejich obarvená verze spočítaná na základě klíčového (vzorového) políčka.

Přepočet bohužel není natolik inteligentní, aby podle vzoru dokázal dokonale obarvit jakékoliv políčko - to ostatně ani z principu není možné, protože v záběru se mohou objevit nové objekty nebo postavy, které na původním snímku vůbec nebyly. Čím více se další políčka liší od původního klíčového, tím víc odchylek a chyb se v dopočítané barevné masce objeví. U políčka, kde odchylka překročí nějakou únosnou mez, je obvykle potřeba vložit nové klíčové políčko a všechny odchylky a chybu ručně opravit.

Barvy z nového klíčového políčka se automaticky aplikují pro výpočet následujících políček, ale i pro výpočet barvy u předchozích generovaných políček až po předchozí klíčové políčko. U generovaných políček tedy většinou platí, že jsou jejich barvy dopočítavány ze dvou nejbližších klíčových políček a (pokud existují) i dvou nejbližších částečných (na pravé liště je možné nastavit i vyšší číslo) a výsledek je smíchaný podle nastavené metody. Základní nastavení je Best match, které barvu každého pixelu vybere z té spočítané verze, která má na daném místě vyšší spolehlivost. Další metody barvy spočítané v různých verzích míchají podle poměrů spolehlivosti nebo podle vzdálenosti klíčových snímků.

Pro práci je obvykle výhodnější používat Best match, protože umožňuje přesnější kontrolu nad dopočítanými snímky, ale pro export výsledku může být výhodnější metoda Error ratios. Ta zobrazí podezřelá místa v méně výrazných barvách a ukryje je tak v milosrdném šedém oparu, ale obvykle tím také změní nejistá místa, která by jinam měla správnou barvu, takže je třeba rozdíly zkontrolovat.

Barevnou masku je možné před aplikací ještě nechat vyhladit nastavením volby Blur colour mask, ale vliv na podobu výsledného obrazku je téměř nepozorovatelný. (Uložený soubor je ovšem obvykle trochu menší.)

Pokud jsou součástí projektu i soubory s hloubkou obrazu, je možné také nastavit pro výpočty poměr důležitosti mezi černobílým obrazem a hloubkou.

4. Editace

Pro editaci barevné masky je možné používat myš nebo pero tabletu. Všechny akce se provádějí klasicky kliknutím nebo podržením levého tlačítka myši, kdežto podržením pravého tlačítka myši je možné obrázek posouvat, pokud se v aktuálním zobrazení celý nevejde do okna. Při práci s perem je možné režim posouvání vyvolat podržením klávesy Space (mezerník).

Podobně lze použít klávesu Alt pro vyvolání režimu nastavení pracovní barvy kliknutím přímo do obrázku (tj. funkce Kapátko neboli Colour-picker).

Pracovní režimy:

Brush (B) Štětec umožňuje kreslit pomocí nastavené barvy. Dvojklik je možné použít pro kreslení rovných čar mezi místem dvojkliku a místem, kde skončil předchozí tah štětce.
Eraser (R) Guma v místě použití z barevné masky odstraňuje veškerou informaci o barvě a vyrobí tedy v masce díru. Pokud se jednalo o klíčový snímek, tak se tím zásahem změní na částečný a vymazaná oblast se bude dopočítávat se sousedů.
Fill (F) Výplň aplikuje nastavenou barvu na oblast s podobnými parametry (barva, světlost). Je možné nastavit toleranci a to, která vrstva se pro nalezení hranice použije. Může to být vrstva s černobílým snímkem, s barevnou maskou nebo obě najednou.
Separate (S) Nahrazuje definované odstíny (opět je možné nastavit, která vrstva se použije jako kritérium pro aplikaci - čb, barevná nebo obě) nastavenou barvou. Tohle je nástroj pro situace, kdy je potřeba doladit nějaké barevné odstíny v celém obrázku najednou.
Tvar štětce (Shift+B) Přepíná mezi kulatým štětcem s měkkým okrajem a čtvercovým štětcem s ostrým okrajem.

Barevná paleta:

Paleta slouží k odkládání barev, které se opakovaně používají, aby uživatel mohl stejný objekt na různých snímcích vždy obarvit stejnou barvou.

Levé tl. myši nastaví barvu z palety jako aktivní
Pravé tl. myši uloží aktivní barvu do palety
Alt + levé tl. umožní barvu v paletě přejmenovat

Gradient:

Tento režim slouží pro kreslení "proměnlivou barvou" a hodí se především na kolorování členitého rozhraní dvou oblastí s rozdílným jasem, jako jsou například tmavé větve stromů, za kterými je světlá obloha. Gradient je definovan dvěma barevnými odstíny a jim odpovídajícími úrovněmi jasu. Při kreslení se pak u každého pixelu použije barva gradientu odpovídající jasu původního černobíleho pixelu. V případě větví stromů by se tedy tmavé pixely měly zabarvit na hnědo, světlé pixely oblohy na modro a šedé pixely na mix hnědé a modré barvy.

A zapíná a vypíná režim gradientu
Q prohazuje primární a sekundární bod gradientu (barvy i jejich meze)
W prohazuje pouze černobílé meze gradientu
E zapíná automatické nastavení mezí gradientu podle místa prvního kliknutí

Clipboard neboli schránka:

Ctrl+C zkopíruje do schránky celou místní barevnou masku
Ctrl+Shift+C zkopíruje do schránky celou smíchanou barevnou masku
Ctrl+V vloží obsah schránky do místní barevné masky
Ctrl+Shift+V pokud je ve schránce klíčový snímek, tak ho nastaví jako první morf

Klávesové zkratky při editaci:

šipky ←→ posun na sousední políčko
Ctrl+←→ posun o 10 políček
Ctrl+Shift+←→ posun o 100 políček
Ctrl+Alt+Shift+←→ posun o 1000 políček
Shift+←→ posun na nejbližší klíčové políčko v daném směru
Alt+šipky posouvá celou místní barevnou masku ve směru použité šipky
K změní aktuální políčko na klíčové
Shift+Delete smaže obsah lokální masky a změní políčko v generované
Ctrl+D vyvolá dialog pro vytvoření klasické prolínačky (bez výpočtu transformací)
Ctrl+U vyvolá dialog pro barevné úpravy místní masky (saturace a poměr RGB)

Vyhledávání:

Ctrl+F najde snímek s nejvyšší spočítanou chybou
F3 najde snímek s následující chybovou hodnotou

Ladicí informace:

Ctrl+L log kalkulací
Ctrl+M log akcí provedených myší

5. Vytvoření upraveného videa

Pokud máte pocit, že je všechno obarveno správně, tak se přesuňte na první snímek a použijte tlačítko Render, které spustí přegenerování všech snímků (tj. postupně se posouvá po snímcích dopředu a obarvené verze ukládá (přepisuje existující soubory) do adresáře 8-colored)

Obarvené snímky je nejprve potřeba spojit do nového videosouboru bez zvuku:

ffmpeg -framerate 25 -i %06d.png -c:v libx264 -pix_fmt yuv420p -preset slower -crf 20 nove-video-bez-zvuku.mp4

Pak následuje spojení se zvukovou stopou:

ffmpeg -i nove-video-bez-zvuku.mp4 -i audio.aac -c copy nove-video-se-zvukem.mp4

6. Aktualizace

2024-01-06 hranatý štětec, depth, E/R, Frank3

2021-12-23 Ctrl+U

2021-12-11 základní nastavení morfování

2021-12-08 doplněny další klávesové zkratky a práce s gradientem

2021-11-19 doplněny další klávesové zkratky (šipky, dissolve)

2021-11-17 vyhledávání pomocí ctrl+F a F3

2021-04-02 ctrl+shift+v

2021-03-07 práce s paletou

2021-01-06 nová volba blur

2020-12-03 zkratky pro debugovací okna a úpravy vzhledu dokumentu

2020-11-12 upravena sekce clipboard a převedeno na tabulky

2020-11-10 clipboard

2020-11-02 úvodní obrázek (base64) a základy editace

2020-10-31 úpravy související s nastavením pracovního adresáře

2020-10-03 první hrubá verze

7. Konec