Pro změnu zase něco trochu užitečnějšího, byť patrně nic pro znalce Mplayeru. Ve Windows jsem si poslední dobou dost zvykl provádět upscale přehrávaného videa na maximální rozlišení monitoru (v mém případě tedy 1680×1050). Ačkoliv to samozřejmě neudělá z SD videa skutečné HD, je výsledek rozhodně lepší než obyčejné roztažení SD videa přes celou plochu obrazovky. Ve Windows je to s ffdshow prosté – zkrátka se zvolí možnost Resize a zadají se potřebné parametry. V Linuxu to ovšem na první pohled tak snadné není, protože to – podobně jako naprostá většina „fajnovějších“ nastavení Mplayeru – nejde udělat prostřednictvím GUI. Jak už to tak v Linuxu často bývá. Řešení naštěstí není tak složité, jak by se zdálo – jen se dost špatně hledá. Ano, samozřejmě si to lze dohledat v dokumentaci Mplayeru, ale…jsem jediný, kdo se v ní pravidelně ztrácí?
Tak či onak, Mplayer umožňuje použití „video efektu“ scale, kterému lze zadat rozlišení, do kterého se má přehrávané video upscalovat, přičemž lze zadat jen jeden rozměr ze dvou. Tudíž jsou možné například tyto varianty:
mplayer -vf scale=1680:1050 video.avi
mplayer -vf scale=:1050 video.avi
mplayer -vf scale=1680: video.avi
První vezme původní video a provede jeho upscale do 1680×1050 – bez ohledu na původní poměr stran. Druhý vezme původní video a provede upscale tak, aby mělo video na výšku právě 1050 bodů, a šířka se dopočítá automaticky v závislosti na poměru stran videa. A třetí příklad funguje obdobně – provede upscale tak, aby video mělo na šířku právě 1680 bodů, a dojde k automatickému dopočítání výšky.
Problém těchto řešení je patrně nasnadě – nejsou univerzální. V prvním případě skončíme takřka vždy s deformovaným obrazem (leda by stranový poměr videa přesně odpovídal stranovému poměru monitoru), v ostatních dvou obraz sice deformovaný není, ale zase ho nemusíme nutně vidět celý: pokud roztáhneme širokoúhlé video na 1050 bodů na výšku, pak se nám po krajích oříznou větší či menší části obrazu, a pokud zase klasické video 4:3 roztáhneme na 1680 bodů na šířku, pak nám samozřejmě bude chybět horní a spodní část obrazu.
Mplayer má naštěstí v zásobě ne zcela očividné řešení v podobě dalšího „efektu“ dsize. Ten umožňuje definovat maximální rozlišení, do kterého se má video upscalovat. To se dá ideálně zkombinovat s alternativními hodnotami pro efekt scale. Například takto:
mplayer -vf dsize=1680:1050:0,scale=-8:-8 video.avi
Parametr dsize tu určuje maximální rozlišení, které je pro video přípustné, a podivné záporné hodnoty u scale neříkají nic jiného, než že se má video upscalovat do rozlišení, které ani v jedné ose nepřesahuje zadané maximální, ale současně je dělitelné šestnácti (což je požadavek pro bezproblémové přehrávání některých kodeků). Nula v dsize pak určuje právě skutečnost, že se má zachovat poměr stran a video nesmí ani v jednom rozměru přesáhnout zadané hodnoty (ve windowsovském Media Playeru Classic je podobné nastavení označeno jako „touch window from the inside“).
Tohle už funguje přesně tak, jak má – veškerá videa jsou upscalována do maximálního dostupného rozlišení při zachování stranového poměru a současně tak, že nedochází k žádným ořezům. Když už ale upscalujeme, můžeme ještě nastavit vhodný algoritmus, který je pro upscale používán – výchozí je bikubický resize:
mplayer -sws 9 -vf dsize=1680:1050:0,scale=-8:-8 video.avi
Devítka u switche sws (čili software scaler) nastavuje mnou preferovaný upscale algoritmus Lanczos, který mimo jiné video při upscale současně i doostřuje (což je alespoň dle mého názoru při upscale videa stejně více než vhodné udělat). Možné hodnoty jsou samozřejmě uvedené v dokumentaci Mplayeru, ale pro úplnost:
0 - fast bilinear
1 - bilinear
2 - bicubic
3 - experimental
4 - nearest neighbor
5 - area
6 - luma bicubic / chroma bilinear
7 - gauss
8 - sincR
9 - lanczos
10 - natural bicubic spline
No a když už mluvím o úplnosti, tak aby nebylo třeba zadávat pokaždé parametry do příkazové řádky, dají se nastavit jako výchozí v konfiguračním souboru Mplayeru, tedy nejčastěji v ~/.mplayer/config
. Sem je třeba přidat něco takového:
sws=9
vf=dsize=1680:1050:0,scale=-8:-8
Tato nastavení alespoň u mě v Arch Linuxu přebírá i gmplayer, do gui.conf je tedy není třeba zadávat (jde-li to vůbec nějak).