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.
Říjen 18th, 2010 on 20:34
Parada, diky.
Jen poznamka .. nebylo by z hlediska kvality lepsi pouzivat crf namisto bitrate?
Listopad 23rd, 2010 on 13:20
Jeste bych doporucil parametr mbtree