Video kodek x264 je momentálně, co se kvality výsledného obrazu týče, nejlepším video kodekem, který lze v Linuxu použít. Podává dobrý obraz v plném rozlišení DVD i při poměrně nízkém bitrate (kolem 875 kbps) i ve výchozím nastavení, které používá Mencoder a s ním i jiný software (např. K9copy). Zvědavost mi nedala a tak jsem si pohrál s jeho nastavením ve snaze vymačkat z něj co nejkvalitnější obraz při co nejnižším bitrate, ale při plném rozlišení DVD, jest 720×576 pixelů.

Pokud chcete tento kodek použít v Sabayonu, je třeba nainstalovat následující balíčky: x264 a jeho závislosti, dále gst-plugins-x264 a nebo mediastreamer-x264. Mencoder je součástí balíčku mplayer.

Že chcete použít kodek x264 Mencoderu sdělíte parametrem -ovc x264, parametry kodeku předáte pomocí -x264encopts, jednotlivé parametry se oddělují dvojtečkou. Obecná syntaxe je následující:

mencoder vstupni_soubor -ovc x264 -x264encopts parametr 1:parametr 2: ... :parametr n -o vysledek.avi

Jednotlivé parametry

bitrate=<hodnota> udává bitrate v kbps.

qp=<0-51> udává hodnotu konstantního kvantizeru. Prakticky je použitelný rozsah 20 – 40. Platí, že čím nižší hodnota, tím lepší výsledná kvalita (a taky větší soubor). Tento parametr nepoužívám, zadávám raději hodnotu bitrate.

crf=<1.0-50.0> tento parametr zapíná režim kvality, rovněž jej nepoužívám.

Parametry bitrate, qp a crf spolu vzájemně kolidují, použijte jen jeden z nich.

pass=<1-3> zapíná víceprůchodové enkódování, toto rozhodně doporučuju použít, vliv na kvalitu je značný.

turbo=<0-2> určuje rychlost režimu prvního průchodu. Výchozí hodnota je 0, tedy vypnuto. Toto nechávám vypnuté.

keyint=<hodnota> je maximální interval mezi IDR snímky. Výchozí hodnota je 250, což odpovídá 10 sekundám videozáznamu při FPS 25. Toto ponechávám.

keyint_min=<1-keyint/2> je minimální rozestup mezi IDR snímky. Výchozí hodnota je 25, rovněž ponechávám. Maximální akceptovaná hodnota keyint_min je polovina keyint.

scenecut=<-1-100> ovládá, jak agresivně budou vkládány I snímky navíc (výchozí hodnota 40). Nižší hodnoty nutí používat I snímky až při překročení hodnoty keyint. Vyšší hodnota vkládá I snímky častěji, což zvyšuje kvalitu obrazu v rychle se měnících scénách, též ale zvyšuje bitrate. Hodnota -1 zcela vypne vkládání I snímků. Používám výchozí hodnotu 40.

frameref=<1-16> určuje počet snímků použitých pro predikci, výchozí hodnota 1. Tuto hodnotu navyšuji u hraných filmů na 5, u kreslených filmů na 8.

bframes=<0-16> určuje maximální počet po sobě jdoucích B snímků. Výchozí hodnota je 0. Osobně používám 8 snímků.

b_adapt zapíná adaptivní vkládání B snímků, maximálně však dle hodnoty bframes. Pokud použijete vyšší hodnotu bframes než-li 2, je rozhodně dobré toto zapnout.

b_bias=<-100-100> ovládá rozhodovací proces b_adapt. Vyšší bias produkuje více B snímků.

deblock zapíná použití deblokovacího filtru. Toto rozhodně použít.

cabac zapíná kompresi dat CABAC, namísto výchozího kompresního algoritmu CAVLC. Toto též používám, snižuje velikost výsledného souboru tak cca o 10 %.

qp_min=<-1-51> udává minimální hodnotu kvantizeru. Používám výchozí hodnotu 10.

qp_max=<-1-51> udává maximální hodnotu kvantizeru, výchozí hodnota je 51. Toto snižuji na 45.

qp_step=<1-50> udává maximální hodnotu, o kterou se může změnit hodnota kvantizeru mezi snímky. Používám výchozí hodnotu 4.

ratetol=<0.1-100.0> udává povolenou odchylku v průměrném datovém toku. Používám výchozí hodnotu 1.0.

vbv_maxrate=<hodnota> udává maximální okamžitý datový tok. Výchozí hodnota je vypnuto. Toto nepoužívám.

qcomp=<0-1> udává kompresi kvantizeru. Nižší hodnota stabilizuje datový tok, vyšší hodnota zase kvantizační parametr. Používám výchozí hodnotu 0.6.

cplx_blur=<0-999> určuje rozostření komplexnosti pracovního snímku. Nižší hodnoty umožňují hodnotě kvantizeru rychlé změny, vyšší hodnoty vynucují pomalejší změny. Pro hrané filmy používám výchozí hodnotu 20, u kreslených filmů hodnotu zvyšuji na 80.

direct_pred=<jméno> určuje metodu odhadování pohybu. Možnosti jsou: spatial (prostorová) je výchozí, temporal (průběžná) a auto, která kombinuje obě metody. Používám volbu auto.

weight_b při zapnutí této volby kodek klade nižší váhu predikce v B snímcích oproti I a P snímkům. Toto je dobré použít.

partitions=<seznam> určuje seznam používaných typů makrobloků. Výchozí používané makrobloky jsou: p8x8, b8x8, i8x8 a i4x4. Při nízkém rozlišení videa (cca pod 200 x 200 pixelů) je dobré seznam nastavit na hodnotu all.

8x8dct zapíná adaptivní velikost transformovaného prostoru. Toto rozhodně zapínám.

me=<jméno> volí celopixelový algoritmus odhadu pohybu. Výchozí hodnota je hex (jest šestiúhelník 2 pixely). Používám hodnotu umh (jest multiúhelníkové vyhlédávání), která zpomaluje rychlost kódování, ale podává lepší výsledky než-li hodnota hex.

me_range=<4-64> určuje rádius důkladného vyhledávání pohybu, výchozí hodnota je 16. U filmů s plným DVD rozlišením tuto hodnotu zvyšuji na 24.

subq=<1-7> nastavuje kvalitu subpixelového dolaďování. Výchozí hodnota je 5, používám hodnotu 7.

chroma_me při vyhledávání pohybu bere v potaz barevnou složku obrazu. Výchozí zapnuto.

mixed_refs umožňuje každému pohybovému oddílu nezávisle zvolit referenční snímek. Pokud je parametr frameref větší jak 1, je toto dobré zapnout.

trellis=<0-2>určuje optimální kvantizaci z hlediska datového toku. Výchozí je vypnuto. Pokud je parametr subq větší než 6, používám hodnotu 2.

Výsledná syntaxe v Mencoderu

Když tedy použiji v Mencoderu kodek x264 výsledný příkaz pro první průchod vypadá takto:

mencoder vstupni_soubor -nosound -ovc x264 -x264encopts bitrate=825:pass=1:scenecut=40:frameref=5:bframes=8:b_adapt:deblock:cabac:qp_min=10:qp_max=45:qp_step=4:qcomp=0.6:cplx_blur=20:direct_pred=auto:weight_b:8x8dct:me=umh:me_range=24:subq=7:mixed_refs:trellis=2 -o vysledek.avi

Pro druhý průchod je příkaz stejný, pouze u parametru pass je namísto hodnoty 1 hodnota 2. Parametr nosound říká Mencoderu, že nemá zpracovávat ve vstupním souboru audio. Výsledný soubor je tak bez zvuku, který zpracovávám zvlášť. Pokud by jste chtěli video i se zvukem, zadejte místo nosound parametr -oac copy, který zachová formát zvuku ze vstupního souboru.

… a závěr

Závěrem ještě přidám něco málo mého subjektivního hodnocení kvality.

1000 kbps – obraz je velmi dobrý, bez artefaktů.

875 kbps – obraz je dobrý, artefakty se vyskytnou jen velmi vyjímečně u zvláště dynamických scén.

750 kbps – pořád se dá na to dívat, artefakty se již objevují častěji (nejsou příliš nápadné), zejména u komplexních obrazů.

Kdybych to měl porovnat s defaultním nastavením, tak zejména při nižším bitrate kolem 750 kbps je výsledná kvalita obrazu “poladěného” kodeku x264 vskutku lepší.

O ladění jednotlivých parametrů se můžete více dočíst třeba na fóru doom9 a mnoho praktického v jednotlivých vláknech fóra Hydrogen Audio.