Naposled aktualizováno 10. 01. 2011.

Ripování DVD - 3. část

Komprese videa

Z minulého dílu již víme, které programy budeme potřebovat, ale raději to zopakuji. Jsou to kodek XviD a střihové programy VirtualDub nebo VirtualDubMod. Máme již tedy napsaný skript pro frameserver Avisynth se všemi potřebnými úpravami. Tento script můžeme otevřít ve video editoru VDM. VDM umí kromě .avs skriptů otevřít i .avi soubory a narozdíl od svého neupraveného kolegy, obyčejného VirtualDubu, umí otevřít i MPEG-2 soubory. Mezi další vlastnosti, které má VDM navíc oproti VD, patří lepší práce s audio streamy a podpora většího množství audio formátů, editování kapitol, podpora titulků, ukládání a načítání kontejnerů Matroška a OGM. VDM zvládne také všechny úpravy obrazu, které provádíme pomocí Avisynth skriptu. Proč jsme tedy nepoužili pro otevření našeho MPEG-2 videa rovnou VDM? Kvůli rychlosti a kvalitě. Filtry VDM neumí pracovat s kódováním barev YV12, které se používá u DVD. Proto by musel program nejprve převést barvy do formátu RGB pro filtry a poté zpět do YV12 pro kodek XviD. To samozřejmě zabírá nějaký čas a komprimace by byla pomalejší. Časově je určitě výhodnější strávit 5 minut napsáním skriptu. Pokud ale potřebujete nutně použít některý z filtrů VirtualDubu, který neexistuje ve verzi pro AviSynth, můžete se vydat i touto cestou. Rozdíl není nijak velký. Návod na složitější práci s VirtualDubem najdete zde, my tento vynikající editor použijeme pouze jako komprimační program.

VirtualDubMod

Ve VD tedy přes položku File -> Open video file (Ctrl+O) otevřeme náš skript. Měli bysme získat podobný výsledek, jako je na prvním obrázku. V levém okně je původní video, v pravém po úpravě filtry VD. Já jsem pro demonstraci použil filtr emboss, my ale žádné filtry používat nebudeme, takže obě okna budou totožná. Namísto toho zvolíme v menu Video položku Fast Recopmress. To nám umožní obejít všechny filtry a udržet celý proces ve formátu YV12, se kterým si VD jinak příliš nerozumí. Nyní zvolíme položku Video -> Compression (Ctrl+P) a vyskočí na nás tabulka se všemi nainstalovanými kodeky. Pravděpodobně až úplně na konci bude námi požadovaný XviD. Označíme jej a zmáčkneme tlačítko Configure. Vyskočí na nás dialog s konfigurací kodeku, který vidíme na dalším obrázku (je z verze XviD 1.0 RC1).

XviD kodek Než se pustíme do nastavení kodeku, dovolím si pár slov o tom, jak takový kodek formátu MPEG-4 funguje. Bude to samozřejmě hodně zjednodušené, ale snad postačující. Kodek vždy vytvoří takzvaný klíčový snímek (keyframe, I-frame, I-VOP) a následných několik snímků (obvykle 1-300) je zpasáno jako změny oproti klíčovému snímku. Tyto snímky se značí jako P-frames (P-VOP). Novější MPEG-4 ASP kodeky (například XviD a DivX 5 a 6 ve verzi PRO) umožňují používat také takzvané B-frames (B-VOP), které jsou zapsané jako změny oproti následujícímu i předchozímu obrázku. Jejich používání uspoří údajně 20% místa. Další důležitou věcí je míra komprese jednotlivých snímků (tzv. quantizer). Čím větší je quantizer, tím víc je daný snímek komprimovaný. Pokud se v obrazu téměř nic nehýbe, je jasné, že snímky popisující změnu mohou být výrazně menší než když se obraz velmi rychle mění. Proto není výhodné používat stejnou velikost a quantizer pro všechny snímky, ale měnit je průběžně podle potřeby. Tomuto systému se říká proměnný datový tok (variable bitrate, VBR). Používá se i u zvuku. Nevýhoda je v tom, že nejsme shopni přesně odhadnout, jak bude naše video po komprimaci velké. Tento problém řeší dvouprůchodové kódování (twopass encoding). V prvním průchodu se zjistí náročnost jednotlivých scén a ve druhém kodek přidělí jednotlivým scénám takový bitrate, aby celé video mělo námi požadovanou velikost. Ve své podstatě nám dvouprůchodové kódování umožní při předem zadané velikosti získat maximální možnou (a hlavně konstantní) kvalitu pro celé video. Nevýhodou je, že celý proces trvá tím pádem 2x tak dlouho, protože musíme video komprimovat dvakrát.

Takže již víme proč používat dvouprůchodové kódování a můžeme se pustit do nastavení kodeku. Jako první vybereme v nabídce Profile @ Level Advanced Simple @ L5 a klepneme na tlačítko more.... Zobrazí se nám dialog, který vidíme na druhém obrázku. XviD kodek - nastavení 1 Já bych doporučil nastavit všechny hodnoty tak, jak to je zobraznené na screenshotu. Pouze u pár z nich se zastavím. U Quantization type můžete vybrat H.263 nebo MPEG. Nastavení MPEG zachovává více detailů, ale pří nízkém bitrate způsobuje kostkatění obrazu, H.263 naopak obraz mírně rozmazává. Interlaced Encoding zaškrtněte, pokud je zdrojové video prokládané a chcete jej tak nechat. Tato volba potřebuje vyšší bitrate pro udržení kvality. Quarter Pixel (Q-PEL) je vhodný především pro filmy s nízkým rozlišením, určené třeba pro internet. Zlepšuje hledání pohybu rozdělením každého pixelu na 4. Global Motion Compensation jak už název napovídá umožňuje lépe kódovat scény, ve kterých se pohybuje celý obraz. Pomáhá tak třeba v případech, kdy kameraman nemá nejpevnější ruku nebo se s kamerou otáčí. Tato volba ale znemožní přehrávání videa ve většině stolních přehrávačů. B-VOP jsou již zmíněné b-frames, které je určitě vhodné zapnout. První číslo udává maximální počet po sobě jdoucích b-frames. V úvahu připadají pouze čísla 1 a 2, vyšší nepoužívejte. Packed Bitstream urychluje hledání ve filmu, pokud jsou použity b-frames. I tato volba spolehlivě složí většinu současných stolních DVD přehrávačů. Proto bych ji raději nepoužíval, přestože je defaultně zapnutá. Naštěstí lze kdykoliv packed bitstream z AVI souborů bezztrátově odstranit pomocí programu MPEG4 Modifier. Pokud budete chtít maximální kompatibilitu pro stolní DVD/DivX přehrávače, je vhodné zakázat i B-frames a Q-PEL. Na ostatních záložkách už nic neměňte a potvrďte Vaši volbu OK. Vrátíme se do původního okna kodeku a u položky Encoding type zvolíme Twopass - 1st pass. Klepnutím na tlačítko more... můžeme zvolit, kam se uloží soubor se statistikou prvního průchodu, tedy zjišťování náročnosti scén. Poté nás ještě bude zajímat nabídka Quality preset ve spodní části. Můžeme zde zvolit přednstavené profily Real-time (nejrychlejší, nízká kvalita) nebo General purpose (vyvážené nastavení s dobrou rychlostí i kvalitou). Případně můžeme zvolit vlastní nastavení klepnutím na tlačítko more....

XviD kodek - nastavení 2

Zde jde především o nastavení určující poměr rychlosti a kvality. Motion search precision můžeme nastavit na 1 až 6. Pokud nám jde o kvalitu, existují pouze hodnoty 5 a 6. Nižší hodnoty jsou vhodné pro realtime zachytávání. Zapnutím Use chroma motion ještě zvýšíme kvalitu na úkor rychlosti. Stejný efekt má také nastavení s názvem Use VHQ for bframes too. Úroveň VHQ (vysoká kvalita hledání pohybu) určuje políčko VHQ mode. Pokud jste trpěliví, zvolte 4. Běžně se ale používají hodnoty nižší. Turbo ;-) zvýší výrazně rychlost kódování na úkor nepatrného snížení kvality. Maximum I-frame interval určuje, po maximálně kolika snímcích se vloží nový klíčový snímek. Můžete tuto hodnotu snížit na 250, většinou se ale stejně vloží sám automaticky dřív. Parametr Frame Drop Ratio říká, o kolik % se mohou lišit dva po sobě jdoucí snímky, aby byl druhý z nich vypuštěn. Při hodnotě 0 jsou vypuštěny pouze zcela identické snímky. Změna tohoto parametru na nenulovou hodnotu umožní vytvářet video s proměnnou snímkovou frekvencí (vyšší číslo - více vynechaných snímků, tzv. N-VOPs). Také tato funkce ale složí nejeden stolní přehrávač. Nyní již stačí pouze potvrdit všechna nastavení kodeku, je to celkem 3x klepnutí na OK.

Jsme tedy zpátky ve VirtualDubu a máme nastavenou metodu komprese. Proto můžeme v menu File vybrat Save as (F7) a zobrazí se nám následující dialog.

VirtualDub - uložení

Zvolíme tady adresář a jméno video souboru. Jako kontejner zvolíme prozatím *.avi. Na další řádce zaškrtneme Don't run this job now, což znamená, že po potvrzení dialogu o uložení se nespustí hned proces komprese, ale naplánuje se pro pozdější spuštění. To je výhodné, protože tak můžeme naplánovat oba průchody a potom je spustit automaticky. Můžeme ale samozřejmě nechat proběhnout první průchod ihned a druhý nastavit a spustit až později. Další 2 políčka v dialogu Save as necháme nezaškrtnutá. První umožňuje uložit soubor tak, aby byl kompatibilní se staršími programy, Segment output file automaticky dělí soubor, což zatím nepotřebujeme. Na dolní straně můžeme zkontrolovat, zda je nastaveno Fast recompress a XviD MPEG-4 Codec. Případně můžeme tato nastavení změnit, včetně vlastností kodeku. Pakliže je všechno v pořádku, zvolíme Uložit. Pokud jsme proces pouze naplánovali, nic se nestane a vrátíme se zpátky do VD. V opačném případě se spustí první průchod a pokračovat můžeme teprve až se dokončí. Ve VD poté opět přejdeme do nastavení kodeku XviD, což můžeme udělat i v dialogu pro uložení. Na úvodní stránce kodeku zvolíme namísto Twopass - 1st pass druhý průchod, neboli Twopass - 2nd pass. Zadáme požadovanou velikost souboru tak, jak nám vyšla v bitrate kalkulátoru. Po přepnutí tlačítkem Target bitrate/Target size se dá také zadat výsledný průměrný bitrate. Žádná další nastavení nesmíme měnit a video opět uložíme. Pokud jsme používali plánování, máme už vše připraveno a můžeme i klidně VD vypnout, pokud chceme komprimaci spustit později. Až budeme chtít začít, spustíme opět VD, pokud jsme jej vypli, a vybereme File -> Job control. Zobrazí se nám okno, které vidíme na posledním obrázku. Zde klepneme na Start a eventuálně i na OK, čímž dialog zavřeme. Pokud chceme sledovat průběh kódování, můžeme z menu VD zvolit Options -> Show status window. V tomto okně také můžeme změnit prioritu programu, což se občas může hodit.

VirtualDub - Job Control

Teď už nezbývá, než si počkat několik hodin. Pokud máte pomalý počítač, tak i dní. U běžného počítače s procesorem kolem 2 GHz by to ale nemělo trvat víc než 10 hodin. Záleží samozřejmě na nastavení kvality v kodeku a použitých filtrech Avisynthu.


Předchozí strana

Další strana




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