PNG-Denny

Manuál ve vývoji =)

interaktivní oprava defektů ve filmovém záznamu

© Vít Čondák 2018-2021

0. Úvod

Program PNG-Denny je určený k opravám škrábanců ve starších filmech. Není ovšem vhodný k opravám fotek, protože pro svou činnost potřebuje více podobných snímků.

Některé opravy je možné provést automaticky, jiné je možné provádět ručně (tj. klikáním myši).

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. =}

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 černé okraje široké 240 pixelů), 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" -vf "crop=1440:1080:240:0" %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 a zbývající dvě čísla (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-Denny 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

2. Spuštění

Program PNG-Denny je napsaný v C# a používá .NET, takže je poměrně malý a není třeba ho instalovat, ale stačí ho nakopírovat do adresáře, kde máte rozbalené snímky, a spustit ho. Program bude pracovat se všemi .png soubory, které v tom adresáři najde, a to v pořadí podle abecedy.

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í.

Při psaní jsem vycházel z toho, že u filmu jsou obvykle po sobě následující snímky velmi podobné, takže program u většiny činností pracuje s trojicí snímků - aktuální políčko, jeho předchůdce a následovník.

Porovnáním této trojice se snaží na aktuálním políčku najít poškozená místa a opravit je pomocí částí jeho sousedů.

To funguje poměrně dobře u statických záběrů, které neobsahují příliš mnoho pohybu a kazů. V opačném případě může mít program problém rozpoznat, co je pohyblivý objekt a co chyba nebo který obrázek je ten "správný" a který poškozený.

Statické záběry je možné poměrně úspěšně opravovat automaticky, kdežto pohyblivé části obvykle vyžadují ruční práci a především kontrolu lidským okem. Většinou je poměrně snadné nějakým způsobem poškozené místo opravit, ale často je problém automaticky určit, které místo obrázku je poškozené. Zvlášť nepříjemné jsou střihy, rychle se pohybující objekty, náhlé změny osvětlení nebo lesklé předměty, které do kamery "házejí prasátka".

Program bohužel nedokáže jednoduše opravit případy, kdy je stejným způsobem poškozeno více po sobě jdoucích políček (například ožehnutý okraj) a jen omezeně je možné opravovat dlouhé svislé škrábance (následující políčka jsou obvykle poškrábaná na stejných místech, takže je pro opravu není možné použít.)

4. Navigace v programu

Levým tlačítkem myši je možné provádět ruční opravy (viz níže), kdežto pomocí pravého tlačítka je možné snímek posouvat (pokud je v aktuálním zobrazení příliš velký).

Kolečko myši umožňuje obrázek přiblížit nebo oddálit a klávesou F5 lze zapnout automatické přizpůsobení velikosti obrázku velikosti okna.

Při pohybu kurzoru po obrazovce se na dolní liště průběžně vypisují jeho souřadnice v rámci obrazovky, pozice pixelu v obrázku a jeho RGB hodnoty (případně v režimu náhledu jeho spolehlivost a podobně).

Klávesou F11 je možné vypnout nebo zapnout zobrazení lišt a zvětšit tak pracovní plochu.

Kurzorové šipky posouvají pozici v seznamu obrázků o jeden snímek. Ctrl+šipky posouvají o deset snímků, Alt a Shift délku skoku zvětšují na 100 a 1000 snímků.

Standardně je zapnutá funkce Autosafe, takže pokud jste na políčku provedli nějaké změny, tak při přesunu jinam se soubor automaticky přepíše. Pokud vám toto chování nevyhovuje, tak může funkci Autosafe vypnout a políčka ukládat ručně (tradičně CTRL+S).

5. Automatické opravy

Jakékoliv automatické výpočty je možné spustit na aktuálním snímku (F7) nebo s automatickým posunem dopředu (F8) nebo dozadu (F6).

Akce začínající slovem "Show" slouží k zobrazení náhledů různých pracovních polotovarů a nemění aktuální obrázek. Ten mění pouze akce začínající slovem "Fix".

K dispozici jsou tyto akce:

Fix spots

Automatické opravy fleků jsou pravděpodobně nejdůležitější funcí a navíc mají poměrně hodně podivných parametrů, které velmi ovlivňují časovou náročnost a kvalitu výsledku, takže pro snadnější nastavení jsou připraveny dva "presety":

Pokud některý z parametrů ručně změníte, přepne se preset do stavu Custom.

Jednotlivé parametry:

6. Ruční opravy

Obvykle stačí kliknout myší na poškozené místo a program se ho pokusi opravit. Program kontroluje shodu okolí a jeho velikost závisí i na velikosti štětce, takže pokud to nezabere, zkuste nastavit větší "štětec" a kliknutí zopakujte nebo klikněte na trochu jiné místo. Je také možné nastavit větší toleranci na shodu sousedních políček. Pokud víte, že obraz se v daném místě nehýbe, je možné vypnout vyhledávání podobné oblasti (Position). Pokud světlost sousedních políček kolísá, může pomoct v lepšímu výsledku zapnutí korekce světlosti (Lightness). (Aplikuje se ovšem až po vyhledávání shody, takže nepomáhá v případech, že program nemůže na sousedních obrázcích najít shodu právě kvůli velkému rozdílu světlosti celých políček.)

Kliknutím a potáhnutím myši je možné zkopírovat část snímku na jinou pozici (klonování). Funkce se řídí nastavením zdroje pro štětec, takže standardně používá jako zdroj aktuální snímek, ale pokud nastavíte u štětce jako zdroj jen předchůdce nebo jen následovníka, bude se jako zdroj klonované oblosti používat daný sousední snímek.

Pomocí kombinace kláves Alt + kurzorové šipky je také možné v případě potřeby ručně upravovat pozici celého snímku, ale je třeba počítat s tím, že na jednom okraji zůstanou původní pixely, které je pak třeba opravit nějakým jiným způsobem.

K vyhledávání podezřelých míst je možné použít klávesu F3. Pokud nějaké takové místo existuje, program na něj přesune kurzor myši a (pokud se skutečně jedná o obrazový kaz) pro opravu pak obvykle stačí pouze kliknout myší. Pro automatické vyhledávání v celé sekvenci je možné použít klávesy F2 (směrem dozadu) a F4 (směrem dopředu).

Optimisté mohou použít i pseudomanuální opravu. Ctrl+F3 projde všechna podezřelá místa v aktuálním snímku a pokusí se kliknutím (s aktuálně nastaveným štětcem) opravit. Nevýhodou je, že může dojít ke změně mnoha míst, která ve skutečnosti nebyly kazy. Ctrl+F4 pak spustí totéž na všech políčkách směrem dopředu.

X. Vytvoření upraveného videa

Nejprve je potřeba upravené snímky 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

Y. Aktualizace

2019-05-30 první úsporná verze zahrnující především přípravu

2019-06-03 doplněno sekce navigace, parametry automatu a upraveno formátování + obrázek

2019-08-23 extrakce snímků s ořezáním

2019-12-11 doplněny informace o Set position, Fix logo a Repeat action

2020-10-30 doplněny detaily ke kompezaci pozadí po odstranění loga

2021-07-26 Ctrl+F3 a Ctrl+F4

Z. Konec