Az MPlayer finomhangolása
[a freshmeat.net számára írta Gereöffy Árpád (A'rpi), az MPlayer írója, ex-maintainere]
A HOGYAN a folytatásban. Az MPlayer egy elsősorban Linuxra írt filmlejátszó, de ennek ellenére megy a legtöbb unix és néhány más architektúrán is, mint pl. OSX, QNX, sőt valami véletlen folytán Windows-on is fut. Annak ellenére, hogy - a mivoltából adódóan - egy desktop alkalmazás, nem mondhatni hogy túl felhasználóbarát lenne. Sőt, régebben én magam is azt mondtam néhány Windows-ról áttérőnek hogy a parancssoros MPlayer helyett inkább a xine-t próbálják ki. Mára ezen a téren is meggyőző erejű fejlesztések történtek: az új MPlayer 0.90 RC sorozat GUI-ja (felhasználói grafikus interfésze) nagyon szép, skinezhető, könnyen használható, és az elvárt GUI funkciók mellett még néhány meglepetést is tartogat. Példa erre az új, egyedi playbar funkció: ha az egérrel a képernyő aljának közepére mutatsz, egy mini-GUI úszik be a képbe a legfontosabb vezérlőfunkciókkal. (Megjegyzés: ez jelenleg csak a 'default' skin-nel működik.)
Látható tehát, hogy a program használata jóval leegyszerűsödött, mindazonáltal a számítógéped "MPlayer-esítése" néha nem triviális.
Ez a rövid kis cikk megpróbálja összefoglalni a szükséges lépéseket az MPlayer Linux-on történő bekonfigurálásához, a legjobb minőség és/vagy teljesítmény elérésének érdekében. Itt megjegyezném hogy a leírtak többsége részletesebben megtalálható a dokumentációban.
Hang meghajtók.
Valószínűleg csodálkozol, hogy miért egy ilyen jelentéktelennek tűnő részlettel kezdem. Nos azért, mert a teljesítményproblémák döntő többségénél itt a hiba. Az ok: sima audio (mint például az .mp3) lejátszása alapvetően különbözik a filmek lejátszásától. Az utóbbi esetben a lejátszónak figyelnie kell az audio és video szinkront is. Mivel minden hangkártya/meghajtó tartalmaz valamiféle bufferelést, az ebből adódó késleltetést kompenzálni kell. Ez első látásra nem tűnik túl nagy feladatnak, mivel mind az ALSA, mind az OSS meghajtóknak van API funkciójuk a bufferek állapotának lekérdezésére, ami által a késleltetés mértéke kiszámítható lenne. Sajnos azonban sok meghajtó (főképp a kernelben lévő OSS-esek) nem implementálják ezeket az extrákat (úgy tűnik a meghajtók írói minden, az mp3 lejátszáshoz szükségtelen funkciót extrának tekintenek), vagy rosszabb esetben az implementáció hibás, és rossz értékeket ad vissza. Hallottam olyan meghajtókról is amelyek a lekérdezéstől lefagyasztották a kernelt.
Tehát sajnos - véleményem szerint - a hangmeghajtók minősége az első számú probléma Linuxon. Ez nem csak MPlayer probléma egyébként, a legtöbb lejátszónak és játéknak(!) szüksége lenne rá, de az MPlayer még ezeknél is érzékenyebb, mivel ebben minden a hanghoz van szinkronizálva. Az eredmény szaggató lejátszás, lefagyás lehet. A szaggatás (a pontatlan értékek visszaadása eredményezi) az új -autosync opció használatával kiküszöbölhető, de jobb magának a meghajtónak a kijavítása. Erősen ajánlott az ALSA 0.9 használata, mert sokkal megbízhatóbbnak bizonyultak mint a kernelbeli OSS meghajtók, még az OSS emulációval is. Ha a kártyádat nem támogatja az ALSA, próbáld ki a 4Front Tech. által készített pénzes OSS meghajtókat, megérik az árukat: helyesen implementálják az OSS API-t, és az ingyenes meghajtókénál több extra funkciót nyújtanak, valamint támogatás is jár hozzá.
VGA kártya
A legtöbb új (az elmúlt pár évben gyártott) kártyának van valamilyen hardveres támogatása a nagyításhoz és a YUV színskála közvetlen használatához. Ez nagyon fontos a jó minőségű (tökéletes szinek) és hardveresen gyorsított teljesképernyős lejátszáshoz. Fontos, hogy magának a kártyának a képessége még kevés az üdvözüléshez, stabil és gyors Linuxos meghajtók is szükségesek. Az utóbbi a nehezebb - mint kiderült -, csak pár kártya rendelkezik tökéletes támogatással, és csak néhány támogatása hiányos, de legalább stabil, működő. A Matrox és ATI kártyákhoz használhatod a VIDIX meghajtóinkat, egyébként pedig reménykedj, hogy az XFree 4.x támogatja a kártyádat, _és_ annak Xvideo kiterjesztését _is_ (futtasd az 'xvinfo'-t). Ismert, hogy az S3 Savage, Trident és Neomagic kártyáknak komoly gondjaik vannak az Xv-vel, amíg sok más meghajtó (mint pl. az nVidia, 3dfx) általában működik, kisebb problémákkal, korlátokkal. Az MPlayerben a video kimenet kiválasztása a -vo opcióval történik, lásd a -vo help opciót a rendelkezésre álló meghajtók listájához. Próbáld ki mindet, és keresd meg amelyik ideálisan működik (minőség/sebesség).
CPU sebesség
Elég gyors a CPU-m a DivX lejátszáshoz? A VGA támogatástól függ. Hogy miért? Lássunk két szélsőséges példát. Van egy 250Mhz-es P-II-esem, egy Matrox G200 AGP kártyával. Képes DVD és 720x576-os felbontású DivX teljesképernyős lejátszására. Az egyik ismerősöm gépe egy 1Ghz-es P-III egy S3 Trio3D-vel, és nem lehet vele DVD-t lejátszani, mivel a meghajtónak nincs Xv támogatása, sőt a DGA sem megy, csak a sima X11 működik. Szoftveres nagyítást kell használnia, miáltal az AGP busz forgalma és a CPU terhelés a többszörösére növekszik. Egyébként Windows alatt kevesebb mint 50%-os CPU használattal tud DVD-t nézni, hála a jobb minőségű Windows-os meghajtóknak. Tehát egy megfelelő Linuxos video meghajtóval szinte bármilyen CPU megfelelő, feltéve hogy legalább 250-300Mhz-es. Kisebb méretű (mint például 512x384) DivX-ek lejátszása pedig akár egy MMX-es P1-166-on is lehetséges! Az egyetlen kivétel ahol a CPU sebessége valóban számít, az a video szűrők, mint pl. a minőségjavítás, deinterlace, zaj eltávolítás, stb, mivel a képfeldolgozás sokkal több CPU időt igényel.
Közvetlen dekódolás (Direct Rendering)
Nem, ennek semmi köze az XFree 4.x DRI-jéhez. A lényege a video kártya RAM-jának közvetlen elérése, a közbeeső 'szükségtelen' rétegek (XFree és/vagy meghajtók) kihagyásával. Gyakorlatilag azt jelenti, hogy a codec nem saját memóriájábam hanem közvetlenül a video kártyáéba ("hard" DR), vagy a video meghajtó memóriájába ("soft" DR) dekódol. A RAM-ból RAM-ba másolások átugrása még nem hoz átütő eredményt tekintve, hogy a mai RAM-ok már elég gyorsak ehhez. Az igazi sebességnövekedéshez az vezet, hogy 2 képkocka között nem változik meg a teljes kép, csak annak 20-40%-a (ahol vmi mozog) (kivétel a mozgó kamera), ezért ilyenkor elég a képnek csak az említett 20-40%-át átmásolni az amúgyis lassú video RAM-ba a még lassabb PCI/AGP buszon - ez ÓRIÁSI sebességnövekedés lassabb rendszereken (mint például az AMD K6-ok). A DR bekapcsolása a -dr opcióval történik MPlayer-ben, alapban ki van kapcsolva. Érdemes figyelni arra, hogy ahhoz, hogy az opció valóban működjön, sok feltételnek kell teljesülnie (codec-ek, szűrők, colorspace-ek, és a video meghajtó megfelelő képességeinek rendelkezésre kell állnia). Az MPlayer -v opcióval történő futtatásával megfigyelhető hogy buffer allokáció vagy DR történik.
A DR hátrányai:
- "hard DR"-t támogató VGA meghajtó szükséges (VIDIX, mga_vid, DGA, VESA, fbdev)
- természetéből adódóan nem működik double bufferrel (tearing effekt-et okozhat)
- néha hibás lehet vele az OSD/felirat megjelenítése
Síma lejátszás
Az alapértelmezett A-V szinkron paraméterek nem tökéletes file-okra vannak kihegyezve, hanem az átlagos, "out there" file-okra. Jó minőségű videók esetén tanácsos lehet az A-V sync korrekció limitálása a folytonosabb lejátszáshoz. A szinkron legfontosabb paramétere az '-mc'. Ennek jelentése 'maximális a-v korrekció képkockánként', és alapértéke 0.01. Megfelelő bemenetnél ez levihető 0.0001-ig, de a legtöbb esetben 0.001 már elég. Bár a kisebb értékek folyamatosabb lejátszást eredményeznek, de egyben lelassítják az A-V deszinkronizáció kompenzálását (hibás/átugrott kockák, stb).
Ha már ilyen mélységben nézzük a problémát, érdemes odafigyelni a video időzítőre is. Bizonyosodj meg arról hogy a hardveres RTC van használtban, ellenőrizd az MPlayer kimenetét. Régebbi kerneleknél ehhez 'root' jogokra van szükség. A 2.4.19pre8 és afölötti verziókban normál felhasználóknál is beállítható:
echo 1024 > /proc/sys/dev/rtc/max-user-freq
(persze ezt be is kell fordítani előzőleg a kernelbe)
Ha a hangkártyád/meghajtód nem tökéletes (én még nem láttam tökéleteset...), szükséges lehet kicsit megtámogatni az időzítését, kezdésként mondjuk az -autosync 30 opcióval. A magasabb értékek több "elmosást" jelentenek, de a túl magas érték esetén elhanyagolja a hangkártya időzítését, és ez persze A-V deszinkronizációhoz vezethet.
Képminőség avagy a szűrők használata
Amennyiben a video forrás nem tökéletes (zajos/váltottsoros/"kockás"), és van egy kis fölös CPU időd, probálj ki néhányat az MPlayer szűrői közül.
Váltottsoros (interlaced) videóhoz (gyors mozgásoknál minden második sor kicsit elcsúszik, ettől fésű-szerű lesz az egész), használd a -vop pp=0x20000 opciót. Ha ez nem hozza a várt eredményt, próbálj más deinterlacer-t, mint pl. a 0x10000, 0x40000, 0x80000. Rosszul konvertált NTSC filmekhez a -vop dint szűrő való, vagy az FFmpeg adaptív szűrője: -vop pp=fd:c vagy -vop lavcdeint.
Szűkös CPU idő esetére (a deinterlace-elés CPU igényes művelet) rendelkezésre áll néhány 'olcsó' deinterlacer is: -vop halfpack, vagy -vop field.
"Kockás" videóhoz (alacsony bitrátájú DivX/WMV vagy rossz minőségű (S)VCD) használd a deblocking, és opciónálisan még esetleg a deringing minőségjavító szűrőket. Ha csak a deblocking-ot akarod használni, arra a -vop pp=0x33 opció, deblock+dering-re a -vop pp=0x77 való. Természetesen kombinálni is lehet a szűrőket, például deblocking és deinterlacing-hez -vop pp=0x20077 (néhány SVCD-hez hasznos). Ha nem tetszik a bináris aritmetika, az emberibb -vop pp opciók listája a -pphelp opcióval kérhető le.
Zajos videóval (régebbi DVD-k is lehetnek ilyenek) a -vop denoise3d szűrő lélegzetelállító eredményre képes. Az alapértékek (4:3:6) nem tökéletesek minden videóhoz, érdemes megnövelni/csökkenteni a spatial és temporal mennyiséget, a zajszinttől függően. Az első paraméter a luma spatial koefficiens (magasabb szám símább képet jelent - de elmosódottabb is lesz, a smartblur szűrőhoz hasonlóan), a második pedig ugyanez a chroma-ra. MPEG videóhoz akkor a legjobb ha a chroma értéke fele a luma értékének. Az utolsó szám a temporal szűrés. Ez a leghatásosabb mert nem homályosítja el a képet, de a túl magas értékek (>15) darabos mozgást eredményeznek, és néha motion blur effektet is. Ha még mindig van egy kis szabad CPU időd, kipróbálhatod a -vop hqdn3d szűrőt, ez az előző szűrő megnövelt precizitású változata (csak a 'main' CVS verzióban)
Szoftveres nagyítás
Még ha a VGA kártyád és annak meghajtója támogatja is a hardveres nagyítást, ki lehet próbálni az SwScaler-t a jobb minőség eléréséhez (hátránya természetesen a magas CPU kihasználtság). Megjegyzendő hogy az swscaler képes néhány szűrő használatára is, lásd az -ssf opciót. A nagyítás módszerének kiválasztása az -sws opcióval lehetséges, amelynek értékei a nearest-neighbor (pixeles)-től a bicubic spline-ig (a legszebb) terjedhetnek.
Összegzésként annyit mondanék, hogy az MPlayer egy nagyon jól skálázható lejátszó, a legrosszabb P1-es géptől kezdve az N GHz-es CPU-kig minden gépből kihozza a legjobbat - viszont ehhez sok RTFM és kísérletezés kell...
Az eredeti verzió az MPlayerHQ-n.