Naposled aktualizováno 10. 01. 2011.

Prokládání - interlace/deinterlace

Co to je prokládání

Prokládání (anglicky interlace) je způsob, kterým běžné televize vykreslují obraz. Jde o střídání sudých a lichých řádek. Tento systém vznikl při tvorbě TV norem PAL a NTSC ve třicátých letech minulého století. Původně mělo prokládání dva významy. Tím prvním, který už dnes ztratil smysl, bylo zamezení blikání obrazu na starých televizních přijímačích. Druhým důvodem, který se uplatňuje dodnes, je vytváření iluze zobrazování 50 fps (snímků za vteřinu), přestože jich je ve skutečnosti pouze 25. Televizní signál totiž střídá snímky s lichými a sudými řádkami, a to každou padesátinu vteřiny jeden. Pokud jsou liché a sudé snímky zaznamenány v jiný čas, vzniká optický dojem padesáti snímků za vteřinu. Ve skutečnosti ale jde o padesát půlsnímků, které tvoří 25 celých. Prokládání se typicky vyskytuje u TV pořadů, sportovních přenosů apod. Filmy točené pro kina prokládané nejsou. Televize sice přijímá prokládané vysílání, ale dva po sobě jdoucí půlsnímky se dají složit do kompletního neprokládaného snímku, takže se prokládáním zabývat nemusíme.

Proč se prokládáním zabývat

Výhody prokládaného obrazu jsou nesporné, ale prokládání má také obrovské množství nevýhod, které podle mého názoru převažují. Zobrazovat obraz prokládaně umí totiž pouze klasické televize. Plasmové televize, projektory a počítačové monitory zobrazují vždy celý obraz (snímek) najednou. Největší problémy způsobuje prokládání při přehrávání nebo editování videa na počítači. Počítačový monitor, jak jsme si už řekli, nedokáže zobrazit obraz prokládaně a zobrazuje kompletní snímky složené z půlsnímků. Protože ale půlsnímky, ze kterých je celý snímek složen, nebyly u prokládaného videa pořízeny v jednom čase, liší se v nich poloha pohybujících se objektů. Výsledek vidíte na prvním obrázku.

Deinterlace - ukázka tramvaj
Deinterlace - ukázka znak

Tramvaj která se vůči kameře rychle pohybuje, je jakoby dvojitá, hrany jsou roztřepené. Naopak obrysy ruky a domů v pozadí jsou oproti tramvaji poměrně ostré, protože se tak rychle nepohybují. Prohlédněte si též zvětšený detail znaku na tramvaji. Takto by obraz samozřejmě vypadat neměl a z toho důvodu existuje řada různých metod, jak takovémuto zobrazení zabránit. V další kapitole si ty nejdůležitější popíšeme.

Deinterlace metody

Odstranění prokládání se anglicky řekne deinterlace a tento termín je často používaný i u nás. V zásadě existují dvě možnosti kdy prokládání odstraňovat. Buďto se můžeme rozhodnout odstranit prokládání ze zdrojového videa při zpracování před kompresí pomocí programů jako jsou VirtualDub nebo AviSynth a jejich deinterlace filtrů. Druhou možností je uložit zaznamenané video prokládané a deintarlace provádět až při vlastním přehrávání (tzv. realtime deinterlace). K tomu se dá použít buďto opět program AviSynth nebo dekodér videa ffdshow, který disponuje řadou algoritmů pro odstranění prokládání. Druhý způsob nám sice nabídne plynulejší obraz díky možnosti získat rychlost zobrazování 50 fps, je ovšem daleko náročnější na procesor, už tak zatížený dekódováním videa. Proto se v tomto případě nedají složitější deinterlace algoritmy použít. Nejjednodušší metodou, jak prokládání odstranit, je vypuštění jednoho z půlsnímků a případně roztažení druhého na původní výšku filmu. Tím samozřejmě ztratíme nejen iluzi 50 fps, ale také polovinu vertikálního rozlišení. Tato metoda se nazývá BOB a není nijak výhodná. Pro její jednoduchost ji ovšem používá obrovské množství programů. Další, vhodnější metodou, je roztažení obou půlsnímků na dvojnásobnou výšku. Tím získáme film s dvakrát vyšším počtem snímků za vteřinu. Tento deinterlace algoritmus se obvykle nazývá BOB 50. V názvech algoritmů je trochu zmatek, ale v zásadě platí, že BOB 50 by měl produkovat dvojnásobnou snímkovou frekvenci. Tato metoda se často používá při realtime deinterlace. Kdybychom ji použili při zpracování, buďto by se zbytečně komprimovalo dvojnásobné množství dat, nebo by nám výsledný obraz při přehrávání poskakoval nahoru a dolů. Podle toho, zda bychom půlsnímky roztáhli nebo ne. Další algoritmy už jsou podstatně komplikovanější. Snaží se najít ve filmu místa, kde je obraz vlivem prokládání "poškozený" a ta potom opravit. Mezi tyto filtry patří třeba Smart BOB nebo TomsMoComp (Motion Compensation). Na druhém obrázku vidíte, jak vypadá stejná scéna s použitím filtru Deinterlace MAP do programu VirtualDub. Výsledný obraz sice není nijak oslňující, ale ve srovnání s originálem je výrazně lepší.

Deinterlace - ukázka odstranění prokládání

Jak prokládání odstranit

Nějaké programy a filtry jsme už zmínili, ale existuje jich obrovské množství. Pouze některé ovšem dosahují dobrých výsledků. Z filtrů pro program Avisynth bych doporučil určitě TDeint, TomsMoComp a DgBob. DgBob je optimalizován pro výstup 50 fps, ale zvládne i 25. Pro VirtualDub, kromě několika interních filtrů, existují dále Smart Deinterlace, Deinterlace MAP, Deinterlace Smooth nebo Smart Bob. Autorem filtrů Smart Bob, DgBob, Smart Deinterlace a plno dalších je Donal Graft, kterému vděčíme také za program DgDecode.

Některé filtry produkují výstup pouze s originálním poštem sníků, jiné dokáží pro lepší plynulost počet snímků zduplikovat, případně se dá jejich chování nastavit. Duplikování snímkové frekvence ale není vhodné, pokud potřebujete kompatibilitu se stolními nebo přenosnými přehrávači. Ty obvykle nezvládají vic než 30 fps. Zdvojení snímků je naopak výhodné pro přehrávání na počítači nebo pokud budete chtít například vytvořit zpomalený záznam.

Druhou možností, dnes díky dostatečnému výkonu počítačů preferovanou, je odstranění prokládání až při přehrávání. To je sice náročnější na procesor, ale získáme tak plynulejší obraz. Při realtime deinterlacingu je totiž možné a vhodné získat dvojnásobný počet snímků. K tomu můžeme použít buďto opět nějaký vhodný filtr (například DgBob nebo Yadif) a skript Avisynthu, který otevře a přehraje většina přehrávačů ve Windows. Druhou a jednodušší možností je použití dekodéru ffdshow, který disponuje velkým množstvím deinterlace filtrů, včetně Yadif, TomsMoComp, Framerate Doubler nebo DgBob. Dokáže též použít libovolný deinterlace plugin známého programu pro sledování televize, DScaleru. Zde bych jako nejvhodnější doporučoval filtr Yadif. Pokud pro dekódování videa používáte HW akceleraci grafickou kartou, provede karta deinterlacing automaticky a nemusíte se o nic starat.

Jak prokládání neodstranit

Pokud mluvím o odstranění prokládání při přehrávání, je zřejmé, že k tomu potřebuji mít uchované prokládané video. Kde ho ale získat a jak ho zkomprimovat tak, aby prokládané zůstalo? Takové video získáme obvykle z amatérských videokamer (VHS, VHS-C, Hi8, miniDV, HDV, AVCHD) nebo digitalizací televizního vysílání. Prokládaná jsou i některá DVD. Některé miniDV kamery jsou schopné nahrávat i neprokládaně (progressive scan), ale obvykle to bývá spojeno s nějakým omezením. Stejně tak může být neprokládaný film zachycený z televizního vysílání, pokud jej při vysílání pouze zrychlili z 24 na 25 fps. Jestliže nahrávám z televize pomocí nějaké TV-karty, je nutné zachovat původní počet řádků (576 viditelných). Jakmile bych totiž tento počet změnil, liché a sudé půlsnímky se pomíchají a prokládání se už nikdy nemohu zbavit. Vhodné je proto "zachytávat" (digitalizovat signál) v rozlišení 768(nebo 720)x576 @ 25fps. To platí samozřejmě pro normu PAL; u NTSC by to bylo 640x480 @ 30fps. Důležitá je také správná volba kodeku při zachytávání. V úvahu přicházejí tři kategorie. Buďto bezztrátové kodeky jako HuffYUV, FFV1, Snow nebo Lagarith, které ale mají nevalnou kompresi (přibližně 1:3), což je logické a dáno onou bezztrátovostí. Opačným extrémem jsou kodeky standardů MPEG-2 a MPEG-4, které mají sice výbornou kompresi, ale špatně se editují a navíc jsou poměrně výrazně ztrátové. Rozumným kompromisem jsou obvykle formáty MJPEG a DV, které komprimují každý snímek nebo půlsnímek jako samostatný obrázek metodou JPEG. Kompresi po půlsnímcích je důležité zvolit, aby JPEG-komprese nepoškodila interlace artefakty. Z dostupných MJPEG kodeků bych doporučoval PicVideo MJPEG, který ale bohužel není zdarma. Nahradit se dá o něco méně výkonným, ale zdarma dostupným ffdshow. To jsou tedy kodeky kterými můžete zkomprimovat zdrojové video pro další zpracování. Pro kompresi se zachovaným prokládáním lze použít už zmíněné MPEG-2 nebo MPEG-4 kodeky (DivX 6 a XviD). Při ukládání prokládaného videa jsme však omezeni v některých možnostech. Nejvýraznější nevýhodou je asi to, že prokládané video potřebuje výrazně vyšší bitrate než neprokládané. Problémy jsou i při resize (změně velikosti) prokládaného videa. Musí se provádět pro každý půlsnímek zvlášť a ne všechny filtry to umí. Také některé filtry pro potlačení šumu si s prokládaným videem vůbec neporadí.

Zpracování prokládaného videa

Jednou z velkých nevýhod prokládaného videa je jeho zpracování filtry. Například pokud chceme potlačit šum, tak se nám do jinak jednobarevné plochy může zamíchat o kus posunutý druhý půlsnímek a algoritmus filtru si bude myslet, že jde o hranu a žádný šum neodstraní. Může to ale dopadnout ještě hůř pokud filtr oba půlsnímky smíchá. To samé se nám stane i při pokusu o resize prokládaného videa. Proto je nutné zpracovávat liché a sudé snímky odděleně jako 2 samostatná videa. Některé filtry (například VagueDenoiser) mají sice nastavení pro prokládané video, ale to je spíše vyjímka. Nyní ukážu skript pro Avisynth, který se o rozdělení videa na půlsnímky a opětovné spojení postará.

LoadPlugin("c:\Program Files\AviSynth\plugins\TTempSmooth.dll")
AviSource("video.avi")
SeparateFields()
even=SelectEven(last).TTempSmooth()
odd=SelectOdd(last).TTempSmooth()
Interleave(even,odd)
BicubicResize(640,240)
Weave()

Začátek až do příkazu SeparateFields by měl být jasný. Proměnným even a odd se poté přiřadí liché a sudé půlsnímky, na které se každé zvlášť aplikuje filtr TTempSmooth (potlačení šumu ve statických částech obrazu). Poté se opět poskládají snímky za sebe střídavě lichý a sudý (příkaz Interleave). Pokud chceme udělat resize, zde je vhodný okamžik. Video je pořád ještě rozdělené na půlsnímky, takže nezapomeňte, že horizontální rozlišení je poloviční. Proto pokud chceme výslednou výšku 480, zadáme pouze polovinu - 240. Nakonec opět pospojujeme půlsnímky do jednoho snímku.

Pořadí půlsnímků

Při zpracování prokládaného videa určitě dříve nebo později narazíte na problém, kdy se Vám prohodí pořadí půlsnímků. Některá videa mají totiž jako první půlsnímek ten s lichými řádky (TFF - Top Field First), někdy se ale začíná sudými (BFF - Bottom Field First). Můžete se také setkat s výrazy UFF - Upper Field First a LFF - Lower Field First. Střihový program nebo algoritmus pro deinterlace ale většinou neví, který ze snímků je první a proto je může prohodit. To způsobí trhání obrazu, protože půlsnímky se budou zobrazovat v následném pořadí: 2,1,4,3,6,5 atd. Je tedy nutné zkontrolovat, jestli je pořadí snímků správně nastavené. Dá se to velice dobře zjistit při prohlížení vytvořeného videa na stolním DVD přehrávači. Při každém rychlejším pohybu, bude obraz značně trhaný. Pokud je zdroj videa DV kamera, bude pořadí snímků určitě "Bottom Field First". PAL DVD by ale mělo mít pořadí snímků obrácené. Při kompresi do MPEG-2 je proto nutné pamatovat na to, že zdroj je BFF a sdělit to encoderu. Naopak PAL video z analogových zdrojů bude pravděpodobně TFF. Tohle způsobuje často problémy a je nutné to hlídat. Pokud nevíte, jestli je neznámé video TFF nebo BFF, je nejjednodušší způsob jak to zjistit následující Avisynth skript:

AVISource("video.avi")
AssumeTFF()
SeparateFields()

Tento skript se pokuste přehrát, případně si jej prohlédněte ve VirtualDubu. Zvláště při rychlejším pohybu by mělo být zcela zřejmé, jestli jdou půlsnímky snímky po sobě nebo ne. Jestliže je přehrávané video plynulé, máte video s TFF. Pokud se video trhá dopředu a dozadu, je BFF. Zkuste místo TFF zadat AssumeBFF. Nyní by již měl být pohyb plynulý. Tímto způsobem lehce poznáte, zda je vaše video TFF nebo BFF a víte, jak nastavit MPEG-2 encoder.

Telecine

Telecine je způsob, kterým se z progresivního videa 24 fps (klasický film) vytvoří prokládaný obraz s 30 fps pro vysílání v normě NTSC (USA, Japonsko). Nejčastěji se s tím můžete setkat u DVD dovezených z těchto zemí. Při vytváření takovéhoto záznamu se postupuje následovně: Každé políčko se rozdělí na dva půlsnímky, které nazveme například A a B. Obraz se potom poskládá z půlsnímků tímto způsobem: (1A, 1B), (1A, 2B), (2A, 3B), (3A, 3B), (4A, 4B), (5A, 5B), (5A, 6B) atd. Políčko (5A, 5B) se vlastně rovná (1A, 1B) a jede se od něj nanovo. Máme tedy vždy 3 progresivní snímky (kde se sejdou půlsnímky ze stejných políček) a následující dva jsou prokládané (půlsnímky jsou posunuté o celou 1/24 vteřiny). Ještě by se dalo dodat, že se začíná se spodním půlsnímkem, tedy LFF. Klasický deinterlace algoritmus by z tohoto naprosto zešílel. Naštěstí vzhledem k tomu že víme, jak takovéto video vzniklo, dokážeme velice jednoduše a navíc bez ztráty kvality zrekonstruovat původních 24 progresivních snímků. Filtr, který se o toto postará, se nazývá telecide. Najdeme jak verzi pro VD tak i pro AviSynth.

Odstranit prokládání nebo ne?

Výhody prokládaného videa jsou zřejmé. Dá se z něho získat video s dvojnásobnou snímkovou frekvencí a při přehrávání přes výstup TV-Out dobrých grafických karet nebo pomocí stolního přehrávače je potom obraz na TV plynulý, jako kdyby měl 50 fps. Ale i nevýhody jsou zřejmé. Špatná práce s videem v některých editorech, špatná kompresibilita a nutnost realtime deinterlace při přehrávání na moderních zobrazovačích. Podle mého názoru je proto výhodné nechat video prokládané tehdy, bude li primárně přehráváno na televizi přes TV-Out nebo ve stolním přehrávači. Pro tento účel je možné použít formáty DVD a SVCD (MPEG-2 komprese), některé lepší přehrávače zvládnou i video soubory s kompresí MPEG-4. Pokud ale chci video nějak upravit (resize, potlačení šumu apod.) a zkomprimovat do formátů MPEG-4, WMV, FLV a pod., je situace sporná. Osobně si myslím, že pro video, kde není nějaký neustálý rychlý pohyb kamerou, je výhodnější prokládání odstranit. Výhodou je, že ten, kdo si bude chtít video na počítači přehrát, se už nemusí o deinterlace starat. Takto upravené video se také daleko lépe komprimuje, nevýhodou je, že již nikdy nezískáme vyšší frekvenci než 25 fps. U většiny televizních pořadů je však podle mého názoru 50 fps zbytečný luxus. Něco jiného je to u sportovního přenosu, kde bych asi váhal. Záleží také dost na tom, na jakou míru potřebujeme výsledné video zkomprimovat a kde jej chceme přehrávat. Pro přehrávání na PC není problém použít neprokládaných 50fps. V této otázce má každý jiný názor a já bych nerad ten svůj někomu vnucoval. Pokud se chcete o prokládaném videu dozvědět ještě více, můžete třeba zavítat na stránky 100fps.com, které obsahují některé podrobnější informace, ale jsou v angličtině. Autor je tvrdým zastáncem používání dvojnásobné snímkové frekvence. Já si myslím, že nejvhodnější je použití proměnné snímkové frekvnce, jak to umožňují například kontejnery MP4 a Matroška (MKV).

Pokud chcete poradit s výběrem a nastavením toho správného deinterlace filtru, podívejte se na moje srovnání 16-ti nejběžnějších algoritmů. Snad si vyberete.




Pokud máte nějaký dotaz nebo přípomínku, neváhejte mě kontaktovat.