MPlayer

Allikas: Pingviini viki

MPlayer on väga võimalusterohke videomängija. Kõiki võimalusi saab juhtida käsurealt, mistõttu esmakasutaja ei pruugi kohe aru saada mida ja kuidas teha saab. Paraku vajab kõigest arusaamine rohkeid eelteadmisi Linuxi tuumast, X11 serveritest, ALSA ning OSS helisüsteemidest ning üldisestest digitaalse video-audio põhimõtetest.


MPlayer on Ungari päritolu Vaba Tarkvaraline videopleier. MPlayer töötab nii GNU/Linuxis, Windowsil ning ka Mac OS X's. MPlayerit eristab teistest pleieritest võimalus maha mängida mitmeid mitte-vabaid vorminguid kasutades kinniste pleierite ja koodekite teeke (library). Praktikas tähendab see seda et Linuxi MPlayer oskab kasutada Linuxi RealPlayeri teeke (.so lõpuga failid), et maha mängida RealMedia faile (.rmvb). MPlayer sisaldab osa WINE projekti koodi [1], mille abil saab kasutada Windows Media Playeri teeke (.dll failid), et maha mängida kinnises vormingus Windows Media (.wmv, .wma) faile. MPlayeri kui-kuidagi-ei-saa-siis-kuidagi-ikka-saab mõtteviis teebki MPlayeri nii vahvaks


MPlayer

MPlayeri funktsionaalsus sõltub suuresti kompileerimisvõtmeist, kuid enamus funktsionaalsusest peaks olemas olema igas GNU/Linux ja *BSD distributsioonis. Enamasti on kaasas ka video kodeerija, mencoder, mille abil saab kõike MPlayeri mahamängitavat kodeerida ümber erinevatesse videovormingutesse. Näiteks saab mencoderi abil DVD rippida Xvid/MP3 formaati

Sisendid

Toetatud failivormingud

  • Esiteks tuleks tähele panna et faililõpp .avi ei tähista failivormingut, AVI ehk Audio Video Interleaved on heli-video konteiner, mis töötati välja muuseas Microsofti poolt. Samamoodi on Apple Quicktime .mov lõpuga failid ning RealMedia .rmvb lõpuga failid samasugused konteinerid. Enamasti kasutatakse AVI konteinerit, et oleks üks ja ainus faililaiend mille järgi videomängijat avada. AVI konteineris võib olla pea mis iganes, näiteks MPEG2, MPEG4, DivX või XviD video ning MP3, OGG Vorbis või AAC heli. Vormingute tugi sõltub ka sellest kas need näiteks kompileerimise ajal kaasati.
  • Toetatud videovormingute nimekiri:
Nimetus Enimkasutatav faililaiend/konteiner Toetab voogude esitamist Looja Litsents Teek
MPEG1-4 AVI ja MPEG Jah Fraunhoffer? ? ffmpeg?
DivX 3-5 AVI ja MPEG Jah? ? ? ffmpeg?
Xvid AVI ja MPEG Jah? ? GPL ffmpeg
RealMedia RealMedia (.rm, rmvb) Jah RealNetworks Omanduslik Linuxi Realplayeri teegid
Windows Media 7-8 Windows Media Video (.wmv) Jah Microsoft Omanduslik Windowsi DLLid
Apple Quicktime Apple Quicktime (.mov) Jah? Apple Omanduslik ffmpeg
Adobe Flash 9 FLV konteiner Jah Macromedia/Flash Vabavara ffmpeg? Toetatud mplayeri SVN versioonis
  • Toetatud helivormingute nimekiri:
Lühend Toetab eraldi failide esitamist Toetab voogude esitamist Pikk nimetus Looja Litsents Teek
MP3 Jah (.mp3) Jah MPEG-1 Layer-3 Fraunhoffer Institute? Omanduslik ffmpeg?
OGG Jah (.ogg) Jah OGG Vorbis ? GPL libogg,libvorbis
PCM Jah (.wav, jms konteinerid) ? Pakkimata heli ? ? ?
WMA Jah (.wma, .asf), va DRMiga kaitstud Jah, va DRMiga kaitstud Windows Media Audio Microsoft Omanduslik ffmpeg + Windowsi DLLid
FLAC Jah (.flac) Jah Free Lossless Audio Codec ? GPL? ffmpeg
AAC [2] ? Jah Advanced Audio Coding ? Pool-vaba [3] ffmpeg

DVD

Tähele tuleks panna et mõningad DVDd on kasutavad nn. bad-sectorite põhist turvat. Kui kommertspleier teab millised sektorid vahele jätta siis mplayer jääb hätta nendega ning DVD mahamängimiseni ei jõuagi. Ogle DVD pleier [4] ja VLC pleier [5] saavad selliste DVDdega õnneks hakkama.

Väljundid

XVideo videoväljund

...ehk X11 laiendus video jaoks on eelkõige mõeldud video näitamiseks X11 serverites, pakkudes võimalust skaleerimist teostada X11 serveril riistvaraliselt. Riistvaraline skaleerimine tähendab seda, et kui teie ekraan (X11 server) töötab resolutsioonil 1024x768 ning video, mida te vaatate, on 720x576, siis videokaart nö venitab video suuremaks. XVideo puhul liigub videovoog otse mängijast videokaardi mällu, mistõttu on see tõenäoliselt kõige parem moodus video mahamängimiseks. Kui videokaart või selle draiver seda ei oska, tuleb skaleerimine teha protsessoril ning tarkvaraliselt, mis on suhteliselt aeglane ning kasutab palju protsessori aega, mistõttu jääb teistele programmidele vähem ressursse. XVideo võimaluse puudumisel kasutatakse üldjuhul X11 väljundit. Reeglina on videokaardil ning videokaardi draiveril see funktsionaalsus olemas ning kasutaja võib rahumeeli XVideo väljundit kasutada. Enamikes videomängijates (mplayer, vlc, kaffeine, xine, totem) ongi see vaikimisi valitud, väjunddraiverite nimekirjas kasutatakse lühendit xv.

mplayer -vo xv fail.avi 


X11 videoväljund

... kirjutab kaadrid otse X11 serverisse, ilma lisainformatsioonita, mistõttu seda ei saa skaleerida. Üldjuhul on X11 väljund aeglane video jaoks, kuna video liigub läbi operatiivmälu, mitte otse videokaardi mälusse nagu XVideo puhul. X11 protokoll moodustab X11 klientide-serverite suhtluspõhja ning kui muud väljundid ei tööta siis X11 töötab igal juhul.

mplayer -vo x11 fail.avi
# Videot saab skaleerida tarkvaraliselt, kui defineerida kõrguseks -3,
# siis arvutatakse kõrgus originaalvideo laiuse/kõrguse suhte värgi
mplayer -vo x11 -vop scale=1024:-3 fail.avi

OpenGL videoväjund

...renderdab kaadrid otse videomällu OpenGL tekstuurina polügonile. See eeldab korrekselt installitud videodraivereid, mis toetavad riistvaralist 3D renderdamist, vastasel korral kasutatakse MESAt ehk tarkvaralist 3D renderdajat, mis on väga aeglane. OpenGL videoväljund on vajalik 3D töölaua (Beryl, Compiz) jaoks, kus XVideo või X11 videoväljundid ei tööta korrektselt, kuna nad pole ette nähtud töötama sellises keskkonnas.

mplayer -vo gl fail.avi
mplayer -vo gl2 fail.avi

Framebuffer videoväljund

Framebuffer videoväljundit saab kasutada kui on õigesti seadistatud Linux'i framebuffer

mplayer -vo fbdev fail.avi
# 90kraadi pööratud pilt, näiteks pihuarvutil kus jookseb Debian GNU/Linux
# ning framebufferi native resolutioon on 240x320:
mplayer -vo fbdev2 fail.avi

ALSA heliväljund

ALSA (Advanced Linux Sound Architecture) on nüüdseks välja vahetanud vana OSS helisüsteemi (Open Sound System). Vaikimisi ALSA väljund miksib kõik kokku kahekanaliliseks stereoheliks. ALSA ning OSS erinevus seisneb ülesehituses ning funktsionaalsuses. Kui OSS puhul saab helikaarti kasutada üks programm korraga siis ALSA oskab kõik kokku miksida (võimalusel riistvaraliselt), ALSA on võimeline mängima mitmekanalilist heli, selle jaoks on vaja seadistada .alsarc faili.

mplayer -ao alsa failinimi

Võrgu transparentsus

Idee

  • UNIXilaadsete operatsioonisüsteemide puhul on olulisel kohal võrgu transparentsus. Mida see tähendab? Ütleme et teil on kolm arvutit ning neis kõigis jookseb GNU/Linux:
Arvuti A on sinu sülearvuti
Arvuti B sees on videokaart ning selle küljes videoprojektor 
Arvuti C sees on helikaart, kuhu on ühendatud vägev helisüsteem
  • Video saadetakse XVideo väljundi abil arvuti B X11 serverisse ning heli tuleb arvutist C EsounD deemoni abil. Tähele tuleks panna et XVideo puhul liigutatakse pakkimata videot, see tähendab et 1024x768 resolutsiooniga filmi puhul (24fps, 24bit), läheb võrgust läbi ühes sekundis umbkaudu: 1024 * 768 * 24 * (24/8) = 54 Megabaiti. Tegelikkuses kasutatakse väiksemat resolutsiooni ning väiksemat bitisügavust, nii et keskmiselt läheb DVD tasemel video jaoks vaja 30MB/s, mis vajab gigabitist võrku.

X11 ja XVideo ümbersuunamine

  • X11 serveri valimine käib shelli muutuja $DISPLAY abil. Muutuja koosneb IP aadressist või hostnamest ning X11 serveri nummerdusest, järgnevas näites 192.168.1.110:0.0 tähendab et püütakse võtta kontakti X11 serveriga IP aadressil 192.168.1.110 ning :0.0, tähistab esimest serverit.
DISPLAY=192.168.1.110:0.0 mplayer fail.avi
  • DISPLAY muutujat saab õigupoolest kasutada suvalise programmi ümbersuunamiseks mis kasutab graafilise aluspõhjana X11 protokolli, näiteks:
DISPLAY=192.168.1.119:0.0 firefox
  • Arvuti, kuhu X11 ühendus ümber suunatakse, tuleb lubada ühenduste tegemine X11 serverisse
# Lubame kõikidelt IP aadressidelt:
xhost +
# Saab ka üksikuid arvuteid lubada. Lisame arvuti, IP-ga 192.168.1.111 lubatud arvutite nimekirja:
xhost 192.168.1.111
  • Tavaliselt X11 serveril on keelatud IP aadressil kuulamine turvalisuse mõttes. Kohalike rakenduste X11 andmevahetus liigub läbi UNIXi socketite, tavaliselt fail nimega: /tmp/.X11-unix/X0.
  • Kui ei kasutata ühtegi sisselogimisabistajat (KDM, GDM, XDM). Ava fail /etc/X11/xinit/xserverrc. Viimane rida peaks välja nägema midagi sellist:
exec /usr/bin/X11/X -dpi 100
# Mitte selline:
exec /usr/bin/X11/X -dpi 100 -nolisten tcp
# -nolisten tcp tähendabki seda et X11 server ei kuula sissetulevaid X11 ühendusi
  • Kasutatakse KDM sisselogimisabistajat (Näiteks Kubuntu puhul)
???
  • Kasutatakse GDM sisselogimisabistajat (Näiteks Ubuntu puhul)
???

Heli ümbersuunamine

  • Kuigi heli edastamiseks on võimalusi veelgi rohkem kui video jaoks, kasutame siin EsounD deemonit ning mplayeri kliendituge selle jaoks. Arvutis, kust heli peaks väljuma, peab olema paigaldatud EsounD deemon. EsounD deemoni enimkasutatavaks käivitamiskäsuks kujuneb tõenäolselt järgnev rida:
esd -tcp -port 16001 -public -nobeeps &
  • Kui nüüd EsounD deemon on käivitatud, võib sellele heli ette sööta MPlayerist. MPlayeri võti EsounD heliväljundi kasutamiseks on -ao esd:host:port, host on arvuti IP aadress kuhu heli suunatakse. Ametlikult kasutab EsounD vaikimisi porti 16001, kuid möödalaskmisi võib kohata nii siin-seal, nii et kindluse mõttes võiks sellegi ära märkida:
mplayer -ao esd:192.168.1.113:16001 fail.avi
  • Nagu X11 puhulgi, on EsounD tugi mitmetel programmidel, küll aga süntaks võib erineda programmiti. Amarok loeb EsounD remote aadressi shelli muutujast $ESPEAKER. Lisaks tuleb menüüst valida Settings -> Configure Amarok. Ning Engine alt Output plugin hüpikmenüüst esd. Tavaliselt kasutatakse ALSA väljundit (alsa)
ESPEAKER=192.168.1.113 amarok &

Aeglane arvuti

Siin on väga palju võimalusi mida proovida. Kõigepealt tuleks aga tähele panna, et millise lahtipakkimiskoodekiga mida teha saab. Xvid, RealMedia (rmvb) ja WMV tüüpi videotele järgnevat käsku ei saa kasutada, kuna nende mahamängimiseks ei kasutata ffmpeg koodekit, küll aga on toetatud DVD, MPEG1, MPEG2, MPEG4 ja DivX:

mplayer -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=1 failinimi
mplayer -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=1 dvd://

lowres=1 tähendab seda et renderdatava video resolutsiooni vähendatakse 4x (vertikaalselt 2x ning horisontaalselt 2x), paraku renderdamata pikslite tõttu muutub video uduseks aeglaste kaadrite juures.

Paljude videode puhul peaksid toimima ka järnevad võtmed, mis põhjustavad nähtuse, kus iga teine vertikaalne pikslijada jäetakse vahele (tegu on õigupoolest odavate deinterlaceritega). See toimib tõenäoliselt korrektselt ainult videoväljundiga XV, kuna X11 puhul on iga kaader vertikaalselt kaks korda väiksem ning tarkvaralise skaleerijaga suurendades pole üritusel mõtet.

mplayer -vop field failinimi
mplayer -vop halfpack failinimi

Koodekite võrdlus

Videokoodekid

Ausaltöeldes on üsna raske hinnata video koodekite kvaliteeti palja silmaga, mplayeri vaikimisi parameetritega (tõenäoliselt ka kõige optimaalsemad) oleks video kvaliteedi/bitrate kasvamise järjekord umbestäpselt selline: MPEG-2 < MPEG-4 < XviD < x264 Tähele võiks panna seda et Xvid, DivX, x264 on sisuliselt MPEG-4 edasiarendused/laiendused.

Helikoodekid

Helikoodekeid saab kõrva järgi juba üsna hästi hinnata, keskmisele kasutajale on enamvähem sobivad sellised: 128k MP3 = 64k OGG Vorbis = 48k AAC Terasema kõrvaga tegelasele peaks piisama: 192k MP3 = 128k OGG Vorbis = 64k AAC Võrdus tähendabki seda et nendel bitreitidel on kvaliteet enam-vähem sama, seega kui tarkvara pole probleemiks (kuulajal/vaatajal), võiks kasutada OGG Vorbist (täiesti Vaba koodek) või AAC (pool-vaba)

Näited

Salvestame pakkimata analoog-TV audio-videovoo kõvakettale

  • Vaatame telekat (tv://)
  • -tv - TV liidese parameetrid:
    • driver=v4l2 - Kasutame Video4Linux 2 draiverit (v4l2), default on ikka veel vist vana v4l, mis on juba tuumadest välja juuritud.
    • width=320 ja height=240 - Kasutame capture resolutsiooni 320x240
    • freq=527.75 - Kasutame 527.75MHz sagedust (TV3 Eestis + interferentsinähtused ja muu jama)
    • alsa - Kasutame TV heli jaoks TV-kaardi ALSA sisendit (heli PCI kaudu, mitte TV-kaart -> helikaart juhtmega), selleks on vaja näiteks Philips SAA7134 kiibistikuga TV-kaartide puhul laadida moodul saa7134-alsa
      • adevice=/dev/dsp1 - Millist kaarti kasutada, sellel hetkel näiteks helikaardi jaoks vastas /dev/dsp ning telekakaardi jaoks /dev/dsp1. /dev/dsp ja /dev/dsp1 on OSS helisüsteemi device node'd ning kui on laetud snd-pcm-oss ning snd-mixer-oss moodulid, toimib eelnimetet skeem, kuna ALSA emuleerib OSS seadmeid. Kui on kasutada ainult ALSA helisüsteem, ilma OSS emulatsioonita, vastaks helikaardile hw0.0 ning telekakaardi audiole hw1.0. mplayeri parameeter oleks olnud sedapuhku: adevice=hw1;0.
      • immediatemode=1 - 1 puhul eeldatakse et heli läheb telekakaardist otse õigesse kohta, 0 puhul püütakse heli kätte saada eelnimetet /dev/dsp1 kaudu
      • audiorate=32000 - 32000 tundub olevat enimkasutatav sämplimissagedus telekakaartidel
      • amode=1 - Sõltuvalt telekakaardist, saa7135 kiviga: 0-mono, 1-stereo
  • -o - Salvestame kogu krempli sellesse faili
  • -ovc, -oac - copy tähendab et ei kodeerita midagi, salvestatakse pakkimata heli+video, 320x240 resolutsioonil tuleb umbkaudu 10G tunni kohta
mencoder tv:// \
-tv driver=v4l2:width=320:height=240:freq=527.75:alsa:adevice=/dev/dsp1:immediatemode=0:audiorate=32000:amode=1 \
-o v2ljundfail.avi -ovc copy -oac copy

Reaalajas TV audio-video pakkimine

Kuna pakkimata video on tohutu kettaruumi pillamine siis oleks otstarbekas kasutada mingisugustki pakkimismeetodit. Kõige tavalisem on audio-videovoo pakkimine raalajas, sellisel juhul saab kvaliteet kannatada, kui pole piisavalt protsessorijõudlust, et kogu töö käigupealt ära teha. Järgnevas näites kasutame MPEG-4 koodekit kiirete parameetritega:

  • -ovc lavc - Kasutame libavcodec teeki
  • -lavcopts - libavcodec teegi parameetrid:
    • vcodec=mpeg4 - Kasutame MPEG-4 koodekit
    • mbd=2, trell ja v4mv - ei tea mida need täpselt teevad, kuid piisavalt kiired parameetrid et reaalajas pakkida. Täpsem info leidub siin, 14.3.4. Encoding setting examples paragrahvi all.
    • threads=4 - Mencoder kasutab nelja threadi (sisuliselt protsessi) pakkimisel, mis tähendab seda et lõigatakse kasu mitme-tuumalistest protsessoritest, kuna iga thread jookseb omaette protsessori peal. Ilma thread parameetrita kasutatakse ainult ühte tuuma.
  • -oac mp3lame - Pakime heli LAME pakkijaga MP3 formaati (kuna -lameopts parameetrit ei kasuta, siis kasutab default parameetreid pakkimisel)
  • -o temp.avi - Salvestame kogu krempli sellesse faili
  • -vf - Video filtrite parameetrid:
    • crop=695:530:10:15 - Sisse loetavast videovoost lõigatakse ära mustad ääred. -tv parameeter defineerib capture resolutsiooni 720x576, eelnev crop filter lõikab sellest välja 695x530 piksli suuruse ala 10pikslit paremalpool ja 15pikslit allpool.
    • pp=lb - Kasutatakse bilineaarset deinterlacerit
    • scale=640:480 - Eelnevate filtritega töödeldud videovoog skaleeritakse resolutsioonile 640x480. Vajalik kuna mõnedel koodekitel on probleeme ebastandartsete resolutsioonidega, sealhulgas ka libavcodec'i MPEG-4 koodekil.
mencoder -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:v4mv:threads=4 \
-oac mp3lame \
-o temp.avi \
-vf crop=695:530:10:15,pp=lb,scale=640:480 \
tv:// \
-tv driver=v4l2:width=720:height=578:alsa:adevice=hw.1,0:immediatemode=0:audiorate=32000:freq=527.85

AMD X2 3600+ (2x2GHz) protsessoril võttis 4-threadiline pakkimine umbkaudu 50% mõlema tuuma ressurssidest. Andmete tihedus tuli umbkaudu 400MB/tund

Realmedia või muu helifaili/helivoo kodeerimine ümber MP3-ks

mplayer -ao pcm:file=temp.wav:fast sisend.rm
lame temp.wav v2ljund.mp3

Kasutame LAME pakkijat kuna mplayer ei ole mõeldud helifailide kodeerimiseks, õigupoolest on mplayer mõeldud ainult video vaatamiseks, küll aga saab ta ka paljude muude asjadega hakkama.

DVD rippimine

mencoder dvd:// -ovc lavc -oac lavc -lavcopts vcodec=mpeg4:acodec=aac -o dvdrip.avi

See käsk vajab veel uurimist, praegu pole võimalust katsetada

Kaheks jaotatud DVDripi kokkukleepimine

mencoder -ovc copy -oac copy -o v2ljund.avi cd1of2.avi cd2of2.avi

Mustade ribade eemaldamine

  •  ???