Spis treści
0. How to read this documentation
If you are a first-time installer: be sure to read everything from here to the end of the Installation section, and follow the links you will find. If you have any other questions, return to the TOC (Table of Contents) and search for the topic, read the FAQ, or try grepping though the files.
The main rule of this documentation: if it's not documented, it does not exist. If I don't say you encode audio from TV tuner, you can't. A healthy quantity of combining ability is welcomed, though. Good luck. You'll need it :)
MPlayer jest odgrywarką filmów pod LINUXem (działa pod wieloma innymi Unixami, i systemami opartymi na innych procesorach niż x86, zobacz sekcja 6). Wyświetla większość plików MPEG, VOB, AVI, VIVO, ASF/WMV, QT/MOV oraz FLI, korzystając z wielu własnych, XAnim oraz Win32 DLL kodeków. Możesz również oglądać VideoCD, SVCD, DVD, 3ivx, a nawet filmy DivX (i nie potrzebujesz wcale biblioteki avifile. Kolejną dużą zaletą mplayera jest szeroki wachlarz sterowników wyjścia. Mplayer działa z X11, Xv, DGA, OpenGL, SVGAlib, fbdev, AAlib, DirectFB, ale możesz też korzystać z GGI i SDL ( i w ten sposób z wielu sterowników dostarczanych przez SDL) oraz z niskopoziomowych sterowników specyficznych dla danej karty (dla Matrox, 3Dfx i Radeon) także! Większość dostępnych sterowników wspiera sklaowanie programowe i sprzętowe, możesz więc cieszyć się oglądaniem filmów w trybie pełnoekranowym. MPlayer wspiera wyświetlanie poprzez pewne sprzętowe karty dekodujące MPEG , takie jak DVB i DXR3/Hollywood+ ! A co powiesz na ładne, duże, antyaliasowane podtytuły z cieniem (wspieranych jest 9 typów!!!) z europejskim ISO 8859-1,2 (węgierskimi, angielskimi, czeskimi itd.), cyrylicą, koreańskimi fontami oraz OSD?
MPlayer jest oparty na GPL, ale zawiera pewien kod nie-GPL, którego nie wolno rozpowszechniać w formie binarnej, a także zawiera bibliotekę OpenDivX, która jest na specjalnej licencji. Wciaż jednak rozwijamy się w kierunku GPL.
Rozprowadzanie MPlayera w formie binarnej i/lub w pakietach binarnych jest aktualnie niemożliwe zarówno ze względów technicznych jak i prawnych. Szczegółową informację na ten temat można znaleźć w drugiej części tego pliku i jest zalecane przeczytanie go.
Nie napisałem żadnych kodeków, tylko kilka odgrywarek. Spędziłem wiele czasu poszukując najlepszego sposobu, aby rozkodować złe, uszkodzone pliki wejściowe (zarówno MPEG jak i AVI), oraz by zrobić perfekcyjną synchronizację A-V w poszukiwanych możliwościach. Moja odgrywarka jest wybitnie dobra w odgrywaniu uszkodzonych plików MPEG (co jest użyteczne w pewnych VCD), a także odgrywa złe pliki AVI, których nie potrafi odtworzyć słynny windows media player. Nawet pliki AVI bez indeksowania są odgrywane i możesz dodatkowo przebudować ich indeksowanie za pomocą opcji -idx, co umożlliwia wyszukiwanie. Jak widzisz, stabilność i jakość, to dla mnie najważniejsze rzeczy, ale również prędkość jest zadziwiająca.
Wszystko zaczęło się rok temu... Próbowałem wielu odgrywarek pod linuxa (mtv,xmps,dvdview,livid/oms,VideoLAN, xine,xanim,avifile,xmmp) ale wszystkie miały jakieś wady. Głównie z odtwarzaniem szczególnych plików oraz z synchronizacją obrazu i dźwięku. Większość z nich nie potrafi odgrywać plików w obu formatach MPEG1/2 i AVI (DivX). Wiele z nich miało również problemy z jakością obrazu oraz prędkością. Postanowiłem więc napisać nowy lub zmodyfikować jeden z tych programów...
W tym rozdziale spróbuję przeprowadzić cię przez proces kompilacji i konfiguracji MPlayera. To nie jest proste, ale też niekoniecznie musi być trudne. Jeśli zaobserwujesz inne zachowanie, niż to, które opiszę, proszę, przeszukaj tą dokumentację, a znajdziesz wyjaśnienie. Kiedy zobaczysz linki, przeczytaj uważnie dokumenty, które one wskazują. Zajmie ci to trochę czasu, ale warto to zrobić.
Potrzebna ci będzie dość nowa wersja systemu. W Linuksie wymagane są jądra 2.4.x, ale z 2.4.10 i wyższymi czasami możesz napotkać problemy ( licencja, błędy jądra, itp.) więc są one odradzane.
WYMAGANIA SPRZĘTOWE
KODEKI
KARTY GRAFICZNE
Generelnie istnieją dwa rodzaje kart graficznych. Karty posiadające obsługę sprzętowej akceleracji YUV (nowsze) oraz pozostałe karty, nie posiadające tego.
KARTY YUV
Potrafią one wyświetlać i skalować (zoom) obrazki do dowolnego rozmiaru, jaki mieści się w ich pamięci, z małym zużyciem CPU (zooming nie zwieksza go!), dzięki czemu masz bardzo szybkie pełnoekranowe odtwarzanie.
Karty bez YUV
Pełnoekranowe odgrywanie może być osiągnięte albo przez (sprzętowy,
zbyt wolny) zooming, albo przez zmianę na mniejszy trybu video (videomode), np.
na 352x288. Jeśli nie masz akceleracji YUV, ta druga metoda jest
rekomendowana. Za pomocą MPlayera, to zachowanie może być włączone za
pomocą opcji -vm
z następującymi sterownikami:
KARTY DŻWIĘKOWE
WŁAŚCIWOŚCI
usleep()
, aby dostroić A/V sync, z
dokładnością +/- 10ms. Jakkolwiek, czasami synchronizacja musi być dostrojona
nawet lepiej. Nowy kod timera w tym celu RTC (Real Time Clock) komputera,
ponieważ ma on precyzyjność taką, jak timers 1ms. Wymaga to uprawnień roota
(ew. setuid root) dla binariów MPlayera (lub drobnych zmian w
jądrze, ale to jest odradzane). Możesz zobaczyć wydajność nowego timera w
status line. Trzeci kod timera jest włączany za pomocą opcji
-softsleep
. Ma on wydajność RTC, ale nie wymaga uprawnień roota.
Z innej strony, zużywa on więcej CPU. Uwaga: NIGDY nie instaluj binariów
MPlayera jako setuid w systemie wielu użytkowników! To prosta droga dla
każdego, by zdobyć uprawnienia roota.Następnie zbuduj MPlayera:
./configure make make install
Na tym etapie MPlayer jest gotowy do używania. Katalog
/usr/local/share/mplayer
zawiera plik codecs.conf
,
który jest używany, aby poinformować program o wszystkich kodekach i ich
możliwościach. Ten plik powinien być zawsze uaktualniany wraz z biblioteką
main!
Użytkownicy Debiana mogą samodzielnie budować pakiety .deb, to bardzo
proste. Po prostu wywołaj fakeroot debian/rules binary
w głównym
katalogu MPlayera. Szczegółowe instrukcje można znaleźć tu.
ZAWSZE przeglądaj komunikaty z ./configure oraz zawartość
pliku configure.log
, możesz tam znaleźć informacje o tym, co
zostanie zbudowane, a co nie. Możesz również przejrzeć pliki config.h i
config.mak.
Choć to nie jest niezbędne, fonty powinny być zainstalowane, aby można było osiągnąć funkcjonalność OSD i napisy. Ściągnij mp-arial-iso-8859-*.zip i/lub opcjonalnie (jeśli istnieją) uaktualnienia językowe. BARDZO ZALECANE jest sprawdzenie szczegółów w sekcji 1.5.
mkdir ~/.mplayer/font cd ~/.mplayer/font unzip mp-arial-iso-8859-1.zip
GUI wymaga GTK (nie jest ono napisane w GTK, ale panele są). Skórki są przechowywane
w formacie PNGt, więc gtk i libpng (oraz ich części devel) muszą być zainstalowane.
Możesz zbudować GUI specyfikując --enable-gui
podczas ./configure .
Jest kilka sposobów na włączenie trybu GUI:
-gui
gui=yes
w pliku konfiguracyjnymln -s /usr/local/bin/mplayer /usr/local/bin/gmplayer
i używaj gmplayer
.
WSKAZÓWKA: użyj środkowego przycisku myszki (w 2 przyciskowych myszkach wciśnij prawy i lewy przycisk jednocześnie), aby wywołać menu GTK, z opcją odgrywania DVD!
Ponieważ MPlayer nie zawiera skórek, musisz ściągnąć je, jeżeli
chcesz uzywać GUI. Zobacz
stronę download.
Skórki powinny być rozpakowane do typowego ogólnodostępnego katalogu
systemowego (/usr/local/share/mplayer/Skin
), lub do
$HOME/.mplayer/Skin
. MPlayer domyślnie szuka w tych
katalogach katalogu o nazwie default, ale możesz za pomocą opcji
-skin newskin, bądź dyrektywy skin=newskin w pliku
konfiguracyjnym wskazać użycie skórki z katalogu
*/Skin/newskin
.
Tak, MPlayer obsługuje wiele typów napisów. Obecnie 8 rodzajów napisów może być używanych przez kod subreadera. Informacje o formatach napisów znajdziesz w pliku subreader.c, w okolicach linii 30.
O napisach DVD przeczytać możesz w sekcji DVD.
MPlayer wprowadza nowy format napisów zwany MPsub. Został on zaprojektowany przeze mnie (Gabucino). Oznacza to przede wszystkim tyle, że jego podstawową cechą jest dynamiczniy tryb time-based (chociaż posiada on również tryb frame-based). Przykład (z DOCS/tech/mpsub.sub):
# pierwsza liczba : czekaj tyle sekund po zniknięciu porzedniego napisu
# druga liczba : wyświetlaj aktualny napis przez tyle sekund
15 3
A long, long time ago...
0 3
in a galaxy far away...
0 3
Naboo was under an attack.
A więc widzisz, że głównym celem było uczynienie napisów łatwymi w
edycji/taktowaniu/łaczeniu/obcinaniu. I jeżeli, powiedzmy, dostaniesz do swojej wersji filmu napisy SSA, ale źle taktowane/opóźnione, wywołaj po prostu:
mplayer dummy.avi -sub source.ssa -dumpmpsub . Plik
dump.mpsub
będzie stworzony w aktualnym katalogu i będzie zawierał
źródłowy text napisów, ale w formacie MPsub. Wówczas możesz już w
dowolny sposób dodawać/usuwać sekundy do/z napisu.
Napisy są wyświetlane w technice nazywanej 'OSD', On Screen Display. OSD jest stosowane do wyświetlania aktualnego czasu, paska głośności, paska przeszukiwania itp.
INSTALACJA OSD i SUB
Potrzebny ci będzie pakiet z fontami MPlayera, aby móc korzystać z właściwości OSD/SUB. Jest wiele sposobów, aby je zdobyć:
Potem rozpakuj pliki do ~/.mplayer/font/ . Teraz powinieneś zobaczyć zegar w lewym górnym rogu ekranu (wyłączysz to za pomocą klawisza 'o').
OSD ma 3 stany: (przełączane za pomocą 'o')
Możesz zmienić domyślne zachowanie, ustawiając zmienną osdlevel=
w pliku konfiguracyjnym.
2.3. Video & Dźwiękowe urządzenia wyjściowe
2.4. MEncoder - wielozadaniowy koder
2.5.1. O zagadnieniu
To jest sekcja o tym, jak włączyć oglądanie/nagrywanie z użyciem tunera TV komatybilnego z V4L .
2.5.2. Kompilacja
./configure
automatycznie wykryje nagłówki jądra zwiazane z v4l oraz wejścia
/dev/video*. Jeśli one istnieją, obsługa TV będzie utworzona (zobacz komunikaty
configure!).Wskazówka: czy kolory są prawidłowe? Jeśli nie, to znaczy, że twój
tuner nie potrafi wyświetlać w modelu kolorów YV12. Spróbuj I420 (musisz użyć
także opcji -vc rawi420
!) lub w modelach YUY2, UYVY, RGB32 (tutaj
zastosuj opcję -vo sdl
). Możesz to wyspecyfikować za pomocą opcji
outfmt=YV12
, zobacz poniżej.
2.5.3. Dostępne opcje
on | użyj wejścia TV | ||
driver |
dummy - wejście TV jest NULL :) Używane tylko do testów, generuje
wejście dummy. v4l - zgrywa obrazki ze standardowego interfejsu V4L (domyślnie /dev/video0 ) |
||
device | określ inne niż domyślne /dev/video0 urządzenie |
||
input | podaj, z
jakiego wejścia tunera TV chcesz odbierać (np.television,
s-video, composite, ...) Dostępne wejścia są wypisywane przy inicjalizacji. |
||
freq | określ częstotliwość, aby ustawić tuner (np. 511.250) | ||
outfmt | w jakim
formacie wyjściowym tuner powinien przetransportować obrazy do nas
(rgb32, rgb24, yv12, uyvy, i420 (dla i420
musisz podać opcję -vc i420 , z powodu konfliktu fourcc)) |
||
width | szerokość w pikselach okna wyjściowego | ||
height | wysokość w pikselach okna wyjściowego | ||
norm | dostępne: PAL, SECAM, NTSC | ||
channel | ustaw tuner na podany kanał | ||
chanlist |
dostępne: us-bcast, us-cable, europe-west, europe-east, etc |
2.5.4. Sterowanie z klawiatury
h or l | przełącz poprzedni/następny kanał | ||
n | zmień normę | ||
b | change channel list | ||
2.5.5. Przykłady
Wyjście Dummy, dla AAlib :)
mplayer -tv on:driver=dummy:width=640:height=480 -vo aa
Wejście ze standardowego V4L
mplayer -tv on:driver=v4l:width=640:height=480:outfmt=i420 -vc rawi420 -vo xv
file | mplayer [options] [path/]filename | ||
VCD | mplayer [options] -vcd trackno /dev/cdrom | ||
DVD | mplayer [options] -dvd titleno [/dev/dvd] | ||
net | mplayer [options] http://site.com/file.[mpg|avi] | ||
mplayer -vo x11 /mnt/Films/Contact/contact2.mpg mplayer -vcd 2 /dev/cdrom mplayer -afm 3 /mnt/DVDtrailers/alien4.vob mplayer -dvd 1 /dev/dvd mplayer -abs 65536 -delay -0.4 -nobps ~/movies/test.avi
3.1. Sterowanie za pomocą kalwiatury
<- or -> | poszukiwanie wstecz/naprzód o 10 sekund | ||
up or down | poszukiwanie wstecz/naprzód o 1 minutę | ||
pgup/pgdown | poszukiwanie wstecz/naprzód o 10 minut | ||
< or > | poszukiwanie wstecz/naprzód po playliście | ||
p or SPACE | zatrzymanie filmu (wciśnij jakikolwiek przycisk) | ||
q or ESC | zakończenie odgrywania i wyjście z programu | ||
+ or - | dopasuj opóźnienie dźwięku o +/- 0.1 sekundy | ||
/ or * | zmniejsz/zwiększ głośność | ||
o | włącz/wyłącz OSD: nic /pasek poszukiwania / pasek poszukiwania + zegar | ||
m | włącz/wyłącz używanie dźwięku master/pcm | ||
z or x | dopasuj opóźnienie napisów o +/- 0.1 sekundy | ||
(następujące klawisze są ważne tylko wtedy, gdy używasz kodeka DirectShow DivX lub DivX4 z opcją -vc divx4) | |||
1 lub 2 | dostosuj kontrast | ||
3 lub 4 | dostosuj jasność | ||
5 lub 6 | dostosuj nasilenie | ||
7 lub 8 | dostosuj saturation | ||
(następujące klawisze są ważne tylko przy obsłudze wejścia TV) | |||
h lub l | wybierz poprzedni/następny kanał | ||
n | zmień normę | ||
b | change channel list |
Obsługa GUI z klawiatury
, and . | previous / next file | ||
gray - or + | decrease / increase volume | ||
enter | start playing | ||
space | pause | ||
s | stop | ||
a | about | ||
l | load file | ||
b | skin browser | ||
e | toggle equalizer | ||
p | toggle playlist | ||
f | toggle fullscreen | ||
m | toggle mute |
Sterowanie wejściem TV
h or l | select previous/next channel | ||
n | change norm | ||
b | change channel list |
3.2. Sterowanie za pomocą LIRC
Linux Infrared Remote Control - użyj łatwego w budowie, domowej roboty odbiornika IR, (prawie) dowolnego pilota i kontroluj za jego pomocą swoje linux box! Więcej na ten temat na www.lirc.org.
Jeśli zainstalowałeś pakiet lirc, możesz skompilować MPlayera z włączeniem obsługi LIRC stosując: ./configure --enable-lirc.
Jeżeli wszystko poszło dobrze, MPlayer wyśle na starcie komunikat, że inicjalizacja LIRC zakończyła się sukcesem. Zawiadomi cie także wtedy, gdy pojawią się błędy. Jeśli nie wspomni o LIRC w ogóle, oznacza to, że obsługa LIRC nie została wkompilowana. To tyle :-)
Aplikacja dla MPlayera nazywa się - nie zgadłbyś - mplayer_lirc. Rozumie ona następujące polecenia:
PAUSE | - zatrzymuje odgrywanie (pauza). Naciśnięcie dowolnego klawisza powoduje wznowienie odgrywania; | ||
QUIT | - wyjście z MPlayer; | ||
RWND | - 10 sek wstecz; | ||
FRWND | - 60 sek wstecz; | ||
FWD | - 10 secs naprzód; | ||
FFWD | - 60 sek naprzód; | ||
INCVOL | - zwiększenie głośności o 1%; | ||
DECVOL | - zmniejszenie głośności o 1%; | ||
MASTER | - użyj głównego kanału miksera; | ||
PCM | - użyj kanału pcm miksera; | ||
Nie zapomnij ustawić flagę powtarzania dla RWND/FWD w .lircrc. Oto fragment z mojego .lircrc:
begin remote = CU-SX070 prog = mplayer_lirc button = Tape_Play repeat = 1 config = FFWD end begin remote = CU-SX070 prog = mplayer_lirc button = Tape_Stop config = QUIT end
Jeśli nie odpowiada ci standardowa lokalizacja pliku lirc-config (~/.lircrc) użyj przełącznika -lircconf <nazwa_pliku>, aby podać inny plik.
3.3. Obsługa potoków z sieci, bądź jako pipe
MPlayer can play files from network, using the HTTP protocol. Configuring it is simple, just recompile MPlayer with
./configure --enable-streaming
MPlayer can NOT read ASF files from network by the MMS protocol, only by plain HTTP.
MPlayer can read from stdin (NOT named pipes). This can be for example used to play from FTP:
wget ftp://micorsops.com/something.avi -O - | mplayer -
To build the package, get the cvs version, or .tgz and uncompress it, and cd into programs directory:
cd main fakeroot debian/rules binary
(... mplayer detects hardware/software, builds itself and.. ) dpkg-deb: building package `mplayer' in `../mplayer_0.18-1_i386.deb'.
And now just become root, and:
dpkg -i ../mplayer_0.18-1_i386.deb as root.
Here's how it looks like:
eyck@incubus:/src/main$ sudo dpkg -i ../mplayer_0.18-1_i386.deb Password: (Reading database ... 26946 files and directories currently installed.) Preparing to replace mplayer 0.17a-1 (using ../mplayer_0.18-1_i386.deb) Unpacking replacement mplayer ... Setting up mplayer (0.18-1) ...
To build the package you will need GNU make (gmake, /usr/ports/devel/gmake), native BSD make will not work.
To run MPlayer you will need to re-compile the kernel with "options USER_LDT" (unless you are running -CURRENT, where this is default). If you have a CPU with SSE also use "options CPU_ENABLE_SSE" to use it (FreeBSD-STABLE required, or use kernel patches).
If MPlayer complains about "CD-ROM Device '/dev/cdrom' not found!" make a
symbolic link: ln -s /dev/(your_cdrom_device) /dev/cdrom
There's no DVD support for FreeBSD yet.
MPlayer should work on Solaris 2.6 or newer.
AVI file playback works best on Solaris x86, because you have the option to use the win32 codecs on the x86 platform, or can use MMX/MMX2/3DNow/etc instructions for MP3/DivX/DVD/whatever. On Solaris SPARC, you'll find quite a few AVI files with non working video and/or audio playback, because the video/audio codecs using the Win32 DLLs are not available. However, DivX/OpenDivX movies should work, when using libavcodec.
On UltraSPARCs, MPlayer takes advantage of their VIS extensions (equivalent to MMX), currently only in libmpeg2, libvo and libavcodec, but not in mp3lib. You can watch a VOB file on a 400Mhz CPU. You'll need mLib installed.
To build the package you will need GNU make (gmake, /opt/sfw/gmake), native Solaris make will not work. Typical error you get when building with solaris' make instead of GNU make:
% /usr/ccs/bin/make make: Fatal error in reader: Makefile, line 25: Unexpected end of line seen
On Solaris SPARC, you need the GNU C/C++ Compiler; it does not matter if GNU C/C++ compiler is configured with or without the GNU assembler.
On Solaris x86, you need the GNU assembler and the GNU C/C++
compiler, configured to use the GNU assembler! The mplayer code on
the x86 platform makes heavy use of MMX, SSE and 3DNOW!
instructions that cannot be compiled using Sun's assembler
/usr/ccs/bin/as
.
The configure script tries to find out, which assembler program is used by your "gcc" command (in case the autodetection fails, use the "--as=/whereever/you/have/installed/gnu-as" option to tell the configure script where it can find GNU "as" on your system).
Error message from configure on a Solaris x86 system using GCC without GNU assembler:
% configure ... Checking assembler (/usr/ccs/bin/as) ... , failed Please upgrade(downgrade) binutils to 2.10.1...
(Solution: Install and use a gcc configured with "--with-as=gas")
Typical error you get when building with a GNU C compiler that does not use GNU as:
% gmake ... gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math -fomit-frame-pointer -I/usr/local/include -o mplayer.o mplayer.c Assembler: mplayer.c "(stdin)", line 3567 : Illegal mnemonic "(stdin)", line 3567 : Syntax error ... more "Illegal mnemonic" and "Syntax error" errors ...
For DVD support you must have the patched libcss installed. Patch: http://www.tools.de/solaris/mplayer/.
Due to two bugs in solaris 8 x86, you cannot reliably play DVDs using a capacity >4GB:
On Solaris with an UltraSPARC CPU, you can get some extra speed by using the CPU's VIS instructions for certain time consuming operations. VIS acceleration can be used in MPlayer by calling functions in Sun's mediaLib.
VIS accelerated operations from mediaLib are used for mpeg2 video decoding and for color space conversion in the video output drivers.
MPlayer is reported to compile on StrongARM. Use the following command line:
./configure --target=arm-linux --disable-css --with-x11libdir=/usr/arm/lib --with-x11incdir=/usr/arm/lib --disable-gcc-checking
6.5. Silicon Graphics Indigo / IRIX
Reported working. You'll probably have to use the sgi ao driver. Anyone has closer info?
Works. Only has -vo x11
output which is even much slower
than on Linux, since QNX has only X emulation which is VERY slow.
No closer info yet.
NOTE: Do *NOT* send bugreports, help & feature requests directly to the authors!
Read Appendix C and subscribe to mplayer-users mailing lists.
The MPlayer project:
Main testers:
The codecs, libs:
Their code is not used in current player version, but I've got some ideas or other technical help from:
Appendix A/2 - maintainerzy kodu i dokumentacji MPlayera
Homepage
English documentation
Tłumaczenia dokumentacji
Platformy sprzętowe/porty
Kod MPlayera:
sterowniki libvo:
sterowniki libao2:
NARZĘDZIA:
Pozostałe:
There are some public mailing lists on MPlayer. Subscribing can be achieved on the following addresses:
This list is about mplayer development! Talking about interface/API changes, new libraryes, code optimization, ./configure changes, and send patches here. Do NOT send bugreports, user questions, feature requests here! This list should be kept low-traffic.
Send matrox-related questions here
Things related to the hardware decoder card called DVB.
Send only questions about CVS changes here. (if you don't understand why a change is required or you've better fix) Be sure in that your target developer reads this list!
NOTE: language of above lists are ENGLISH, unless explicitly stated otherwise. Please do not send messages using other language!
NOTE: you can reach the searchable mailing list archives here.
Appendix C - How to report bugs
Special system/cpu-specific bugs/problems:
Various A-V sync and other audio problems:
General audio delay or jerky sound (exists with all or many files):Video-out problems:
First note: options -fs -vm and -zoom are just recommendations, not (yet) supported by all drivers. So it isn't a bug if it doesn't work. Only a few driver supports scaling/zooming, don't expect this from x11 or dga.
OSD/sub flickering:
- x11 driver: sorry, it can't be fixed now
- xv driver: use -double option