Kódování videa
Kapitoly článků
Pokud znáte grafiky ATI a jejich schopnosti kódování videa, zejména utilitou, která je součástí ATI Catalyst ovladačů, asi si ťukáte na čelo, proč chceme řešit kódování videa něčím takovým, jako je integrovaný Radeon HD 4290. Částečně máte pravdu, nicméně nám přišlo vhodné se u tohoto tématu krátce na jedné straně zastavit. Pokud znáte program DXVA Checker na zjišťování schopností hardwarové akcelerace přehrávání od jistého japonského nadšence říkajícího si "Bluesky", pak jste možná už zahlédli také jeho A's Video Converter, program, který 12. prosince loňského roku vyšel ve verzi 2.1.2.0 (verze 2.0.0.0 se datuje už k 12. červenci 2009, takže ten program už za sebou nějakou historii má).
Tento program je zdarma (autora však můžete odměnit, pokud chcete) a je určen ke kódování videa pomocí DirectShow filtru z Avivo Video Converteru, který je pro grafiky ATI k dispozici už od Radeonů X1300. Potud se jedná v podstatě o totéž, co dělá utilita ATI AVIVO Video Converter z Catalystů. A's Video Converter však navíc umožňuje "GPU akceleraci", která je podporována na kartách zvládajících ATI Stream od Catalystů 8.12. Ano, máme tu v podstatě cosi do činění s utilitou srovnatelnou např. s konkurenční Badaboom pro grafiky Nvidie, jenže tato je zcela zdarma. Nejásejte, až uvidíte výsledky, mávnete nad tím rukou.
Program má ještě navíc tu zajímavou vlastnost, že je možné nastavit kódování až čtyř videí současně. Realita je taková, že kódování je celkem rychlé, a to jak bez GPU akcelerace, tak i s ní, nicméně výsledky nejsou nijak oslnivé, vaše oblíbené softwarové kodéry ještě rozhodně nemažte, i když budou nejspíše pomalejší.
Na obrázku tedy vidíte průběh kódování hned čtyř (stejných) videí naráz a my jsme měřili čas, za jak dlouho se překódují všechna videa, tedy je udáván čas posledního (kódování všech videí doběhlo zhruba ve stejnou dobu, ale jedno vždy bylo nejpomalejší). Průběh prvního videa se zrovna v momentě vytvoření screenshotu obnovoval, proto chybí zelený proužek, ale video je přibližně ve stejné fázi jako ostatní čtyři (šlo o tentýž soubor, jen rozlinkovaný na čtyři názvy souborů).
A takto vypadá průběh kódování s vypnutou GPU akcelerací. Se čtyřmi videi to není patrné, ale pokud je kódováno jen jedno, vypadá zátěž čtyřjádrového procesoru úplně stejně. Naproti tomu při kódování jednoho videa se zapnutou GPU akcelerací je zátěž procesoru značně menší.
Ještě jsme zkusili strčit do PCIe ×16 slotu Radeon HD 3850 a připojením displeje do obou grafik jsme je zprovoznili. A's Video Converter pak vidí obě a při zapnutí GPU akcelerace se skutečně tváří, jakoby obě dvě využíval, i když to rozložení zátěže je trochu jiné oproti očekávání, skoro to vypadá, že i tak používá grafiku jen jednu, tu primární.
Každopádně nás zajímalo, jaký je rozdíl mezi videem kódovaným se zapnutou a vypnutou GPU akcelerací. Docela veliký. Pomineme-li nyní fakt, že kodeky byly nastaveny se zbytečně moc velkým datovým tokem, je vidět rozdíl už ve velikosti výsledných souborů.
Na obrázku jsou kratší soubory kódovány bez GPU akcelerace, delší soubory s GPU akcelerací. Ačkoli tedy měníme pouze tuto položku, nejspíše se používá v každém případě jiné nastavení a jistě tedy i jiný způsob kódování.
Nyní se podíváme na výsledky kódování nastaveného podle následujícího scénáře. Kódujeme náš starý známý trailer filmu "Děkujeme, že kouříte", nastavení kodéru je následující (měnili jsme i rozlišení právě podle cílového videa):
Máme tři situace kódování a pro přehlednost si je dáme zvlášť, nebudeme to míchat do jednoho grafu. Stav, kdy kódujeme video jen jedno, stav, kdy kódujeme taková videa dvě a konečně stav, kdy kódujeme čtyři stejná videa.
1 video
Ať je to jak chce, kódování procesorem je vždy rychlejší a zrovna kódování Radeonem HD 4290 je z uvedených situací znatelně nejpomalejší, přestože je i tak relativně svižné (Avidemux stejné video kóduje na momentálně nejrychlejším procesoru přes 7 minut, samozřejmě s trochu jiným nastavením, za pomoci trochu jiného kodeku a kvalitativně také nejspíše s trochu jiným výsledkem). Pojďme se ale podívat na výsledky kódování dvou videí současně.
2 videa
Tady už se nám mírně karty obracejí, protože tento proces je z nějakého důvodu ne příliš dobře optimalizován pro více jader. Jak jistě víte, video se musí z výchozího formátu nejprve dekódovat a pak se musí zakódovat. Vypozorovali jsme, že o dekódování se v případě této aplikace vždy stará procesor a právě proces dekódování, zdá se, dělá jen jedno z jeho jader, a to i v případě práce s více videi. Není-li povolena GPU akcelerace, procesor dělá jedním jádrem obojí, jak kódování, tak dekódování, opět i v případě kódování několika souborů současně. Jenže u grafik je v případě kódování více videí naráz zaznamenána znatelně vyšší zátěž, z čehož usuzujeme, že grafika video kóduje dost rychle na to, aby jich stíhala víc. Proto už procesor začíná být pomalejší.
4 videa
Kódování čtyř videí současně už je problém, protože procesor je musí všechna dekódovat a dělá to jen jedním jádrem. Má-li je tímtéž jádrem ještě stíhat zakódovat, musí být už nutně nejpomalejší, i když bychom určitě čekali, že mu to dá o poznání víc práce, než jaký je výsledek. U Radeonů HD 3850 a 4850 už jde spíše o chybovou toleranci, protože obě grafiky si i při kódování čtyř videí válí tranzistory, neboť procesor jim nestíhá dodávat data ke zpracování, sám toho má až nad hlavu. Radeon HD 4290 je však sám zatížen hodně a jeho "pomalost" dokáže proces také znatelně zbrzdit, i když by v případě rychlejší dodávky dat ke zpracování ze sebe dokázal ještě něco vymáčknout.
Nyní si všimněte, o kolik více času potřebuje sestava k překódování videa při porovnání jednoho a dvou a potom dvou a čtyř videí:
2 vs. 1 video
U kódování procesorem je znát, že zpracování dvou videí trvá téměř dvojnásobek času než zpracování jednoho videa (spíše nás překvapuje, proč to netrvá více než dvakrát tak dlouho). Radeon HD 4290 má však překvapivě nejnižší poměr, o to vyšší zátěž má při zpracování dvou videí oproti jednomu. Neméně zajímavý je i graf porovnání zpracování čtyř videí oproti dvěma.
4 vs. 2 videa
Zkrátka čím víc videí, tím více proces brzdí procesor. V tomto smyslu je až paradoxní, že je vlastně výhodnější pro danou práci použít právě integrovanou grafiku namísto grafiky výkonné v PCIe slotu, protože výkonnou grafiku bude stejně brzdit procesor. Je však přinejmenším zvláštní, že procesor stíhá i čtyři videa zakódovat tak rychle, že není příliš rozdílu mezi tím, když to kóduje sám a když to dělá grafika. Určitě je ale škoda, že program nepočítá třeba s tím, že by dekódování videa také svěřil grafice, je zbytečné, až kontraproduktivní něčím takovým zatěžovat procesor, navíc ještě tak neefektivně, že se touto činností zabývá jen jedno jádro.
Rozhodně berte A's Video Converter jako první bezplatnou vlaštovku mezi programy schopnými využít grafiku ATI ke kódování videa, a to i přes skutečnost, že pokud pasete spíše po kvalitě převodu, rozhodně bychom doporučili programy jiné, které touto činností zaměstnávají procesor. Nyní se totiž spolu můžeme podívat na kvalitu takového převodu. Na prvním snímku vidíte originál:
Zde jsou výsledky, nejprve ten nejhezčí z Avidemuxu (nastaveno také na 2000 kbit/s):
A zde jsou dva z A's Video Converteru, nejprve kódování bez GPU akcelerace:
A s GPU akcelerací (pomocí Radeonu HD 4290):
Doporučujeme si do jednotlivých panelů v prohlížeči otevřít velké obrázky a porovnávat přepínání mezi nimi. Vaší pozornosti při srovnávání doporučujeme vyhlazení rozmazaného obličeje reportérky se zeleným mikrofonem, čitelnost značky foťáku vpředu, vroubkování na tyči u blesku nebo vpravo detail přezky.