XviD v.1.0 Beta 3 Koepi


Poslední modifikace:  16. leden 2004, 9:00    


Popis a nastavení se týká verze z 26.12.2003.
Ke stažení je k dispozici zde: Koepi's Media Development Homepage,
případně na mých stránkách tady: XviD-1.0-Beta3-26122003.exe.
Avisynth: používám nyní "Alpha" RC2 verzi z 15.1.2004 AviSynth 2 - CVS snapshot.
:-))

Nový XviD 1.0 (i když zatím jen v Beta verzích) je na Internetu k dispozici již dostatečně dlouhou dobu, s diskusí lze vyčíst fakt, že počáteční "dětské nemoci" nové verze se pomalu vychytaly a poslední Beta 3 už vypadá slibně. Rozhodl jsem se tedy, že se pustím (konečně) do testování a experimentování s "dev-api4".
:-)


Pro aktivní čtenáře sem hodím pár zajímavých odkazů, bezprostředně se týkajících zde popisované problematiky:

XviD in VirtualDub

Doom9's Forum - XviD FAQ

Doom9's Forum - Selam! (XviD-1.0-Beta3-26122003)
Doom9's Forum - Ciao! (XviD-1.0-Beta2-05122003)
Doom9's Forum - Aloha! (XviD-1.0-Beta1-30112003)

Doom9's Forum - VHQ manual
Doom9's Forum - lumi masking
Doom9's Forum - What Quantization type are you using?
Doom9's Forum - Packed Bitsream of B-frame...
Doom9's Forum - switching to Xvid ;)

Doom9's Forum - MPEG2Dec3 v1.10
Doom9's Forum - [VirtualDubMod] *** FAQ *** (31/03/03)
Doom9's Forum - [VirtualDubMod] 1.5.10.1 released (bugfixes available) (25/12/03)

AviSynth


Nadhodím zde takový "pracovně - pracovní" posup o tom, jak při tvorbě avi (konkrétně avi z video souborů uložených na DVD) postupovat. Zde popsaný způsob vychází z návodu na mých stránkách a víceméně bezprostředně navazuje a částečně se i prolíná se stránkami Navody 3. kapitola (Práce se scripty pro AviSynth) a Navody 4. kapitola (Nastavení kodeku XviD)

Takže nejprve velice stručně zopakuji můj odzkoušený postup:

Spustíme program VirtualDubMod (poslední verze, se kterou momentálně pracuji je 1.5.10.1 build 2407).



Načteme si předem připravený "avisynth script", pro náš konkrétní případ test.avs.







Mpeg2Source("D:\Project_Filmy\LOTR_TTT\1\TTT_1_.d2v")
trim(16501,17000)
Crop(2,78,716,420)
LanczosResize(544,224)


(Příkaz "trim(A,B)" určí úsek videa - ve framech - , které se v tomto testu budou zpracovávat. Pro celý film tento řádek pochopitelně nebude nutný. Pro zjišťování kompresibility používám příkaz "SelectRangeEvery(1000,100)". Z výsledku si spočítám či odvodím vhodné rozměry videa a parametry pro enkodování. Ale to jsem trochu odbočil ...
Zvolil jsem Lanczos metodu pro "resize" rozměrů videa. V poslední době používám pro většinu filmů právě tuto metodu, zdá se mi trochu "ostřejší" obraz a také drobné zlepšení kompresibility.)

Okno VirtualDubModu po načtení avs scriptu pak vypadá takto:



V záložce video zvolíme "Fast recompress" a klikneme na volbu "Compression"



objeví se nám okno pro výběr video kodeků.



Zde zvolíme XviD
Verzi našeho konkrétního kodeku si přečeme po kliknutí na "About":



Zvolíme záložku konfigurace "Configure" pro kodek XviD, a objeví se nám toto okno:



Nyní si trochu pomaleji projdeme veškerá okna, které jsou konfiguraci kodeku potřebná. Budu zde prezentovat hlavně má osobní zjištění, postřehy a postupy a vůbec si nedělám nárok na to, že tento postup je nejlepší možný. Naopak, možnosti pro různé experimentování jsou značné a já sám jsem po dvou dnech pokusů již některá nastavení pozměnil a jistě je budu měnit a vylaďovat i nadále. Jiné optimální nastavení bude pro DVD film, jiné pro nagrabované video z TV karty atd....



Nastavení "Profile @ Level " s hodnotou " AS @ L5 " je doporučené v popisu kodeku na doom9.org jako výchozí pro práci s DVD ripy. Osobně jsem s tímto kodekem začínal na profilu "unrestricted". Hodnoty v záložkách "Level" a "Aspect Ratio" pro nás nyní nejsou podstatné. Při volbě "unrestricted" či jakéhokoliv jiného profilu stejně nelze v "Level" nic měnit.
V záložce "Aspect Ratio" sice lze měnit nastavení poměru pixelu (Pixel Aspect Ratio) či přizpůsobit volby obrazu (Picture Aspect ratio) pro poměry 4:3, 16:9 a 2,35:1, ale jelikož v nápovědě kodeku lze vyčíst, že změna defaultního nastavení je na vlastní riziko, považuji nastavování v této záložce pro naší další práci za bezpředmětnou.



Podstatná pro nás bude záložka "Profile".
Zachováme výchozí volbu kvantizace "H.263". V návodu na serveru doom9.org se doporučuje nastavení "H.263" pro 1-CD ripy a "MPEG" pro 2-CD ripy.
Volba "Adaptive quantization", dříve nazývané "lumi-masking", přiděluje menší bitrate scénám, které nejsou pro lidské oko příliš podstatné.
Zaškrtnutí volby "Interlacing" zlepšuje výkon procesu enkodování při zpracování prokládaného videa.
Pokud aktivujeme možnost "Quarterpel", dosáhneme jednak opět o něco lepší hodnoty kompresibility, ovšem zřetelně se prodlouží doba enkodování (odhaduji tak o 15-25%) a rovněž vzrostou nároky na výkon prosesoru při přehrávání takto vytvořeného videa. Quarterpel vlastně zlepšuje odhad pohybových vektorů (motion estimation), z čehož vyplývá jeho největší přínos právě pro videa s nižším rozlišením.
Další možnost "Global motion compensation" (GMC), nechávám bez zaškrtnutí. GMC sice zlepšuje o zhruba nějaké procento kompresibilitu, ale na druhou stranu opět významně prodlužuje dobu enkodování a zvyšuje zátěž procesoru při přehrávání. Nevýhodou je, že dosud žádný stolní přehrávač nepodopruje GMC. Pokud se rozhodneme jej použít, je třeba se ujistit, že máme zvolenou volbu VHQ=4.
"Reduced resolution" je aplikovatelný pouze pro streaming a stará se o to, aby byl XviD použitelný i pro nižší rozlišení než zdrojové video.
"BVOPs" jsou "staré známé" B-framy! :-)
Maximální hodnotu počtu za sebou jdoucích B-framů můžeme zvolit v položce "Max. consecutive BVOPs". Na rozdíl od DivX můžeme jít výše než na hodnotu 1, ale nedoporučuje se překročit maximální hodnotu 3. "Quantizer ratio" indikuje dodatečnou kompresi B-framů v porovnání s P-framy. "Quantizer offset" vyjadřuje kompenzaci přidanou ke každé kvantizaci. Jestliže okolní P-framy mají quantizer = 2 a oba koeficienty, ratio i offset se rovnají 1, bude mít výsledný B-fram hodnotu quantizeru = 3.
"Packed bitstream" vytváří bistream, který může být dekódován bez zpoždění (jak tuto možnost poprvé uvedl DivX 5.01, ve VDubu již nemůžete být při enkodování o několik framů pozadu kvůli B-framům).
A nakonec volba "Closed GOV", která zajišťuje, aby byl každý nový P-frame použit před novým I-framem. Je důležité zkontrolovat, zda je tato volba zaškrtnutá, protože jinak by nebyla smysluplná sekvence PBIP.



Pokud použijeme typ kvantizace "MPEG Custom", nabídne se nám možnost vlastní editace kvantizační matice. Případně můžeme využít příležitost načtení jedné z (v současnosti 15) uživatelsky předdefinovaných matic. Nalézt tyto matice lze v "Zip" souboru v nabídce "Programy / XviD / XviD Quant Matrices".







Tím by bylo obecně řečeno vše podstatné o všeobecném nastavení XviD kodeku a můžeme se přesunout k nastavení dvouprůchodového enkodování.

V záložce "Encoding type" zvolíme položku "Twopass - 1st pass".



Klikneme na tlačítko "..." vpravo od nabídky, čímž se dosáváme k následující záložce:



Zde zadáme název a cestu ke statistickému souboru "video.pass". Ubezpečme se opravdu, zda je cesta a název souboru korektní. Bez tohoto souboru by druhý průchod enkodování vůbec nemohl proběhnout.
Rovněž je důležité nechat zatrženou volbu "Discard first pass" (vyřazení prvního průchodu), jinak se zbytečně vytváří velký avi soubor již při prvním průchodu, což by výrazně zpomalilo enkodování tohoto "first pass".

V záložce "Calculator" zatím není nic.




V prostřední části hlavního okna konfigurace kodeku můžeme přidávat, odebírat či editovat upřesňující informace o způsobu enkodování jednotlivých částí filmu. Většinou se bude patrně jednat o hlavní (normální) část filmu a závěrečné titulky, kde stačí nižší datový tok (nižší kvantizace).



Při editaci se nám objeví následující okno:



Zde můžeme v horní části zadat číslo prvního framu, od nějž se bude počítat část filmu pro kterou vybereme následující "kvalitu" enkodování. Tedy buďto váhu (Weight) nebo kvantizaci (Quantizer).
V této částí, nazývané "Rate control", si na posuvné liště pomocí myši, nebo přímým napsáním čísla můžeme zvolit hodnotu kvantizace (pokud pořadujeme konstantní kvanizaci - hodí se to například pro výpočet kompresibility, kdy nejdříve "sjedeme" film jednoprůchodovou metodou při konstatní kvantizaci = 2 a výslednou velikost souboru použijeme pro zjištění kompresibility a následující rozvahu o nejvhodnější rozměr, použití nadstandardních "features" atd...), či váhy. Tato váha, standardně mající hodnotu 1, vyjadřuje procentní vyjádření bitrate naší editované části oprotí výchozí hodnotě.



V dolní části okna je pár dalších políček k zaškrtnutí.
"Force keyframe" dohlédne na to, aby "sekvence" snímků vždy začínala I-framem (klíčovým snímkem).
Zaškrtnutím "Greyscale" vybereme režim optimalizovaný pro černobílý obraz. Z videa se vypustí barvové U/V informace a výsledkem je černobílý obraz.
"Chroma optimizer" je filtr, který interpoluje barvy v černo-bílé oblasti pixelů. Pomáhá při redukci tzv. "red stairs" efektu.
Okénko nazvané "BVOP sensitivity" umožňuje zadat práh citlivosti "Threshold" pro B-framy. Kladná hodnota způsobí, že bude B-framů více. Pokud naopak budeme chtít B-framů méně, napíšeme záporné hodnoty.




Pokud chceme zařídit, aby v závěrečných titulcích měl film nižší bitrate (a není žádný rozumný důvod takto záverečné "credits" neošetřit), uděláme to takto:



Stiskneme tlačítko "Add" - otevře se nám okno s možnostmi konfigurací.
Zde zadáme například, že od snínku (framu) 150000 se má snížit bitrate na hodnotu 0,15, což znamená 15% hodnotu oproti průměrnému bitrate hlavního filmu.



A takto potom přehledně vše vidíme v nabídkovém okně:




Přejdeme opět do hlavního okna a stiskneme tlačítko "Advanced options ...".
Objeví se nám následující okno.



Záložka "Motion search precision" definuje přesnost mechanismu "motion estimation" (pohybového odhadu ?, pro termín v tomto okamžiku nemám přesný překlad). Čím vyšší číslo, tím větší přesnost a tím i kvalita ripu. Samozřejmě na úkor času enkódování. Za minimum lze považovat hodnotu 5 - Very High. Osobně používám nejvyšší 6 - Ultra High. Obecně je tato hodnota doporučována.



"VHQ mode" nám nabízí ještě přesnější zpracování pohybových vektorů a tím i přesnější a kvalitnější obraz. Za defaultní nastavení lze považovat hodnotu VHQ = 1. Vyšší hodnoty značně prodlužují dobu zpracování videa. VHQ = 4 na témeř dvojnásobek. Občas se však tato náročnost procesu vyplatí. Výsledné video zpracované s vysokým VHQ nijak navíc nezatěžuje procesor při přehrávání. Výpočetně náročný je jen samotný proces enkodování.



Zaškrtnutím "Use chroma motion" se informace o barevné sytosti započítávají do výpočtu přesnosti pohybových vektorů. Získáme v podstatě "Motion search presision" s hodnotou = 7. Tato volba sice zpomalí proces enkódování o nějakých 5-10%, ale je velice účiná v boji proti nežádoucímu "kostičkování" barev.
V okénku "Frame drop ratio" necháme hodnotu 0. Chceme, aby všechny snímky byly enkodované!
"Maximum I-frame interval" udává maximální počet snímků mezi dvěma klíčovými snímky. Necháváme na defaultní hodnotě 300.
Volby "Use cartoon mode" zaškrtáváme v případě, že zpracováváme kreslený film.
V nejnovější verzi kodeku se objevila možnost zaškrtnutí "Turbo ;-)", čímž se poněkud zrychlí proces enkodování, hlavně při druhém průchodu u dvouprůchodové metody zpracování videa. (V této chvíli neznám přesný princip navýšení této rychlosti. Patrně se jedná a jakousi optimalizaci práce procesoru či komunikaci s pamětí při výpočtech.)

Nyní přejdeme na další záložku: "Quantization"



Zde se nám nabízí možnost nastavit minimum a maximum kvantizačního faktoru pro tři druhy snímků:
I-frame (intra-coded image / klíčový snímek, tedy snímek, který pro dekódování nepotřebuje žádný z předchozích nebo následujících snímků v sekvenci/)
P-frame (predicted image / snímek, který pro dekódování potřebuje jeden nebo několik předchozích snímků/)
B-frame (bi-directionally interpolated image / snímek, který pro dekódování potřebuje jeden nebo několik předchozích a zároveň následujících snímků/)
Doporučuje se nechat defaultní nastavení. Pokud bychom třeba změnili hodnotu minimální kvantizace na 1, neúměrně bychom zvětšili velikost výsledného videa

Zaškrtnutím položky "Trellis quantization" získáme optimalizivaný odhad pohybového vektoru a úroveň zkreslení ... Snižuje trochu rychlost a nepatrně sníží kvalitu, na druhou stranu získáme o něco nižší bitrate videa a tedy vyšší kompresibilitu. ?
(časem to snad někdo ozřejmí, já této volbě nerozumím)


Dostáváme se ke třetí záložce tohoto okna, "Debug":
Tato nabídka již pro nás není tak zajímavá. Umožňuje nám přesně konfigurovat tzv. "FourCC" kód"
Pokud používáte alternativní dekódování, tedy jiné než XviD nebo ffdshow, máte možnost nastavit FourCC tak, aby váš dekodér regulérně zpracoval vytvořený video soubor.




Potvrdíme "OK" všechny nabídky až se dostaneme opět do okna programu VirtualDubMod. Uložíme náš "First Pass", buď pomocí klávesové zkratky F7, nebo v nabídce "File / Save As".



V nabídce na uložení je velmi důležité zaškrtnout volbu "Don't run this job now"! Úloha se přidá do seznamu v okně "Job Control (vyvolat jej můžeme kdykoliv stiskutím F4).




Stisknutím CTRL+C (nebo volbou "Video / Compression") se opět dostaneme do nabídky kodeků. Zde zvolíme stejně jako v předchozím případě XviD kodek a pokračujeme v konfiguraci pro druhý průchod.
V nabídce "Encoding type" zvolíme možnost "Twopass 2-nd pass"



Vpravo od této nabídky klikneme na tlačítko "..." a objeví se nám následující okno:



Zde by měla být korektně napsaná cesta ke statistickému souboru, tak jak jsme ji definovali v prvním průchodu.

Přejdeme k položkám "Two-pass tuning":
"I-frame boost %" - zde je defaultně hodnota 0. Volba slouží k případnému zvětšení velikosti klíčových snímků než je hodnota vypočítaná z křivky průběhu datového toku.
Máme zde rovněž možnost upravit "I-frames closer than ... frames:" / "...are reduced by %:", tedy nastavit práh citlivosti a redukční faktor pro velikost klíčových snímků, pokud jsou k sobě blíž než (zadaná hodnota). . Defaultní hodnoty jsou 1 a 20%
Políčka "Max overflow improvement %:" a "Max overflow degradation %:" indikují, jak se může svýšit či snížit datový objem při zpracování videa v různých částech při potřebě různých datových toků. Pokud je kolísání příliž velké (například hodnota 60%), lze je snížit (například na 20-30%). Určuje to vlastně také poměr mezi uštřenou velikostí videa ve statických scénách a tedy kolik zbývá k využití v dynamických pasážích.

Položky "Curve compression" ukazují, jak velký je průběh datového toku:
"High bitrate scene %:" určije jak velký nárůst datového toku oproti vypočítanému je povolen v hodně pohyblivých pasážích
"Low bitrate scenes %: určuje totéž ve scénách s nízkou dynamikou.
"Overflow control strength %:" jak hodně může byt tanto zvyšený datový tok ještě překročen.

Potvdíme nastavení a dostáváme se opět do hlavního nabídkového okna.
Zde zaměříme svou pozornost o políčko níže a nastavíme si cílovou velikost našeho videa (kB). Pokud v nabídce vidíme "Target bitrate (kbps):" a nikoliv "Target size (kB)", napravíme to kliknutím na toto tlačítko. (Bitrate calculator, do kterého se přesuneme klinutím na "..." vpravo od nabídky není v této verzi kodeku ještě implementován).
Cílovou velikost získáme snadno výpočtem. Jako kalkulačku můžeme použít například GordianKnot. Od velikosti výsledného ripu (například 700 MB v případě tvorby filmu na jedno CD-R) odečteme velikost zvuku (například 120 MB) rezervu na proložení videa se zvukem (u CBR zhruba 4MB) a dostaneme v našem cvičném příkladě 576MB = 589824 kB). Jako cílovou velikost tedy můžeme napsat zaokrouhlenou hodnotu 590000 kB.






Potrdíme všechna okna "OK". Uložíme náš druhý průchod stejným způsobem jako první.



V Job Control budou nyní připraveny ke zpracování dvě ulohy:



Zde je přehledně vidíme:
Takže si v našem případě obě úlohy spustíme tlačítkem "Start" a můžeme si dát kafe, či se jít v klidu prospat (podle délky zpracovávaných filmů a rychlosti našeho procesoru). :-)



Úlohy můžeme přesunovat nahoru či dolů, čímž měníme pořadí jejich zpracování (musíme dbát na to, abychom si omylem nepřehodili první a druhý průchod u dvouprůchodové metody).
Úlohy lze smazat, pozastavovat, přerušené dát do čekacího režimu atd. Na rychlých počítačích můžeme zadat, například přes noc, více úloh a ráno již pouze zkontrolovat několik hotových filmů! :-))
Skvělou možností je uložit si načtené "Job's". Můžeme si například vytvořit sekvenci úloh s různými parametry a pak již jen spustit a vyvořit například několik desítek krátkých úseků vide s rozdílnými parametry a posléze je již jen vyhodnocovat (objektivně či subjektivně). Skvělým pomocníkem je mi v těchto případech výborný prográmek od "Fily" (vdubjobsdur), který analyzuje uložený job list a vypočítává dobu, kterou jednotlivé úlohy potřebovaly ke zpracování videa.


Po spuštění úloh se nám (většinou, pokud to nemáme v nastavení VDubModu jinak) spustí okno "XviD Status", kde můžeme krásně a názorně sledovat jaké hodnoty kvantizace má naše zpracovávané video. Vyčíst zde lze ještě spustu jiných údajů, týkajících se velikostí snímků (I, P, B), maximálních, minimálních i průměrných a rovněž samozřejmě celkových hodnot.




Pokud chceme sledovat na obrazovce monitoru stav procesu zpracovávané úlohy, zajístíme to následujícím způsobem:
V hlavním okně VirtualDubMod, které se mezitím schovalo na spodní lištu, klikutím zobrazíme na ploše monitoru.



V záložce "Options" zvolíme "Show status window"



čímž dosáhneme zobrazení následujícího okna.



Zde nyní máme pět záložek pro různé režimy zobrazení informací o právě probíhajícím procesu zpracování video streamu.


Okno "Job Control" nám rovněž dává údaj o tom, kde se právě která úloha nachází:



A výše již zmíněné okno "XviD Status" ukazuje v druhém průchodu průměrné "rozprostření" různých hodnot kvantizace v našem video souboru.



Zajímavá je záložka "video" v okně "Show status window", kde krásně v grafické podobě můžeme sledovat průběžné orientační velikosti jednotlivých snímků. Červeně jsou označeny klíčové snímky.



No a uplně na závěr si již jen můžeme vychutnávat plnými doušky výsledek našeho úsilí!
:-)



Zoom Player Standard 3.30



Valid HTML 4.01!