Část třetí - Práce se scripty pro AviSynth


Dostáváme se k části, kterou by mnozí nejraději přeskočili a ke které jsem sám měl dlouhou dobu nedůvěru. Tedy ke tvorbě skriptů pro práci s Avisynth.


Video z DVD je třeba správně oříznout a zmenšit. (Crop and Resize). A to tak, aby číselné hodnoty pro ořez byly regulérní (dělitelné 2), aby v obraze nebyly žádné černé pruhy a také aby ořez byl takový, aby následné zmenšení do požadovaného rozměru (např. 640x272, 560x240, 624x352, 576x320, 512x384 atd...) tak, aby výsledné rozměry byly dělitelné 16 a to beze zbytku a aby poměr stran odpovídal poměru originálního obrazu po ořezu a po aplikaci korekčního koeficientu. Prostě jde o to, že když bude na záběru kruh, aby byl ve výsledném videu opět kruh a nikoliv nějaká elipsa. Tato část přípravy se často podceňuje. Ačkoliv existuje možnost, že i u špatně zhotoveného avi souboru (co se týká správného poměru stran) je možné udělat dodatečné korekce tohoto poměru při přehrávání (například Zoom Player má tuto možnost dotaženou hodně daleko), je lepší a správnější dosáhnout takového souboru s videem, ve kterém je poměr stran korektní.


Takže nám jde nyní o pár důležitých kroků:


Krok číslo 1


Ze souboru *.d2v potřebujeme dostat informaci o správných hodnotách ořezu Crop (A, B, C, D), například pro film formátu 2,35:1 to může být: Crop(4,76,714,432) Tuto informaci nám vypočítá plugin pro AviSynth s názvem AutoCrop. Příklad potřebného scriptu je zde:


        Mpeg2Source("D:\Project_Filmy\Project TentoFilm\TentoFilm.d2v")
        AutoCrop(1,4,2,0,0,0,0,40,10,0)


Hodnoty parametrů uvedených v závorce jsou defaultní. Jednička v první pozici značí, že se jedná o režim "Preview" (uvidíme bílé čáry s hodnotami ořezu přímo v obraze). Dvojka v této pozici udělá navíc to, že se do direktoráře uloží krátký textový soubor s výslednou hodnotou "Crop(A,B,C,D)". Nula udělá ořez filmu.


Mpeg2Source("D:\Project_Filmy\Project_SLII\sl2.d2v")
#AutoCrop(mode,wMultOf,hMultOf,leftAdd,rightAdd,topAdd, bottomAdd,threshold,samples,aspect)
#default = (1,4,2,0,0,0,0,40,10,0)
#ConvertToYUY2()
AutoCrop(1,4,2,0,0,0,0,40,10,0)


autocrop_01

Skript s prvním parametrem o hodnotě 1 nám ukáže v okně videa výřez, který vypočetl (bílé čáry rámující obraz). Máme tedy možnost tento výsledek vizuálně zkontrolovat a buď si opsat nebo přejít k následujícímu skriptu a zkopírovat si informaci ze souboru AutoCrop.log.


AutoCrop(2,4,2,0,0,0,0,40,10,0)

autocrop_02

Skript s tímto parametrem vytvoří ve stejném adresáři, ze kterého byl spuštěn soubor AutoCrop.log, ve kterém bude vypočítaná hodnota pro ořez ( Crop(A,B,C,D) ).



        AutoCrop(0,4,2,0,0,0,0,40,10,0)

Skript s prvním parametrem hodnoty 0 lze použít přímo, pokud již nechceme nijak výsledek výpočtu hodnot ořezu kontrolovat, ale chceme s ním rovnou pracovat.



Podrobné informace o konkrétním pluginu jsou vždy uvedené v textovém souboru zpravidla přibaleném k vlastnímu dll souboru.

Dá se použít samozřejmě i jiný postup k získání hodnot ořezu. Někdo to dokáže přímo z hodnot posuvných ukazatelů v DVD2AVI, záložka "Video" / "Crop and resize", jiní používají s úspěchem program GordianKnot, kterého využívají jako takovou základní "kalkulačku" a generátoru "prvotního" avs skriptu, který pak ručně upraví pro své potřeby.

Mě se nakonec nejvíce osvědčila výše popsaná metoda s pluginem AutoCrop.


...

Takže máme čtyři číselné hodnoty které jsou v závorce příkazu Crop a postoupíme dále.



Krok číslo 2


Z této hodnoty je potřeba "ručně" dopočítat takové hodnoty, které již budou naprosto korektní pro výsledný obraz a jeho poměr stran. Musíme tedy mít jasno v tom, jak velký obraz budeme chtít mít. Pro film s poměrem stran 2,35:1 to může být například 640x272 nebo třeba 560x240 pixelů.


Příklady některých z možných rozlišení pro tři základní poměry obrazu videa:

V závorce je uveden skutečný poměr daného rozlišení. To musíme vzít v úvahu při ořezu aby mělo výsledné video co nejmenší chybu v poměru stran ("Aspect Ratio").



2,35:1
672 x 288 2,3333 193 536
640 x 272 2,3529 174 080
608 x 256 2,3750 155 648
560 x 240 2,3333 134 400
528 x 224 2,3571 118 272
496 x 208 2,3846 103 168
448 x 192 2,3333 86 016
416 x 176 2,3636 73 216
384 x 160 2,4000 61 440

16:9
656 x 368 1,7826 241 408
624 x 352 1,7727 219 648
592 x 336 1,7619 198 912
576 x 320 1,8000 184 320
544 x 304 1,7895 165 376
512 x 288 1,7778 147 456
480 x 272 1,7647 130 560
448 x 256 1,7500 114 688
432 x 240 1,8000 103 680

4:3
640 x 480 1,3333 307 200
592 x 448 1,3214 265 216
576 x 432 1,3333 248 832
560 x 416 1,3462 232 960
528 x 400 1,3200 211 200
512 x 384 1,3333 196 608
464 x 352 1,3182 163 328
448 x 336 1,3333 150 528
384 x 288 1,3333 110 592

(První sloupec značí rozlišení v pixelech, druhý poměr stran a třetí plochu (A x B), tedy užitečný údaj pro hrubou volbu optimálního rozlišení pro ten který film.)


Proto doporučuji, i po získání hodnot ořezu z našeho skriptu pro AutoCrop, ještě provést ruční korekci tohoto ořezu tak, aby chyba Aspect Ratio byla co nejmenší.


Na tomto místě je potřeba zdůraznit, že hodnota korekčního koeficientu je 1,422222 (pro formát 16:9) a 1,06666 (pro formát 4:3). Většina širokoúhlých filmů (2,35:1) má na DVD rozlišení 16:9 a proto tedy jsou v DVD2AVI postavy protáhlé na výšku a filmy formátu 16:9 jsou na DVD roztaženy na 4:3. Při přehrávání v SW DVD přehrávačích to nevidíme a poměr stran je správný, poněvadž přehrávač provede odpovídající korekci. Filmy 4:3 jsou i na DVD 4:3 a v prográmku DVD2AVI uvidíme proporce obrazu jako normální. Pro obraz na DVD, který je v DVD2AVI vidět přes celé okno, tedy 4:3 (ať už je skutečný poměr 4:3 či 16:9) bude tedy korekční konstanta 1.06666 a pro ty, který mají obraz nikoliv přes celé okno, ale mají nahoře a dole pruhy a přesto je na výšku roztažený, tedy 2,35:1 bude korekční konstanta 1,42222.


K těm korekčním konstantám je možno se dopočítat takto:


Rozlišení videa na DVD nosiči je pevně dané a je vždy 720x576 pixelů.
Poměr 720 / 576 je 1,25.
Širokoúhlý film v anamorfickém formátu 2,35:1 je na DVD roztažen na výšku a má poměr stran 16:9.
Poměr 16 / 9 je 1,77777778.
Pokud vydělíme hodnotu 1,77777778 hodnotou 1,25 dostaneme výsledek 1,4222222.
Širokoúhlý film ve formátu 16:9 či 4:3 jsou na DVD oba roztaženy na poměr stran 4:3.
Poměr hodnot 4 / 3 je 1,3333333.
Pokud vydělíme číslo 1,3333333 hodnotou 1,25 dostaneme výsledek 1,06666666.

Omlouvám se za tento poněkud zdlouhavý a těžkopádný popis, ale popisuji zde věci, které donedávna nebyly pro mne až tak příliš jasné, proto je takto popisuji.


Prostě poměr stran z hodnot v závorce u příkazu Crop po vynásobení korekčním koeficientem by měl být co nejbližší poměru stran příslušného rozměru, na který chceme výsledné video zmenšit.

Příklady poměrů stran pro zmenšené video jsou uvedeny výše v tabulce. Rozměry stran výsledného musí být dělitelné 16. Rozměry původního oříznutého videa musí být dělitelné 2.


Uvedu krátký příklad praktického použití korekčních konstant.


Máme film formátu 2,35:1
AutoCrop nám spočetl hodnoty Crop(4,74,716,436)
Vydělíme hodnoty 716 / 436 a dostáváme 1,6422
Tuto hodnotu, tedy 1,6422 vynásobíme korekční konstantou 1,422222 a dostaneme 2,33557
Výsledné video chceme mít v rozlišení 560 x 240
Poměr 560 / 240 je 2,3333
Chyba (odchylka) mezi 2,3333 a 2,33557 je minimální a můžeme ji akceptovat
Výsledné video chceme mít v rozlišení 640 x 272
Poměr stran 640 / 272 je 2,35294
Chyba mezi 2,35294 a 2,33557 sice není velká, ale budeme chtít provést korekci
Ořízneme výšku obrazu o 2 pixely více (nahoře či dole) a dostaneme Crop(4,74,716,434)
Vypočteme (716 / 434) * 1,42222 = 2,3463
Ještě nejsme spokojeni
Ořízneme výšku obrazu o 4 pixely (třeba 2 nahoře a dva dole) a dostaneme Crop(4,76,716,432)
Vypočteme (716 / 432) * 1,4222222 = 2,3572
S tímto výsledkem jsme již plně spokojeni.
Místo automaticky spočítaného Crop(4,74,716,436) použijeme pro požadované rozlišení 640x272 ručně přepočítané Crop(4,76,716,432). (Pokud bychom chtěli mít výsledné video v rozlišení 560x240, tak bychom mohli nechat původní automaticky spočítané hodnoty Crop).
Obdobně podle tohoto příkladu lze postupovat například s oříznutím nikoliv výšku, ale šířky filmu na DVD.
Postup je obdobný i poměry obrazu 16:9 či 4:3 (korekční koeficient 1,0666666).
Zdá se to zprvu složité a možná i zbytečné, ale pokud si takto cvičně uděláme nějakých 5-6 filmů, půjde nám to již poté samo.
Ono opravdu nepůsobí dobře, když kruh ve filmu máme v přehrávači potom jako elipsu! :-)

Tato velikost rozlišení výsledného videa může být určena na základě posouzení s ohledem na délku filmu, požadovanou kvalitu (a tím velikosti výsledného souboru a jeho následného uložení na zapisovatelné médium,1x CD-R, 2x CD-R, výjimečně 3x CD-R), a v neposlední řadě s ohledem na tzv. kompresibilitu (Compressibility Check), která vlastně udává, jak dobře je film komprimovatelný. (Prostě, někdy se v pohodě vejde dvouhodinový film na jedno 700 MB CD-R, jindy budeme mít problém dostat v subjektivně stejné kvalitě 75 minutový film na dvě 700 MB CD-R.)



Nyní si něco povíme o té kompresibilitě.


Jistě jste si již všimli, že některý film se celkem snadno a bez problémů vejde na jedno CD i s kvalitním zvukem, jindy je problém ho dostat na dvě CD. Někdy se dá odhadnout, jak dobře film půjde zkomprimovat, jindy je to těžší.

Ukážu jednu metodu (popsanou Mindutonem v diskusním klubu DivX na Lopuchu), která se může osvědčit, jako taková základní informace o kompresibilitě filmu na DVD.


Ještě než začneme s prací na finální podobě videa, napíšeme si takovýto script:


Mpeg2Source("D:\Project_Filmy\Film\film.d2v")
SelectRangeEvery(1000,100)
Crop(A,B,C,D)
BicubicResize(X,Y,0,0.5)


pomocí kterého uděláme jednoprůchodovou metodou video soubor. Při konfiguraci XviD nastavíme konstantní quantizer na hodnotu = 2.

compressibility_check_01  compressibility_check_02

Získáme tak soubor ve kterém bude každých 40 sekund 4 sekundy videa, tedy 10%. Pro naše účely bude chyba akceptovatelná. Pokud bychom nechtěli čekat tak dlouho a udělat ještě hrubší odhad, můžeme pomocí SelectRangeEvery(1000,50) získat 5% video soubor.


Po pár minutách získáme video soubor o určité velikosti X MB. (Například 95 MB)


Pokud již máme udělanou "rozvahu", tedy kolik MB nám zabere zvuk (lze snadno zjistit pokud AC3 soubor načteme do HeadAC3he, při nastavených parametrech MP3 komprese, kde se nám ukáže poměrně přesně odhadnutá velikost audio souboru),


compressibility_check_03

(na obrázku vidíme odhadnutou velikost MP3 souboru 111MB)


plus určitá rezerva na spojení videa a audia, titulky, případně někteří přikládají ještě nějaké info soubory, kapitoly, booklety atd, tak víme, kolik MB máme vyhrazeno na samotné video (například 590 MB pro film na 1 CD, 100MB audio, 10 MB rezerva).


Někdy může být přesnější použít pro výpočet velikosti Gordian Knot. Mnozí jej s úspěchem používají jako takovou praktickou a všestrannou "kalkulačku" pro výpočet různých potřebných hodnot pro práci s převodem video souborů.


compressibility_check_04


Výslednou Compressibilitu pak vypočteme podle vzorečku: C [%] = (V / (10*X))*100

kde V = odhadnutá potřebná velikost videa (v našem příkladu 590 MB)
a X = velikost 10% získaného videa (například 95 MB)

tedy C = (590/(10*95))*100 = 62,1 %

        Pro 5% odhad by byl vzoreček: C [%] = (V / (20*X))*100
     C = (590/(20*47))*100 = 62,8 %         (kde 47 MB je výsledná velikost naší 5% ukázky)

Jedná se pouze o odhad, i když relativně přesný. Skutečná kompresibilita bude zpravidla o pár procent lepší (maximálně tak o 5%, více ne).


Pravidla pro zjištěnou kompresibilitu:


- nikdy nelézt pod 40% !
- doporučení pro simple XviD je 60-70% (žádné Q-pixel ani B-framy)
- doporučení pro advanced XviD je 65-75% (Q-pixel, B-framy)
- nikdy nelézt přes 85-90% !

Pokud je kompresibilita vyšší než 100% znamená to, že se nevyužije celé médium (film se vejde na CD a zbude ještě volné místo). Můžeme tedy zvýšit kvalitu zvuku (například nechat AC3 místo MP3), zvětšit rozměry výsledného videa.


Takže co tedy se získanými procenty?
- pokud je kompresibilita nižší než požadovaná - zmenšíme rozměry videa nebo použijeme měkčí resize metodu (případně obojí)
- pokud je kompresibilita vyšší než požadovaná - zvětšíme rozměry nebo použijeme tvrdší, ostřejší resize metodu (případně obojí)

Nyní si buď již budeme jisti, že se trefíme, nebo sjedeme "Compressibilty Check" znovu.

Krok číslo 3


Zvolit si vlastní metodu pro zmenšení (Resize).

- Bilinear                  BilinearResize(640,352)
- Simple                   SimpleResize(640,352)
- Soft Bicubic           BicubicResize(640,352,0.333,0.333)
- Neutral Bicubic      BicubicResize(640,352,0,0.5)
- Sharp Bicubic        BicubicResize(640,352,0,0.75)
- Lanczos                 LanczosResize(640,352)

Osobně používám nejčastěji Neutral Bicubic, výjimečně Sharp Bicubic nebo Lanczos. (V poslední době se včak přikláním spíše k Lanczos resize.)


Krok číslo 4


Napsat script:

Základní tvar uvedu na tomto příkladu:

Mpeg2Source("D:\Project_Filmy\Project TentoFilm\TentoFilm.d2v")
Crop(0,74,720,436)
BicubicResize(640,272,0,0.5)

Tento skript můžeme napsat v jakémkoliv textovém editoru, například v NotePad a uložíme s příponou .avs (soubor se bude jmenovat třeba TentoFilm.avs)


Samozřejmě musíme před načtením scriptu v programu VirtualDubMod mít nainstalován AviSynth. Ten je nyní ve verzi AviSynth 2.54 Alpha a existuje již od verze 2.51 jako spouštěcí exe soubor. Instalátor se postará a veškeré potřebné úkoly. Dříve byl program ve formátu zip a musel se spouštět dávkovým soubrem bat a ručně registrovat do systému. Nyní je vše jednodušší.

Základem pro práci s AviSynth je soubor avisynth.dll uložený v direktoráři C:\WINDOWS\system32\ a potřebné pluginy (pro nás nejdůležitější je mpeg2dec3.dll a autocrop.dll) uložené v direktoráři C:\Program Files\AviSynth 2.5\plugins\ . Tento nový AviSynth (2.50 a vyšší) má již v registrech "pevně" zapsanou cestu k pluginům a není tudíž nutné ve scriptech tuto cestu ručně zadávat.


Je potřebné si stáhnout a rozbalit po určitého adresáře program VirtualDubMod (osobně jsem zvolil C:\Program Files\Dalsi SW pro DVD atd\VirtualDubMod\ , ale je to v podstatě jedno). Je potřeba mít čtyři potřebné zip soubory (základní balík- VirtualDubMod_1_4_13_1.zip, AviSynthLexer_0_1.zip, VirtualDubMod_needed_DLLs_251102.zip, a poslední exe soubory - VirtualDubMod_310103.zip). Nedávno (24.3.2003) se objevila nová verze: VirtualDubMod_1_4_13_2.zip.

Nedávno se objevila na Interneu nová verze, VirtualDubMod v.1.5.1.1a, která ale obsahuje pár vážnějších chyb a tak doporučuji počkat a pracovat s verzí 1.4.13.

Na začátku prosince 2003 se objevila na úplně nejnovější verze, VirtualDubMod v.1.5.10.1, která se mi zdá být v pořádku. Osobně ji v současnosti používám.

Opakuji, že všechny tyto programy naleznete, pokud si projdete odkazy na http://www.lopuch.cz/klub.php?klub=divx , případně na /root/dvd_avi_divx/ - zde archiv softwaru pravidelně aktualizuji. V diskusním klubu se dá (v historii - starší příspěvky) najít řešení téměř všech dřívějších problémů, které jsme probírali...


Takto vypadá program VirtualDubMod po spuštění a načtení příslušného korektního avs scriptu:


vdubmod_02

VirtualDubMod je jedním z programů vycházejících ze skvělého Virtual Dubu. Umožňuje všestrannou práci s videem, je rychlý, umí vše potřebné pro naši činnost a je to freeware.


Dalším nutným předpokladem pro další práci s avs scriptem a pro vlastní převod videa je mít v počítači nainstalované potřebné video (a audio) kodeky.

Můj favorit je kodek XviD. (http://www.xvid.org/) Používám ho téměř výhradně (odhadem minimálně v 95% případů). Pro svou činnost musí mít tento kodek v systému nainstalovaný i kodek DivX a to alespoň verzi 4.11. Nic neuškodí, pokud si nainstalujeme i nejnovější DivX 5.1.1

V případě kodeku XviD se jedná o freewarový nástroj na jehož vývoji pracují paralelně tři vývojové skupiny.


http://nic.dnsalias.com/index.html (Nic's XviD binaries)
http://www.roeder.goe.net/~koepi/ (Koepi's new media development site)
http://xvid.hopto.org/ (uManiac's place)
Používám zpravidla nejnovější alfa verzi od Koepiho (v součastnosti mám odzkoušenou verzi z 14.5.2003), někdy jedu i na verzi od Nicka či uManiaků. :-) ( Na základě posledních zkušeností je verze 14.5.2003 dobrá i rychlá a lze ji proto doporučit. )

Jak dál ?


Pokud tedy například script:

Mpeg2Source("D:\Project_Filmy\Project TentoFilm\TentoFilm.d2v")
Crop(0,74,720,436)
BicubicResize(640,272,0,0.5)
načtu ve VirtualDubModu a otevřou se mi okna (bez jakýchkoliv chybových hlášek) s náhledem vstupního i výstupního videa, pokračuji nastavením v záložce "Video" na volbu "Fast recompress" a v záložce "Avi" / "Audio" zaškrtnu "No audio".

Poté ve volbě "Video" zvolím záložku "Compression" a zvolím si kompresi pro další práci (v našem případě XviD MPEG-4 Codec).


vdubmod_03  vdubmod_04

Kliknu na tlačítko "Configure" a pokračuji konfigurací kodeku XviD:


... ale detailní popis práce s XviD kodekem a konfigurace jeho možností bude popsána v následující 4. kapitole - Nastavení kodeku XviD.


Valid HTML 4.01!