Nandub SBC Guide CZ - I

by ajislav

Krátký Úvod

Nandub je nástroj pro vytváření vysoce kvalitních AVI souborů pomocí DivX kodeku a z tohoto důvodu se rychle stává populární nejen pro vytváření kvalitních záložních kopii DVDček, ale i pro účely komprimace digitálního videa obecně. Tento návod si neklade za cíle vysvětlit v češtině všechny části procesu zálohování DVDček, ale pouze části přímo spojené s Nandubem (tzn. nečekejte prosím detailní vysvětlivky jak používat DVD2Avi či VFAPI).
Tomu, kdo spěchá (anebo je líný si tento návod pořádně přečíst), doporučuji dále nepokračovat a vrátit se k Flasku. Ostatní jsou zváni k důkladnému přečtení souboru README.DOC (v Nandub adresáři), přečtení návodů na níže uvedených odkazech, důkladnému přečtení tohoto návodu a vyzkoušení si vlivu jednotlivých nastavení na nějakém krátkém klipu.


Dlouhý Úvod

Intro

Nandub je nástroj pro vytváření vysoce kvalitních AVI souborů pomocí DivX kodeku. Vyvinul jej Nando (aka vV_nn) z partičky, která si říká VcdVault (#vcdvault na DalNetu, odkud se dá poměrně hodně zajímavých věcí stáhnout) a která se kromě kromě klasického ripováni DVD, VCD a filmů obecně snaží o dosažení maximální kvality svých releasů (odtud pramení vechny jejich *DUPE* a *PROPER* releasy). V současné době je Nandub postaven na GPL kódu geniálního editovacího programu od Avery Leeho VirtualDubu (http://www186.pair.com/vdub/).
V době psaní tohoto návodu je poslední aktuální verzí verze 1.0rc.

Kde ho najit

Návody

Též mi musíte prominout občasný anglicky slang, protože se jednak už pár měsíců pohybuji v čistě anglickém prostředí a za druhé nemají některé výrazy odpovídající slova v češtině.

Základní definice

Rozhodl jsem se přidat následující sekci ze dvou důvodů - jednak občas zaměňuji (mne bližší) anglické termíny s (ne nutné srozumitelnějšími) českými termíny, a za druhé mám pocit, že je třeba objasnit některé základní termíny digitálního videa:

Compression = komprese
Algoritmus/metoda kterak data, která zabírají hodně místa, vměstnat do místa menšího. Rozlišujeme kompresní metody bezztrátové (všechny .ZIPy . RARy apod. či např. videokodek HUFFYUV), které po encoding a následném decoding vydají naprosto stejná data jako na začátku, a kompresní metody ztrátové (např. JPEG, MP3 či většina videokodeku jako Indeo, Microsoft MPEG či jeho hack DivX), které se snaží z dat odstranit to, co lidské smysly nevnímají či to co lze odstranit tak, aby to bylo co nejméně poznat. Jinými slovy dojde během encoding k zahození části dát či jejich nahrazení komprimovatelnější sekvencí. Během decoding samozřejmě k žádné ztrátě dát nedochází.

Encoding = zakódování
Obecně proces uložení dát v nějakém formátu. Pro tuto stránku se tento pojem vztahuje k převodu videa (tj. posloupnosti RGB obrázků) do jeho zkomprimované podoby (většinou kodekem DivX). Podobně jako u mp3ojek rozlišujeme konstantí datové toky (Constant Bitrate Encoding - CBR) a proměnlivé datové toky (Variable Bitrate Encoding - VBR). Protože se snažíme data zakódovat tak, aby došlo co k nejmenší ztrátě kvality a zároveň co největšímu zmenšení, může tento proces trvat řádově až 10x déle než vlastní délka videa.

Decoding = dekodovani
Dekódování je proces rozbalení předtím zabalených dát. Protože už nic neoptimalizujeme, ale pouze nafukujeme data předem definovaným způsobem, není to proces tak CPU náročný (ale přeci jen to chce cca frekcenci 300MHz, aby bylo přehrávání videa v reálném čase ;-))

Keyframe = klíčový snímek
Snímek, který není definován pomoci předchozích snímku, ale plně sám o sobě (tj. k jeho dekódování nepotřebuji nic jiného)

Delta frame = delta snímek
Snímek, který je definován pomoci předchozích snímku (tj. k jeho dekódování potřebují nejbližší předcházející klíčový snímek a všechny delta snímky mezi)
Stručně lze vysvětlit vztah delta a klíčových snímků takto:
Kdybych měl například tato původní data:
200, 199, 201, 300, 305, 306, 400, 401
Tak po přepsání do delta/key zápisu mi vyjde:
200, -1, +2, +100, +5, +1, 400, +1
(kde klíčové snímky jsou samozřejmě 200 a 400 a delta snímky to ostatní začínající plusem či minusem)

Static Scene = statická scéna
Scéna (filmu, videa), která neobsahuje příliš mnoho "pohybu". Lépe řečeno - scéna pro jejíž zakódování pomocí delta snímků nepotřebuje kodek přiliš mnoho bitů. Například malý objekt pohybující se vůči nehybnému pozadí.

Dynamic Scene = dynamická scéna
Scéna (filmu, videa), která je pro kodek náročná. Obsahuje příliš mnoho "pohybu". Ovšem je nutno zdůraznit, že to nemusi být nutně scéna s "dvěma do sebe navzájem bušícími karatisty", ale klidně i záběr kouře, vlnění vody či chvění listů. (thx K5)

Bitrate = datový tok
Určuje kolik dát (za sekundu) daný encoding proces používá. Často se měři v kbps (kilobity za vteřinu)


VBR aneb proč to trvá 2x tak dlouho

Princip VBR (variable bitrate) videa spočívá v optimální alokaci více bitů scénám, které to potřebují (dynamické), a současném odebírání bitů s menší náročností na datový tok (statické scény). O to tu jde na prvném místě. Flasknout celé DVDčko s konstantním datovým tokem umí kdekdo, ale optimálně nakrmit dynamické scény a naopak přiškrtit scény statické umí jen Nandub. Protože Nandub není vševědoucí, musí nejprve film prozkoumat (tzv. First pass) a pak a na základě vytvořené statistiky provede vlastní zakódování (tzv. Second pass).

V rámci First passu určí Nandub tzv. "bitrate curve", tj. datovou náročnost každého snímku při maximální možné velikosti (tj. de facto daný vstup komprimuje jako DivX low motion 6000 kbps)(tj. DRF=2x, viz dále).(Nemusíte se bát o místo, Nandub tohle MaxiAVI defaultně nevytváří.) Čistě teoreticky by nyní již stačilo spočíst velikost tohoto největšího možného DivX souboru, dále pak vzít velikost cílovou (typicky 700MB minus zvuková stopa), tato dvě čísla podělit a získat tím jakýsi škálovací faktor pro celý film (a tímpádem i pro každý snímek). Stručně řečeno, kdyby byl svět dokonalý, tak by stačilo říci:

Aktuální_bitrate_pro_second_pass = bitrate_z_first_passu * (cílová_velikost / velikost_z_first_passu)

(což je vlastně klasická 'lineární' trojčlenka)

Bohužel jsou zde 2 základní problémy:

Tak a teď je třeba jednou provždy rozbít onen mýtus o kvalitě jednotlivých kodeků:

Jedine dva rozdily mezi Low a High Motion DivX kodeky
jsou v rozsahu DRF a v přizpůsobivosti !!!

Tím ale neříkám, že je Low Motion lepší... (nejlepší je Ferda). Jen chci říci pouze to, že kdo chce stále dělat filmy s CBR, tak optimálních výsledků dosáhne když pro většinu filmu použije Low Motion a na dynamické "akční" scény zase High Motion. To neříkám nic překvapivého, že... (vždyť i názvy kodeků tomu napovídají). Ovšem proč komplikovat věci stříháním, když Nandub umožňuje přímo nastavit jaká komprese (2x-32x) bude pro daný snímek použita, na rozdíl od Low a High Motion kodeků, které tento výpočet dělají samy. Dále umožňuje ovlivňovat přizpůsobivost kodeku mnoha způsoby (gauge, BR modulation, Crispness modulation apod.). Jinými slovy Nandub nejenže kombinuje výhody obou kodeku, on dělá mnohem víc....

Nandub umožňuje dynamicky přizpůsobovat datový tok tak, jak je mu řečeno, a ne tak, jak to má v sobě "natvrdo" zakódované !!
To je ono "SBC = Smart Bitrate Control"
("chytré" nastavení datového toku)

Jelikož byl DviX původně navržen jako kodek pro low data-rate video, nelze se divit když při archivaci DVD (které mají relativně vysoký datový tok) nebudou komprese např. 16x a výše vůbec využity. Optimální by bylo kdyby byly všechny scény v daném filmu v rozsahu tak 2x až 5x, možná 2x až 8x pro "akční" scény, ale ne o mnoho více protože pak už dochází k přílišné ztrátě kvality.. a o tu jde v Nandubu na prvním místě.


Jak to probíhá I - "First pass" a "Second pass"

Jak již bylo řečeno, vlastní "encoding" je dvoufázový proces. Nejprve ("First pass") se daný VFAPI pseudoAVI soubor naoko zakóduje s co nejmenší kompresí. Při tomto procesu se typicky AVI soubor nevytáří, pouze se shromaždují statistické informace pro každý snímek (datový tok !!!, luminance a "pohyb"), které se uloží do .stats souboru.
V další fázi ("Second Pass") se informace o maximálním datovém toku (tj. toku odpovídajícímu minimální kompresi) přeškálují (klasická trojčlenka), mírně upraví podle typu scény (luminance, "pohyb") a předají DivX kodeku jako datový tok pro daný okamžik. V této fázi je sice taktéž možno shromaždovat informace do .stats souboru, ale hlavně již dochází k vytváření konečného AVI souboru.


Jak to probíhá II - z pohledu uživatele

Pozor tohle není Flask !!! tohle jsou techniky pro pokročilé "rippery". Záměrně následujícím přípravným postupům nevěnuji téměř žádnou pozornost, protože jsou dobře a kvalitně popsaný třeba právě na www.doom9.net.

Pro zaručené fungování Nandubu je zapotřebí mít starý, klasický (plain, vanilla, unmodified) DivX 3.11 alpha kodek

To znamená ne 3.22. (kodek OpenDIVX - většinou s jménem 4.0 alpha 48 apod. - mít nainstalován můžete. Kromě matoucího jména nemá s původním "hackem" MS kodeku nic společného.)

Tak tedy jak na to:

Příprava Videa

Vlastní "Encoding"

Nyní nastává to pravé.. Následující kroky lze provádět s jakýmkkoliv souborem, který Virtualdub otevře (já takhle občas z důvodu úspory místa překódovávám MPEGy).

Proč tyto 2 varianty:
Varianta #1 je starší (všem programátorům musí být jasné že pro účely ladění je lepší větší proces rozdělit na dva menší) a flexibilnější. Není pravidlem, že se povede "Second pass" hned napoprvé.
Další možností je nechat si vygenerovat AVI soubor už v "First Passu". (V tomto přápadě doporučuji zatrhnout Video - SBC Options - Generate AVI, zadat méno stats suboru pod Video - SBC Options - SBC settings - Bitrate Curve a zadat File - Save AVI = F7) Touto volbou se vygeneruje stats soubor i ono Maxi AVI (zakódované s maximálním možným datovým tokem (tzn. 6000 kbps či DRF=2x). Pro některé vysoce komprimovatelne filmy vyjde "First Passu" klidně kolem 1000MB a pokud mi jde o 2CD encode, tak jsem hotov a nepotřebují dělat 2nd pass. Varianta #2 je prostě jednodušší, protože umožňuje vše nastavit a pak spustit oba passy najednou (třeba přes noc).
Dle mého názoru je nejlepší spustit nejprve "Two passes" a poté případně znovu "Second pass" s vylepšeným nastavením.

Profily:
VirtualDub (a proto i jeho potomek Nandub) má vestavěnou možnost uložit nastavení všech možnosti do souboru (File - Save processing settings) s příponou .vsf a jejich nasledného načtení (File - Load processing settings).
Dřive byly ze snahy o zjednodušení a automatizaci celého procesu dvě nejčastější varianty (1 CD a 2CD) standartně přiloženy s Nandubem. Použití těchto profilů ovšem nedoporučuji, protože mnoho parametrů bylo pozměněno a nemusí proto odpovídat současné verzi Nandubu. Po přečtení následujících stránek by každý měl být schopen si svůj profil vygenerovat sám.
I když použijete profily, musíte nastavit datový tok !!!

Audio


Next: Detailní vysvětlení různých nastavení Nandubu.
Index