Copyright © 2000-2022 Załoga MPlayera
License
MPlayer is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
MPlayer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with MPlayer; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
libcaca
- Color ASCII Art library (biblioteka kolorowego ASCII-Art)libavcodec
codec familyXvid
codecx264
codecVideo For Windows
codec family
Przy pierwszej instalacji powinieneś przeczytać wszystko od tego miejsca do końca rozdziału Instalacja, łącznie z tekstami, do których są tam odnośniki. Jeśli masz jeszcze jakieś pytania, wróć do Spisu treści i w nim poszukaj odpowiedniego tematu, przeczytaj FAQ albo spróbuj przegrepować zbiory. Odpowiedź na większość pytań powinna być zawarta w niniejszej dokumentacji, a pozostałe prawdopodobnie zostały już zadane na naszych listach dyskusyjnych.
MPlayer jest odtwarzaczem filmów dla Linuksa (działa też na wielu innych Uniksach i na procesorach nie-x86, patrz porty). Odtwarza większość zbiorów w formatach MPEG, VOB, AVI, OGG/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4, FLI, RM, NuppelVideo, yuv4mpeg, FILM, RoQ, PVA, zbiory Matroska, obsługiwanych przez wiele rdzennych kodeków, XAnim, RealPlayer i Win32 DLL. Możesz w nim także oglądać filmy VideoCD, SVCD, DVD, 3ivx, RealMedia, Sorenson, Theora i MPEG-4 (DivX) Inną wielką zaletą MPlayera jest szeroki zakres obsługiwanych sterowników wyjściowych. Działa on z X11, Xv, DGA, OpenGL, SVGAlib, fbdev, AAlib, libcaca, DirectFB, ale możesz też używać GGI i SDL (i dzięki temu wszystkich ich sterowników) i niektórych specyficznych dla kart graficznych sterowników niskiego poziomu (dla Matroxa, 3Dfxa, Radeona, Mach64, Permedia3)! Większość z nich obsługuje skalowanie sprzętowe lub programowe, więc filmy można oglądać na pełnym ekranie. MPlayer obsługuje wyświetlanie przy użyciu niektórych sprzętowych dekoderów MPEG, takich jak DVB i DXR3/Hollywood+. Nie można też zapomnieć o ładnych, dużych, antyaliasowanych i cieniowanych napisach (14 obsługiwanych typów) z czcionkami europejskimi/ISO 8859-1,2 (polskimi, węgierskimi, angielskimi, czeskimi, itp.), cyrylicą, koreańskimi i wyświetlaniem na ekranie (OSD)!
MPlayer jest doskonały do odczytywania uszkodzonych plików MPEG (przydatne przy niektórych VCD), odtwarza również błędne pliki AVI, których nie można odczytać za pomocą wiodącego odtwarzacza multimedialnego pod Windows. Nawet zbiory AVI bez bloku indeksowego można odtworzyć i można zrekonstruować ich indeks tymczasowo, używając opcji -idx, albo trwale dzięki MEncoderowi, w ten sposób umożliwiając sobie przewijanie! Jak widać najważniejsza jest tu stabilność i jakość, ale szybkość również jest zadziwiająca. Ma też potężny system wtyczek do manipulacji obrazem i dźwiękiem.
MEncoder (Enkoder filmów
MPlayera) jest to prosty enkoder filmów,
zaprojektowany do kodowania odczytywalnych przez
MPlayera filmów
(AVI/ASF/OGG/DVD/VCD/VOB/MPG/MOV/VIV/FLI/RM/NUV/NET/PVA)
na inne odczytywalne formaty (patrz niżej). Może kodować rozmaitymi kodekami
video, takimi jak MPEG-4 (DivX4)
(jedno- lub dwuprzebiegowy), libavcodec
oraz audio PCM/MP3/VBR MP3.
Możliwości MEncodera
Kodowanie z szerokiego zakresu formatów i dekoderów MPlayer
Kodowanie na wszystkie kodeki
libavcodec
z ffmpeg.
Kodowanie obrazu z tunerów kompatybilnych z V4L
Kodowanie/multipleksowanie przeplatanych zbiorów AVI z prawidłowymi indeksami
Tworzenie zbiorów z zewnętrznego strumienia audio
Kodowanie 1, 2 lub 3-przebiegowe
Dźwięk MP3 VBR
Dźwięk MP3 VBR w odtwarzaczach pod Windows nie zawsze brzmi przyjemnie!
Dźwięk PCM
Kopiowanie strumieniowe
Synchronizacja wejścia A/V (oparta na PTS, może być wyłączona opcją -mc 0)
Korekta fps opcją -ofps (przydatne gdy kodujesz 30000/1001 fps VOB na 24000/1001 fps AVI)
Możliwość zastosowania naszego potężnego systemu filtrów (kadrowanie, powiększanie, obracanie, postproces, skalowanie, konwersja rgb/yuv)
Możliwość wkodowania DVD/VOBsub ORAZ napisów w zbiór wyjściowy
Możliwość zapisu napisów DVD do formatu VOBsub
Planowane możliwości
Zwiększenie zakresu dostępnych formatów/kodeków do (de)kodowania (tworzenie zbiorów VOB ze strumieniami DivX4/Indeo5/VIVO :).
MPlayer i MEncoder mogą być rozprowadzane zgodnie z warunkami GNU General Public License Version 2.
Przewodnik szybkiej instalacji znajdziesz w pliku README. Proszę, najpierw go przeczytaj, a później wróć do tego dokumentu po mrożące krew w żyłach szczegóły.
W tym rozdziale zostaniesz przeprowadzony przez proces kompilacji i konfiguracji MPlayera. Nie będzie to łatwe, ale niekoniecznie też musi być trudne. Jeżeli zauważysz zachowanie inne niż tutaj opisane, proszę poszukaj w dokumentacji, a na pewno znajdziesz odpowiedzi.
binutils - zalecana jest wersja 2.11.x.
gcc - zalecanymi wersjami są 2.95 i 3.4+. Wiadomo, że 2.96 i 3.0.x generują wadliwy kod, 3.1 i 3.2 również miały problemy, 3.3 niewielkie. Na PowerPC używaj 4.x+.
XFree86 - sugerowaną wersją jest 4.3 lub nowsza. Upewnij się, że są zainstalowane również pakiety rozwojowe, w przeciwnym wypadku nie zadziała. X'y nie są absolutnie niezbędne, niektóre sterowniki wyjścia video działają bez nich.
make - sugerowaną wersją jest 3.79.x lub nowsza. Żeby zbudować dokumentację XML potrzebujesz przynajmniej 3.80.
FreeType - opcjonalna, wymagana by mieć czcionkę do OSD i napisów. Wymagana jest przynajmniej wersja 2.0.9.
libjpeg - opcjonalny koder/dekoder JPEG, wymagany przez wyjście video JPEG i do dekodowania filmów MJPEG
libpng - domyślny i zalecany koder/dekoder (M)PNG, wymagany przez GUI i wyjście video PNG
lame - zalecana jest wersja 3.90 lub późniejsza, wymagana do zakodowania dźwięku MP3 przez MEncodera.
zlib - zalecana, wymagana dla skompresowanych nagłówków MOV i obsługi PNG.
LIVE555 Streaming Media - opcjonalna, wymagana do odtwarzania niektórych strumieni RTSP/RTP.
directfb - opcjonalna, używaj 0.9.13 lub nowszej.
cdparanoia - opcjonalna, do obsługi CDDA.
libxmms - opcjonalna, do obsługi wtyczek wejściowych XMMS. Wymagana jest przynajmniej wersja 1.2.7.
libsmb - opcjonalna, do obsługi sieci przez smb.
ALSA - opcjonalna, do obsługi wyjścia dźwięku przez ALSA. Wymagana jest przynajmniej wersja 0.9.0rc4.
Zdecyduj czy potrzebujesz GUI. Jeśli tak, przeczytaj rozdział GUI przed kompilacją.
Jeżeli chcesz zainstalować MEncodera (naszego wspaniałego enkodera do wszelkich celów), przeczytaj sekcję MEncoder.
Jeżeli masz tuner TV kompatybilny z V4L i chcesz oglądać/przechwytywać i kodować filmy przy pomocy MPlayera, przeczytaj rozdział wejście TV.
Jeżeli masz tuner radiowy kompatybilny z V4L i chcesz słuchać i zapisywać dźwięk przy pomocy MPlayera, przeczytaj rozdział radio.
Dostępne jest miłe, gotowe do użycia Menu OSD. Przeczytaj rozdział menu OSD.
Potem skompiluj MPlayera:
./configure make make install
W tym momencie MPlayer jest już gotowy do użycia. Katalog $PREFIX/share/mplayer zawiera plik codecs.conf, który informuje program o wszystkich, dostępnych kodekach i ich możliwościach. Plik ten potrzebny Ci będzie tylko wtedy, jeżeli będziesz chciał zmodyfikować jego ustawienia, jako że plik wykonywalny zawiera go już w sobie. Sprawdź czy masz codecs.conf ze starych wersji MPlayera w swoim katalogu domowym (~/.mplayer/codecs.conf) i usuń go.
Zauważ, że jeżeli masz codecs.conf w ~/.mplayer/, wbudowany i systemowy codecs.conf będą całkowicie zignorowane. Nie rób tak, chyba że chcesz pobawić się z ustawieniami wewnętrznymi MPlayera, ponieważ może to spowodować wiele problemów. Jeżeli chcesz zmienić kolejność szukania kodeków, skorzystaj z opcji -vc, -ac, -vfm lub -afm w wierszu poleceń, lub w Twoim pliku konfiguracyjnym (sprawdź stronę man).
Użytkownicy Debiana mogą sobie zbudować paczkę .deb, jest to bardzo proste. Wykonaj
fakeroot debian/rules binary
w głównym katalogu MPlayera. Przeczytaj rozdział paczki Debiana, aby uzyskać więcej informacji.
Zawsze przejrzyj wyniki ./configure i plik config.log, zawierają one informacje o tym, co będzie zbudowane, a co nie. Możesz również obejrzeć pliki config.h i config.mak. Jeżeli masz zainstalowane jakieś biblioteki, ale nie są one wykrywane przez ./configure, sprawdź czy masz również odpowiednie pliki nagłówkowe (przeważnie pakiety -dev) i ich wersje się zgadzają. Plik config.log zazwyczaj powie Ci, czego brakuje.
Chociaż nie jest to konieczne, czcionki powinny być zainstalowane, żebyś mógł korzystać z OSD i napisów. Zalecana jest instalacja czcionki TTF i ustawienie MPlayera tak, żeby z niej korzystał. Przeczytaj rozdział Napisy i OSD dla uzyskania bardziej szczegółowych informacji.
GUI wymaga biblioteki GTK 1.2.x lub GTK 2.0 (nie jest w pełni w GTK, ale jego
panele są). Skórki przechowywane są w formacie PNG, tak więc musi być
zainstalowane GTK, libpng
(i ich pakiety rozwojowe, zazwyczaj nazwane
gtk-dev
i
libpng-dev
).
Możesz go zbudować podając opcję --enable-gui skryptowi
./configure. Aby skorzystać z trybu GUI, musisz wywołać
polecenie gmplayer.
Jako że MPlayer nie zawiera żadnej skórki, musisz
je ściągnąć, jeżeli chcesz używać GUI. Sprawdź
stronę z zasobami do pobrania.
Skórki powinny być rozpakowane do katalogu dostępnego dla wszystkich
($PREFIX/share/mplayer/skins) lub do
$HOME/.mplayer/skins.
MPlayer sprawdza je w poszukiwaniu
folderu nazwanego default, ale
możesz użyć opcji -skin nowaskórka
lub wpisać do pliku konfiguracyjnego skin=nowaskórka
, aby
program korzystał ze skórki w katalogu
*/skins/nowaskórka.
Musisz powiedzieć MPlayerowi której czcionki ma używać, by móc cieszyć się OSD i napisami. Działa dowolna czcionka TrueType lub specjalne czcionki bitmapowe. Jednakże zalecane są czcionki TrueType, ponieważ wyglądają o wiele lepiej, mogą być prawidłowo przeskalowane do wielkości filmu i lepiej sobie radzą z różnymi sposobami kodowania.
Są dwa sposoby na skłonienie czcionek TrueType do działania. Pierwszy to podanie w wierszu poleceń pliku z czcionką TrueType przy pomocy opcji -font. Ta opcja jest też dobrym kandydatem do włożenie w plik konfiguracyjny (szczegóły na stronie man). Drugi to stworzenie dowiązania symbolicznego (symlink) o nazwie subfont.ttf wskazującego na wybraną czcionkę. Albo
ln -s /ścieżka/do/przykładowej_czcionki.ttf
~/.mplayer/subfont.ttf
dla każdego użytkownika osobno, albo ogólnosystemowe:
ln -s /ścieżka/do/przykładowej_czcionki.ttf
$PREFIX/share/mplayer/subfont.ttf
Jeśli MPlayer był skompilowany z obsługą
fontconfig
, te metody nie zadziałają,
zamiast tego -font oczekuje nazwy czcionki według
fontconfig
i domyślnie bierze
czcionkę sans-serif.
Przykład:
mplayer -font'Bitstream Vera Sans'
anime.mkv
Żeby zobaczyć jakie czcionki zna
fontconfig
, użyj
fc-list.
Jeśli z jakiegoś powodu chcesz lub musisz użyć czcionek bitmapowych, ściągnij zestaw z naszej strony domowej. Możesz wybierać spośród rozmaitych czcionek ISO oraz zestawów czcionek stworzonych przez użytkowników w rozmaitych kodowaniach.
Rozpakuj ściągnięty plik do katalogu ~/.mplayer lub $PREFIX/share/mplayer. Potem przemianuj lub stwórz dowiązanie symboliczne jednego z rozpakowanych katalogów na nazwę font, na przykład:
ln -s ~/.mplayer/arial-24
~/.mplayer/font
ln -s $PREFIX/share/mplayer/arial-24
$PREFIX/share/mplayer/font
Czcionki powinny mieć odpowiedni plik font.desc, który przypisuje pozycje czcionek unicode na właściwą stronę kodową napisów. Innym rozwiązaniem jest mieć napisy zakodowane w UTF-8 i używać opcji -utf8 albo nazwać plik z napisami tak samo jak film, ale z rozszerzeniem .utf i mieć go w tym samym katalogu co film.
MPlayer ma całkowicie definiowalny Interfejs Menu OSD.
Menu Ustawienia nie jest jeszcze ZAIMPLEMENTOWANE!
Instalacja
skompiluj MPlayera z opcją --enable-menu dla skryptu ./configure
upewnij się, że masz zainstalowaną czcionkę OSD
skopiuj plik etc/menu.conf do Twojego katalogu .mplayer
skopiuj plik etc/input.conf do Twojego katalogu .mplayer lub do ogólnosystemowego katalogu z konfiguracją MPlayera (domyślnie: /usr/local/etc/mplayer)
sprawdź i ewentualnie przerób plik input.conf, aby określić funkcje klawiszy (wszystko jest tam opisane).
uruchom MPlayera przykładową komendą:
mplayer -menu plik.avi
wciśnij dowolny klawisz, który wcześniej zdefiniowałeś
Xvid jest wolnym, kompatybilnym
z MPEG-4 ASP, kodekiem video z możliwościami kodowania dwuprzebiegowego
i pełną obsługą MPEG-4 ASP.
Zauważ, że Xvid nie jest konieczny do odtwarzania video zakodowanego przy
pomocy Xvid. Domyślnie używana jest biblioteka
libavcodec
, bo jest szybsza.
Instalacja Xvid
Jak większość otwartego oporgramowania dostępny jest w dwóch wersjach:
oficjalnych wydań
i wersji CVS.
Wersja CVS jest zazwyczaj wystarczająco stablina by jej używać, jako że
zazwyczaj ma poprawki do błędów występujących w wydaniach.
Tak należy nakłonić Xvid
CVS do
pracy z MEncoderem (będziesz potrzebował
przenajmniej autoconf 2.50,
automake i libtool):
cvs -z3 -d:pserver:[email protected]:/xvid login
cvs -z3 -d:pserver:[email protected]:/xvid co xvidcore
cd xvidcore/build/generic
./bootstrap.sh
./configure
Możesz potrzebować dodać jakieś opcje (przejrzyj wyjście polecenia ./configure --help)
make && make install
Przekompiluj MPlayera.
x264
is a library for creating H.264 video.
MPlayer sources are updated whenever
an x264
API change
occurs, so it is always suggested to use
MPlayer from Subversion.
If you have a GIT client installed, the latest x264 sources can be gotten with this command:
git clone git://git.videolan.org/x264.git
Then build and install in the standard way:
./configure && make && make install
Now rerun ./configure for
MPlayer to pick up
x264
support.
Kodeki mowy Adaptive Multi-Rate są używane w telefonii komórkowej trzeciej generacji (3G). Opis implementacji udostępniany jest przez The 3rd Generation Partnership Project (za darmo dla osób prywatnych).
Żeby uaktywnić obsługę kodeków, pobierz źródła kodeków AMR-NB i AMR-WB, umieść je w katalogu do którego rozpakowałeś źródła MPlayera i wpisz następujące komendy:
unzip 26104-610.zip unzip 26104-610_ANSI_C_source_code.zip mv c-code libavcodec/amr_float unzip 26204-600.zip unzip 26204-600_ANSI-C_source_code.zip mv c-code libavcodec/amrwb_float
Gdy już to zrobisz, kontynuuj budowanie MPlayera tak, jak zwykle.
Istnieją trzy metody synchronizacji w MPlayerze.
Żeby skorzystać ze starej metody, nie musisz
robić nic. Używa ona usleep()
, aby poprawnie
zsynchronizować A/V z dokładnością +/- 10ms. Czasami jednak synchronizacja
musi być jeszcze dokładniejsza.
Kod nowego zegara korzysta do tego celu
z RTC (RealTime Clock), ponieważ jest on dokładny co do 1ms.
Włącza się go opcją
-rtc, ale wymaga odpowiednio skonfigurowanego jądra.
Jeżeli korzystasz z jądra w wersji 2.4.19pre8 lub późniejszej, wystarczy, że
ustawisz maksymalną częstotliwość RTC dla zwykłego użytkownika przez
system plików /proc
.
Użyj jednego z następujących poleceń, aby pozwolić na korzystanie z RTC
zwykłym użytkownikom:
echo 1024 > /proc/sys/dev/rtc/max-user-freq
sysctl dev/rtc/max-user-freq=1024
Możesz uczynić tę zmianę trwałą dodając ten drugi wiersz do /etc/sysctl.conf.
Możesz zobaczyć wydajność nowego synchronizatora w wierszu stanu. Zarządzanie energią w BIOSach niektórych notebooków z procesorami w technologii speedstep nie współgra z RTC. Dźwięk i obraz mogą być niezsynchronizowane. Podłączenie zewnętrznego źródła energii przed włączeniem notebooka wydaje się pomagać. W niektórych zestawieniach sprzętowych (sprawdzone przy używaniu DVD bez obsługi DMA na płycie ALi1541) korzystanie z RTC wywołuje skokowe odtwarzanie. Zaleca się skorzystanie w tych przypadkach z trzeciej metody.
Trzeci kod zegara włączany jest opcją -softsleep. Ma dokładność RTC, ale z niego nie korzysta. Wymaga jednak większej mocy obliczeniowej procesora.
MPlayer używa skomplikowanego drzewa odtwarzania. Składa się ono z opcji globalnych podanych na początku, na przykład:
mplayer -vfm 5
i opcji podanych po nazwach plików, które stosują się jedynie do podanego pliku/URLa/czegokolwiek, na przykład:
mplayer -vfm 5film1.avi
film2.avi
-vfm 4
Możesz pogrupować nazwy plików/URLe za pomocą {
oraz
}
. Przydaje się to przy opcji -loop:
mplayer { 1.avi -loop 2 2.avi } -loop 3
Powyższe polecenie odtworzy pliki w kolejności: 1, 1, 2, 1, 1, 2, 1, 1, 2.
Odtwarzanie pliku:
mplayer [opcje
] [ścieżka
/]nazwa_pliku
Kolejny sposób na odtworzenie pliku:
mplayer [opcje
]file:///zakodowana-ścieżka-uri
Odtwarzanie większej ilości plików:
mplayer [opcje domyślne
] [ścieżka
/]plik1
[opcje dla pliku1
]plik2
[opcje dla pliku2
] ...
Odtwarzanie VCD:
mplayer [opcje
] vcd://numer_ścieżki
[-cdrom-device/dev/cdrom
]
Odtwarzanie DVD:
mplayer [opcje
] dvd://numer_tytułu
[-dvd-device/dev/dvd
]
Odtwarzanie z WWW:
mplayer [opcje
] http://strona.com/plik.asf
(można użyć również playlist)
Odtwarzanie z RTSP:
mplayer [opcje
] rtsp://serwer.przyklad.com/nazwa_strumienia
Przykłady:
mplayer -vo x11/mnt/Films/Contact/contact2.mpg
mplayer vcd://2
-cdrom-device/dev/hdc
mplayer -afm 3/mnt/DVDtrailers/alien4.vob
mplayer dvd://1
-dvd-device/dev/hdc
mplayer -abs 65536 -delay -0.4 -nobps~/movies/test.avi
MPlayer może wyświetlać napisy podczas odtwarzania filmu. Obecnie obsługiwane są następujące formaty:
VOBsub
OGM
CC (closed caption)
MicroDVD
SubRip
SubViewer
Sami
VPlayer
RT
SSA
PJS (Phoenix Japanimation Society)
MPsub
AQTitle
MPlayer może zrzucić wyżej wymienione formaty napisów (poza pierwszymi trzema) do następujących formatów, jeśli podasz odpowiednią opcję:
MPsub: -dumpmpsub
SubRip: -dumpsrtsub
MicroDVD: -dumpmicrodvdsub
JACOsub: -dumpjacosub
Sami: -dumpsami
MEncoder może zrzucić napisy DVD do formatu VOBsub.
Opcje wiersza poleceń różnią się nieco dla poszczególnych formatów:
Format VOBsub.
Napisy VOBsub składają się z dużego (kilkumegabajtowego) pliku .SUB
i opcjonalnych plików .IDX i/lub .IFO.
Jeżeli masz takie pliki, jak
przykład.sub
,
przykład.ifo
(opcjonalne),
przykład.idx
-
musisz przekazać MPlayerowi opcje
-vobsub przykład [-vobsubid id
]
(pełna ścieżka jest opcjonalna). Parametr -vobsubid jest, jak
-sid dla DVD - przy jego pomocy możesz wybierać pomiędzy ścieżkami napisów
(różne języki). Jeżeli opcja -vobsubid jest pominięta,
MPlayer spróbuje użyć języka podanego przez parametr
-slang i powróci do langidx
zawartego w pliku.IDX, żeby ustawić język napisów. Jeżeli to
zakończy się niepowodzeniem, napisy nie będą wyświetlane.
Inne formaty napisów.
Inne formaty składają się z pojedynczego pliku tekstowego zawierającego przedział
czasowy, rozmieszczenie i sam tekst. Sposób użycia: Jeżeli masz taki plik, jak
przykład.txt
,
musisz przekazać opcję -sub
przykład.txt
(pełna ścieżka jest opcjonalna).
Dopasowywanie czasu wyświetlania i położenia napisów:
sek
Opóźnia wyświetlanie napisów o sek
sekund.
Może być liczbą ujemną. Wartość jest dodawana do licznika czasu filmu.
ILOŚĆ
Określa ilość klatek na sekundę pliku z napisami (liczba rzeczywista).
0-100
Określa położenie napisów.
Jeżeli podczas używania napisów w formacie MicroDVD zauważysz rosnące opóźnienie między nimi a filmem, to prawdopodobnie ilość klatek na sekundę filmu różni się od wartości, do której zostały przystosowane napisy. Zauważ, że format ten korzysta z bezwzględnych numerów klatek do wyświetlania napisów w odpowiednim momencie, ale nie zawiera w sobie informacji o wartości fps, dlatego powinieneś skorzystać z opcji -subfps. Jeżeli chciałbyś trwale rozwiązać ten problem, musisz ręcznie zmienić wartość framerate pliku z napisami. MPlayer może zrobić to za ciebie:
mplayer -dumpmicrodvdsub -fpsfps_napisów
-subfpsfps_filmu
\ -subzbiór_z_napisami
atrapa.avi
O napisach DVD przeczytasz w rozdziale DVD.
MPlayer posiada w pełni konfigurowalną, opartą na komendach warstwę sterowania, która pozwala na sterowanie MPlayerem za pomocą klawiatury, myszki, joysticka lub zdalnego sterowania (za pomocą LIRC). Zajrzyj na stronę man w celu przejrzenia pełnej listy skrótów klawiszowych.
MPlayer pozwala Ci przypisać dowolny klawisz/przycisk
do dowolnego polecenia za pomocą prostego pliku konfiguracyjnego. Składnia tego
pliku to nazwa klawisza, po której znajduje się komenda. Domyślny plik
konfiguracyjny znajduje się w $HOME/.mplayer/input.conf, ale
można podać także inny za pomocą opcji
-input plik
(ścieżki względne są względem $HOME/.mplayer).
Możesz uzyskać pełną listę obsługiwanych klawiszy uruchamiając mplayer -input keylist i pełną listę dostępnych komend za pomocą mplayer -input cmdlist.
Przykład 3.1. Przykładowy plik konfiguracji sterowania
## ## Plik konfiguracji sterowania MPlayera ## RIGHT seek +10 LEFT seek -10 - audio_delay 0.100 + audio_delay -0.100 q quit > pt_step 1 < pt_step -1 ENTER pt_step 1 1
Linux Infrared Remote Control - użyj łatwego do własnoręcznego zbudowania odbiornika podczerwieni i (prawie) dowolnego pilota zdalnego sterowania i steruj nim swoim Linuksem! Więcej informacji na stronie domowej LIRC.
Jeśli zainstalowałeś pakiet LIRC, configure automatycznie go
wykryje. Jeśli wszystko pójdzie dobrze, MPlayer
wypisze przy starcie "Setting up LIRC support...
".
Jeśli wystąpi błąd, powiadomi Cię o tym. Jeśli nic nie powie Ci na
temat LIRC, to znaczy, że jego obsługa nie została wkompilowana. Proste :-)
Nazwa aplikacji dla MPlayer to - niespodzianka -
mplayer. Możesz używać dowolnych komend
MPlayera, a nawet podać więcej niż jedną
komendę na raz oddzielając je za pomocą \n
.
Nie zapomnij o włączeniu flagi repeat w .lircrc jeśli
ma to sens (skoki, głośność itp). To jest fragment przykładowego
.lircrc:
begin button = VOLUME_PLUS prog = mplayer config = volume 1 repeat = 1 end begin button = VOLUME_MINUS prog = mplayer config = volume -1 repeat = 1 end begin button = CD_PLAY prog = mplayer config = pause end begin button = CD_STOP prog = mplayer config = seek 0 1\npause end
Jeśli nie lubisz standardowej lokalizacji pliku lirc-config
(~/.lircrc), użyj opcji -lircconf
nazwa_pliku
by podać inny plik.
Tryb sługi pozwala Ci na utworzenie prostej nakładki na MPlayera. Po uruchomieniu z opcją -slave MPlayer będzie czytał ze standardowego wejścia komendy oddzielone znakami nowego wiersza (\n). Komendy zostały udokumentowane w pliku slave.txt
MPlayer potrafi odtwarzać pliki z sieci, używając protokołów HTTP, FTP, MMS lub RTSP/RTP.
Odtwarzanie następuje przez proste podanie URLa w wierszu poleceń.
MPlayer zwraca również uwagę na zmienną środowiskową
http_proxy
i używa proxy jeśli jest to możliwe. Korzystanie
z proxy może być również wymuszone za pomocą:
mplayer http_proxy://proxy.micorsops.com:3128/http://micorsops.com:80/strumien.asf
MPlayer potrafi również czytać ze standardowego wejścia (nie z nazwanych potoków). Może to być wykorzystane np. do odtwarzania poprzez FTP:
i
wget ftp://micorsops.com/cokolwiek.avi
-O - | mplayer -
Zalecane jest również włączenie -cache przy odtwarzaniu z sieci:
wget ftp://micorsops.com/cokolwiek.avi
-O - | mplayer -cache 8192 -
Jak już uda Ci się zmusić MPlayera do odtwarzania Twojego ulubionego strumienia internetowego, możesz użyć opcji -dumpstream aby zapisać strumień do pliku. Na przykład:
mplayerhttp://217.71.208.37:8006
-dumpstream -dumpfilestrumien.asf
zapisze zawartość strumieniowaną z
http://217.71.208.37:8006
do pliku
stream.asf
.
Działa to ze wszystkimi protokołami obsługiwanymi przez
MPlayera, jak MMS, RSTP itd.
Strumienie zdalne pozwalają na dostęp do większości strumieni obsługiwanych przez MPlayera ze zdalnego hosta. Głównym celem tej funkcji jest umożliwienie bezpośredniego korzystania z napędu CD lub DVD innego komputera w sieci (pod warunkiem posiadania odpowiedniej przepustowości). Niestety niektóre typy strumieni (aktualnie TV oraz MF) nie są dostępne zdalnie, gdyż są zaimplementowane na poziomie demultipleksera. Jest to przykre w przypadku MF, gdyż TV i tak by wymagało szalonej przepustowości.
Po kompilacji MPlayera wejdź do katalogu TOOLS/netstream i wpisz make by zbudować program serwera. Możesz wtedy skopiować program nestream do odpowiedniego miejsca w Twoim systemie (przeważnie /usr/local/bin pod Linuksem).
Najpierw musisz uruchomić serwer na komputerze, do którego masz zamiar mieć dostęp zdalny. Aktualnie serwer jest bardzo podstawowy i nie ma żadnych argumentów wiersza poleceń, więc po prostu wpisz netstream. Teraz możesz np. odtworzyć drugą ścieżkę VCD na serwerze za pomocą:
mplayer -cache 5000 mpst://nazwa_serwera/vcd://2
Masz również dostęp do plików na tym serwerze:
mplayer -cache 5000 mpst://nazwa_serwera//usr/local/movies/lol.avi
Zauważ, że ścieżki, które nie zaczynają się na "/" będą względne do katalogu, w którym uruchomiono serwer. Opcja -cache nie jest wymagana, lecz bardzo zalecana.
Miej na uwadze to, że aktualnie serwer nie ma żadnych zabezpieczeń. Nie narzekaj więc na liczne nadużycia, które są przez to możliwe. Zamiast tego wyślij jakąś (dobrą) łatkę, by stał się lepszy lub napisz swój własny serwer.
Nowoczesne napędy CD-ROM osiągają bardzo duże prędkości. Niektóre z nich są dodatkowo zdolne do pracy przy zredukowanych prędkościach. Oto kilka powodów, dla których powinniśmy zastanowić się czy nie należy zredukować prędkości naszego napędu:
Istnieją doniesienia o błędach odczytu przy dużych prędkościach, szczególnie podczas używania uszkodzonych bądź wadliwie wytłoczonych/nagranych płyt CD. Redukcja prędkości odczytu może uchronić nas przed utratą danych w takich przypadkach.
Wiele napędów CD jest dokuczliwie głośnych. Redukcja prędkości może zmniejszyć natężenie hałasu.
Możesz zredukować prędkość napędu CD z interfejsem IDE korzystając z hdparm, setcd lub cdctl. Działają one w następujący sposób:
hdparm -E[prędkość]
[urządzenie cdrom]
setcd -x[prędkość]
[urządzenie cdrom]
cdctl -bS [speed]
Jeśli używasz emulacji SCSI, możesz musieć zastosować ustawienia do prawdziwego urządzenia IDE a nie emulowanego SCSI.
Jeżeli masz uprawnienia roota, to pomóc może także następująca komenda:
echo file_readahead:2000000 > /proc/ide/[urządzenie cdrom]
/settings
Ustawiamy w ten sposób wielkość bufora odczytu na 2MB, co pomaga przy odczycie porysowanych płyt. Jeżeli ustawimy zbyt dużą wielkość tego bufora, napęd będzie stale rozkręcał się i zwalniał, co spowoduje bardzo znaczny spadek wydajności. Zaleca się również dostrojenie napędu CD-ROM przy użyciu hdparm:
hdparm -d1 -a8 -u1 [urządzenie cdrom]
Włączamy w ten sposób dostęp DMA do dysku, czytanie z wyprzedzeniem i odmaskowanie IRQ (IRQ unmasking) (więcej przeczytasz na stronach man do hdparm)
Proszę sprawdzić
"/proc/ide/[urządzenie cdrom]
/settings"
by dostroić swój napędu CD-ROM.
Dla napędów SCSI nie istnieje jednolity sposób ustawiawiania tych parametrów (jeżeli znasz jakiś to napisz nam o nim). Istnieje narzędzie które działa z napędami SCSI Plextor.
Aby poznać pełną listę dostępnych opcji, proszę przeczytać odpowiednie strony man. Składnia do odtwarzania standardowego DVD jest następująca:
mplayer dvd://<ścieżka>
[-dvd-device<urządzenie>
]
Przykład:
mplayer dvd://1 -dvd-device /dev/hdc
Jeśli skompilowałeś MPlayera z obsługą dvdnav, składnia jest taka sama, tylko musisz użyć dvdnav:// zamiast dvd://.
Domyślnym urządzeniem (device) DVD jest /dev/dvd. Jeżeli Twoje ustawienia są inne, stwórz odpowiedni symlink lub ustaw odpowiednie urządzenie (device) w linii polecenia korzystając z opcji -dvd-device.
MPlayer używa libdvdread
oraz libdvdcss
do odtwarzania i dekodowania DVD.
Te dwie biblioteki są zawarte
w głównym drzewie źródłowym MPlayera, nie trzeba
instalować ich osobno.
Możesz też użyć systemowych wersji tych bibliotek, ale nie jest to zalecane,
ponieważ może spowodować błędy, niekompatybilności bibliotek oraz zmniejszenie
prędkości.
Jeśli występują problemy z dekodowaniem DVD, spróbuj wyłączyć supermount lub inne tego typu usługi. Niektóre napędy RPC-2 mogą również wymagać ustawienia kodu regionu DVD.
Struktura dysku DVD. Dyski DVD mają po 2048 bajtów na sektor z ECC/CRC. Zwykle posiadają system plików UDF na pojedynczej ścieżce zawierającej różnorakie pliki (małe pliki .IFO i .BUK oraz duże (1GB) pliki .VOB). Są one rzeczywistymi plikami i mogą być kopiowane/odtwarzane z podmontowanego systemu plików niezakodowanego DVD.
Pliki .IFO zawierają informacje nawigacyjne filmu (mapa rozdziałów/tytułów/kątów kamery, tablica języków, itp) i są konieczne do odczytu i interpretacji zawartości pliku .VOB (filmu). Pliki .BUK są kopiami zapasowymi plików .IFO. Używają sektorów wszędzie, więc aby zaimplementować nawigację na DVD lub rozszyfrować zawartość, należy używać adresowania sektorów dysku w trybie raw.
Z tego powodu obsługa DVD wymaga
dostępu do urządzenia w trybie raw bazującym na sektorach. Niestety wymagane
jest (pod Linuksem) posiadanie uprawnień roota aby móc korzystać z sektorowego
adresowania pliku.
Dlatego też nie w ogóle używamy sterownika systemu plików pochodzącego
z jądra, ale reimplementujemy to w przestrzeni użytkownika.
Zajmuje się tym biblioteka libdvdread
0.9.x.
Sterownik
systemu plików UDF zawarty w jądrze nie jest wymagany ponieważ wspomniane
biblioteki zawierają własny, wbudowany sterownik systemu plików UDF. DVD nie
musi być podmontowany, bowiem używany jest jedynie dostęp w trybie raw.
Czasami /dev/dvd nie może być czytany przez użytkowników,
zatem autorzy libdvdread
zaimplementowali warstwę
emulacji, która tłumaczy adresowanie sektorowe na nazwy plików i offsety, aby
emulować dostęp w trybie raw na podmontowanym systemie plików albo nawet na
twardym dysku.
libdvdread
równie dobrze akceptuje miejsce
podmontowania (mountpoint) jak i nazwę urządzenia przy dostępie w trybie raw i
sprawdza /proc/mounts w celu odnalezienia odpowiedniej
nazwy urządzenia (device). Zostało to napisane z myślą o systemie Solaris, gdzie
nazwy urządzeń są przydzielane automatycznie.
Deszyfrowanie DVD.
Do deszyfrowania DVD jest używana biblioteka
libdvdcss
. Metoda jej działania może być określona
poprzez zmienna środowiskową DVDCSS_METHOD
,
co jest dokładniej opisane na stronie man.
Napędy DVD RPC-1 zabezpieczają ustawienia regionu jedynie poprzez oprogramowanie. Napędy RPC-2 mają sprzętowe zabezpieczenie, które pozwala na co najwyżej 5 zmian. Jeżeli posiadamy napęd DVD RPC-2 wymagana/zalecana jest aktualizacja firmware'u do RPC-1. Nowe wersje firmware'ów można znaleźć w internecie. Poszukiwania radzimy rozpocząć od forum firmware'ów. Jeżeli nie ma tam nowej wersji firmware'u dla naszego urządzenia, użyj regionset tool (narzędzia do zmiany regionów) aby ustawić kod regionu na swoim napędzie DVD (pod Linuksem). Ostrzeżenie: Możesz ustawić region tylko 5 razy.
Pełna lista dostępnych opcji znajduje się na stronie man. Składnia dla standardowego Video CD (VCD) jest następująca:
mplayer vcd://<ścieżka>
[-cdrom-device<urządzenie>
]
Przykład:
mplayer vcd://2 -cdrom-device /dev/hdc
Domyślnym urządzeniem VCD jest /dev/cdrom. Jeśli Twoje ustawienia są inne, utwórz dowiązanie symboliczne lub podaj prawidłowe urządzenie w linii poleceń za pomocą opcji -cdrom-device
Przynajmniej napędy CD-ROM SCSI firmy Plextor i niektóre modele Toshiby
mają beznadziejną wydajność przy odczycie VCD. Jest to spowodowane
niekompletną implementacją ioctl
'a CDROMREADRAW dla
tych urządzeń. Jeśli masz jakieś pojęcie o programowaniu SCSI,
pomóż nam zaimplementować ogólną
obsługę SCSI dla VCD.
W międzyczasie możesz wyciągać dane z VCD za pomocą readvcd i odtwarzać plik wynikowy za pomocą MPlayera
Struktura VCD. Video CD (VCD) składa się z sektorów CD-ROM XA, tzn. ścieżek CD-ROM mode 2 form 1 i form 2:
Pierwsza ścieżka jest w formacie mode 2 form 2, który oznacza użycie korekcji błędów L2. Ścieżka ta zawiera system plików ISO-9660 o gęstości 2048 bajtów/sektor. Ten system plików z kolei zawiera metainformacje VCD, a także nieruchome klatki, często używane w menu. Segmenty MPEG dla menu mogą także być składowane w tejże pierwszej ścieżce, ale MPEGi muszą być podzielone na kawałki po 150 sektorów. System plików ISO-9660 może zawierać inne pliki bądź programy, niekonieczne dla eksploatacji VCD.
Druga i pozostałe ścieżki są zwykle ścieżkami video MPEG typu raw o gęstości 2324 bajtów/sektor, zawierającymi jeden pakiet danych MGEG PS na sektor. Ścieżki te są w formacje mode 2 form 1, więc przechowują one więcej danych na sektor, w zamian za słabszą korekcję błędów. Możliwe są też ścieżki CD-DA na VCD poza pierwszą ścieżką. Niektóre systemy operacyjne używają pewnych trików aby ścieżki nie zawierające systemu plików ISO-9660 były widoczne w systemie plików. W pozostałych systemach, jak na przykład w systemie GNU/Linux, nie ma takiej możliwości (jeszcze). W takim przypadku dane MPEG nie mogą być montowane. Jako że większość filmów znajduje się na tego typu ścieżce, powinieneś spróbować na początek opcji vcd://2.
Istnieją również płyty VCD bez pierwszej ścieżki (pojedyncza ścieżka i brak systemu plików w ogóle). Je również da się odtwarzać, ale nie da się ich montować.
Definicja standardu Video CD, nazywana "Białą Księgą" Phillipsa, generalnie nie jest dostępna online, musi być zakupiona u Phillipsa. Bardziej szczegółowe informacje na temat Video CD można znaleźć na stronie dokumentacji vcdimagera.
O plikach .DAT. Plik o rozmiarze ok. 600 MB widoczny na pierwszej ścieżce zamontowanego VCD nie jest prawdziwym plikiem ! Jest on tzw. bramką ISO, utworzoną by Windows mógł obsługiwać takie ścieżki (Windows w ogóle nie zezwala aplikacjom na dostęp do urządzeń w trybie raw). Pod Linuksem nie możesz kopiować ani odtwarzać tych plików (zawierają "śmieci"). Pod Windows jest to możliwe, gdyż jego sterownik iso9660 symuluje odczyt ścieżek w trybie raw za pomocą tego pliku. By móc odtwarzać pliki .DAT, musisz mieć sterownik do jądra, który dostarczany jest z linuksową wersją PowerDVD. Posiada on zmodyfikowany sterownik systemu plików iso9660 (vcdfs/isofs-2.4.X.o), który jest w stanie symulować odczyt ścieżek w trybie raw za pomocą pliku .DAT. Jeśli podmontujesz płytę używając ich sterownika, możesz kopiować, a nawet odtwarzać pliki .DAT za pomocą MPlayera. Ale nie będzie to działało za pomocą standardowego sterownika iso9660 dostarczonego z jądrem Linuksa! Zamiast tego użyj opcji vcd://. Alternatywą dla kopiowania VCD jest nowy sterownik: cdfs (nie jest częścią oficjalnego jądra), który wyświetla sesje CD jako pliki obrazów, oraz cdrdao, program do zgrywania płyt CD bit po bicie.
Decyzyjna lista edycji (EDL) pozwala na automatyczne omijanie, bądź wyciszanie fragmentów filmów podczas ich odtwarzania, na podstawie pliku konfiguracji EDL dla danego filmu.
Funkcja ta jest użyteczna dla osób, które zechcą obejrzeć film w "przyjaznym dla rodziny" trybie. Możesz usunąć z filmu przemoc, przekleństwa, Jar-Jar Binksa, zgodnie z własnymi preferencjami. Ponadto istnieją także inne zastosowania, jak automatyczne pomijanie reklam w oglądanych filmach.
Format pliku EDL jest raczej "goły". Używana jest struktura z pojedynczym poleceniem w wierszu, w którym określone jest co należy zrobić (skip/mute), oraz kiedy (używając opóźnienia w sekundach).
Użyj podczas uruchamiania MPlayera flagi -edl <nazwa pliku> z nazwą pliku EDL, który ma być zastosowany do filmu.
Aktualny format pliku EDL jest następujący:
[sekunda początkowa] [sekunda końcowa] [akcja]
gdzie liczby odpowiadające sekundom nie muszą być całkowite, zaś akcja może
przyjmować wartość 0
dla pominięcia bądź
1
dla wyciszenia.
Na przykład:
5.3 7.1 0 15 16.7 1 420 422 0
Oznacza to pominięcie filmu między 5,3 sekundą, a 7,1 sekundą filmu, następnie wyciszenie od 15-tej sekundy do 16,7 sekundy i wreszcie pominięcie filmu pomiędzy 420 a 422 sekundą Akcje te są wykonywane, gdy licznik czasu filmu osiągnie zadeklarowaną wartość.
Aby stworzyć plik EDL, będący punktem wyjścia do dalszej edycji, użyj flagi -edlout <nazwa pliku>. Następnie, podczas odtwarzania filmu, naciśnij i, aby oznaczyć początek i koniec bloku do pominięcia. Odpowiedni wpis zostanie automatycznie utworzony w pliku. Wtedy możesz wrócić do edycji i "dostrajania" wygenerowanego pliku EDL, w którym możesz także zmienić domyślne pomijanie bloku na wyciszanie.
Większość płyt DVD, a także wiele innych plików, zawiera dźwięk przestrzenny. MPlayer obsługuje dźwięk przestrzenny, ale opcja ta nie jest domyślnie włączona, ponieważ sprzęt przeznaczony dla zwykłego stereo jest znacznie bedziej popularny. Aby odtworzyć plik zawierający więcej niż dwa kanały audio, użyj opcji -channels. Na przykład, aby odtworzyć DVD z audio 5.1:
mplayer dvd://1 -channels 6
Zauważmy, że mimo nazwy "5.1", używanych jest 6 kanałów. Jeżeli posiadasz sprzęt pozwalający na odtwarzanie dźwięku przestrzennego możesz bezpiecznie wpisać channels do swojego pliku konfiguracyjnego MPlayera (~/.mplayer/config). Przykładowo, aby domyślnie włączyć efekt kwadrofonii, należy dodać wiersz:
channels=4
Od tego momentu, MPlayer będzie odtwarzał cztery kanały audio, zawsze gdy będą one dostępne.
MPlayer standardowo nie duplikuje kanałów, ani nie robi tego większość sterowników audio. Jeżeli chcesz zrobić to ręcznie:
mplayer filename
-af channels=2:2:0:1:0:0
Zobacz sekcję o kopiowaniu kanałów, jest tam wyjaśnienie tego polecenia.
Dźwięk przestrzenny na płytach DVD zazwyczaj kodowany jest w formacie AC3 (Dolby Digital) lub DTS (Digital Theater System). Część współczesnego sprzętu audio jest w stanie dekodować te formaty. MPlayer może zostać skonfigurowany, aby przekazywał dane audio bez ich dekodowania. Rozwiązanie takie będzie działało tylko, jeżeli posiadasz w swojej karcie muzycznej złącze S/PDIF (Sony/Philips Digital Interface).
Jeżeli twój sprzęt audio potrafi dekodować zarówno AC3 jak i DTS, możesz bezpiecznie włączyć przekazywanie dla obu formatów. W przeciwnym razie, tylko dla tego formatu, który jest obsługiwany przez Twój sprzęt.
Aby włączyć przekazywanie z wiersza poleceń:
dla AC3 użyj -ac hwac3
dla DTS użyj -ac hwdts
dla AC3 i DTS użyj -afm hwac3
Aby włączyć przekazywanie w pliku konfiguracyjnym MPlayera:
dla AC3 użyj ac=hwac3,
dla DTS użyj ac=hwdts,
dla AC3 i DTS użyj afm=hwac3
Zauważ, że na końcu opcji ac=hwac3, oraz ac=hwdts, są przecinki. Powodują one, że MPlayer będzie używał standardowych kodeków, które są normalnie używane podczas odtwarzania plików, które nie posiadają dźwięku AC3 ani DTS. Opcja afm=hwac3 nie wymaga przecinka, samo podanie rodziny kodeków powoduje że MPlayer wypróbuje inne gdy będzie musiał.
Cyfrowe transmisje TV (takie jak DVB czy ATSC), także niektóre płyty DVDs zazwyczaj zawierają strumienie audio w formacie MPEG (zazwyczaj MP2). Część sprzętowych dekoderów MPEG, takich jak pełnofunkcjonalne karty DVB, oraz adaptery DXR2, potrafi natywnie dekodować ten format. MPlayer może zostać tak skonfigurowany, aby przekazywać dane audio bez ich dekodowania.
Aby użyć tego sposobu dekodowania:
mplayer -ac hwmpa
***TODO***
Ta sekcja musi dopiero zostać napisana i nie może zostać ukończona zanim ktoś nie dostarczy przykładowych plików do testów. Jeżeli posiadasz jakieś pliki audio zakodowane macierzowo (matrix-encoded), wiesz kto je posiada lub wiesz cokolwiek co mogłoby być pomocne, wyślij proszę informację na listę mailingową MPlayer-DOCS W temacie podaj "[matrix-encoded audio]".
Jeżeli nie nadejdą żadne wiadomości, ta sekcja zostanie usunięta.
Przydatne linki:
MPlayer posiada filtr HRTF (Head Related Transfer Function) bazujący na projekcie MIT, w ramach którego wykonane zostały pomiary z mikrofonów zamontowanych na głowie ludzkiego manekina.
Chociaż nie jest możliwe dokładne zasymulowanie systemu dźwięku przestrzennego, filtr HRTF zawarty w MPlayerze powoduje bardziej przestrzenne zanurzenie w dźwięku przy użyciu 2-kanałowych słuchawek. Standardowy procedura po prostu łączy wszystkie kanały w dwa. hrtf, obok łączenia kanałów, generuje także subtelne echa, nieznacznie zwiększa separację kanałów stereo, a także zmienia głośność niektórych częstotliwości. To, czy dźwięk HRTF brzmi lepiej, może zależeć od źródła dźwięku oraz gustu słuchacza, ale z pewnością jest on warty wypróbowania.
Odtwarzanie DVD z HRTF:
mplayer dvd://1 -channels 6 -af hrtf
hrtf działa poprawnie tylko przy 5 i 6 kanałach. Opcja ta wymaga także audio próbkowanego z częstotliwością 48kHz. Audio na płytach DVD jest już próbkowane 48kHz, lecz jeżeli chcesz odtworzyć plik z innym próbkowaniem i opcją hrtf, musisz dokonać jego przepróbkowania tego pliku:
mplayer filename
-channels 6 -af resample=48000,hrtf
Niestety nie ma żadnego standardu opisującego w jaki sposób kanały są uporządkowane. Poniższe porządki przedstawiają te używane przez AC3, które są dość typowe. Spróbuj ich i sprawdź czy odpowiednie źródła dźwięku się zgadzają. Kanały są numerowane od 0.
mono
środkowy
stereo
lewy
prawy
kwadrofonia
lewy przedni
prawy przedni
lewy tylny
prawy tylny
surround 4.0
lewy przedni
prawy przedni
środkowy tylny
środkowy przedni
surround 5.0
lewy przedni
prawy przedni
lewy tylny
prawy tylny
środkowy przedni
surround 5.1
lewy przedni
prawy przedni
lewy tylny
prawy tylny
środkowy przedni
subwoofer (głośnik niskotonowy)
Opcja -channels jest używana w celu określenia liczby kanałów dekodowanego audio. Niektóre kodeki audio wykorzystują tę liczbę aby zdecydować czy konieczne jest zmniejszenie liczby kanałów poprzez miksowanie. Zauważ, że ustawienie tej opcji nie jest równoważne z ustawieniem liczby wyjściowych kanałów. Przykładowo, używając opcji -channels 4 aby odtworzyć plik stereo MP3, otrzymamy 2 kanały wyjściowe, bowiem kodek MP3 nie potrafi spreparować dodatkowych kanałów.
Filtr audio channels może być użyty aby stworzyć lub usunąć kanały, co może być przydatne przy określaniu liczy kanałów przesyłanych do karty muzycznej. Aby dowiedzieć się więcej, zobacz kolejne sekcje.
Dźwięk mono brzmi znacznie lepiej, gdy jest odtwarzany przy użyciu dwóch głośników - szczególnie gdy używamy słuchawek. Pliki audio, które posiadają tylko jeden kanał audio są automatycznie odtwarzane przy użyciu obu głośników; niestety większość plików mono jest zakodowana jako dźwięk stereo, gdzie jeden kanał jest wyciszony. Najłatwiejszą i najbardziej niezawodną metodą pozwalającą na odtworzenie dźwięku przy użyciu obu głośników jest użycie filtru extrastereo:
mplayer filename
-af extrastereo=0
Metoda ta uśrednia oba kanały, co skutkuje zmniejszeniu głośności każdego z kanałów o połowę względem oryginału. W następnej sekcji zawarto przykłady innych metod rozwiązania tego problemu bez zmniejszania głośności; niestety są one bardziej skomplikowanego i wymagają różnych opcji w zależności od kanału, który zawiera dane. Jeżeli na prawdę potrzebujesz utrzymać głośność, możliwe że łatwiej będzie odpowiednio dopasować głośność przy użyciu filtru volume. Na przykład:
mplayer filename
-af extrastereo=0,volume=5
Filtr channels potrafi przesunąć dowolny jeden lub wszystkie kanały. Ustawienie wszystkich podopcji filtru channels może być skomplikowane i wymaga nieco uwagi.
Zdecyduj ile wyjściowych kanałów audio potrzebujesz. Oto pierwsza podopcja.
Policz ile przesunięć kanałów zamierzasz wykonać. To jest druga podopcja. Każdy kanał może być przesunięty do kilku różnych kanałów w tym samym czasie, ale pamiętaj, że gdy przesuniesz kanał (również gdy tylko do jednego kanału docelowego), źródło zostanie opróżnione, chyba że inny kanał zostanie tam przesunięty. Aby skopiować kanał, pozostawiając źródło nietknięte, po prostu przesuń kanał zarówno do miejsca kopiowania, jak i do źródła. Na przykład:
kanał 2 --> kanał 3 kanał 2 --> kanał 2
Wypisz kopie kanałów jako pary subopcji. Pamiętaj, że pierwszy kanał ma numer
0, drugi 1 itd. Kolejność subopcji nie jest istotna tak długo, ale muszą one
być pogrupowane w pary typu
źródło:cel
.
Oto przykład innej metody odtwarzania jednego kanału w dwóch głośnikach. Załóżmy, że lewy kanał ma być odtwarzany, a prawy ma zostać pominięty. Zgodnie z krokami opisanymi powyżej:
Aby dostarczyć dźwięk do każdego z dwóch głośników, pierwsza opcja musi mieć wartość "2".
Lewy kanał musi zostać przesunięty do prawego kanału oraz lewego, aby nie został on pusty. Sumaryczna liczba przesunięć to dwa, zatem druga opcja to również "2".
Aby przesunąć lewy kanał (kanał 0) do kanału prawego (kanał 1), para subopcji musi byc "0:1", "0:0" przesunie lewy kanał do siebie.
Po połączeniu wszystkiego razem otrzymamy:
mplayer filename
-af channels=2:2:0:1:0:0
Przewaga tego przykładu nad opcją extrastereo jest taka, że głośność każdego z kanałów wyjściowych pozostanie taka sama jak kanału źródłowego. Wadą jest, że podopcje muszą zostać zmienione na "2:2:1:0:1:1", gdy dźwięk zawiera kanał prawy. Ponadto trudniej to zapamiętać i wpisać.
Istnieje znacznie łatwiejsza metoda na użycie filtru channels w celu odtworzenia lewego kanału w dwóch głośnikach:
mplayer filename
-af channels=1
Drugi kanał jest pomijany, a pierwszy jest pozostawiany, bez dodatkowych podopcji. Sterowniki kart muzycznych automatycznie odtwarzają jednokanałowy dźwięk wykorzystując oba głośniki. Oczywiście zadziała to tylko, gdy pożądanym kanałem jest kanał lewy.
Kolejną typową operacją jest kopiowanie kanałów przednich i odtwarzanie ich z tylnych głośników zestawu kwadrofonicznego.
Potrzebujemy czterech kanałów wyjściowych, więc pierwsza podopcja to "4".
Każdy z przednich kanałów musi zostać przesunięty do odpowiedniego kanału tylnego oraz do siebie. W sumie użyte będą cztery przesunięcia, więc druga opcja to "4".
Lewy przedni kanał (kanał 0) musi zostać przesunięty do lewego tylnego (kanał 2): "0:2". Lewy przedni musi być także przesunięty do siebie: "0:0". Prawy przedni (kanał 1) musi zostać przesunięty do prawego tylnego (kanał 3): "1:3" oraz do siebie: "1:1".
Po połączeniu wszystkich podopcji otrzymujemy:
mplayer filename
-af channels=4:4:0:2:0:0:1:3:1:1
Filtr pan potrafi zmiksować kanały w określonych przez użytkownika proporcjach. Pozwala to na wykonanie wszystkiego tego co potrafi filtr channels i wiele więcej. Niestety podopcje są tutaj znacznie bardziej skomplikowane.
Zdecyduj z iloma kanałami chcesz pracować. Aby to określić możesz potrzebować użyć -channels i/lub -af channels. Późniejsze przykłady pokażą kiedy użyć którego.
Zdecyduj ile kanałów ma zostać wprowadzonych do pan (dalsze dekodowane kanały zostaną porzucone). To jest pierwsza podopcja. Kontroluje ona także liczbę kanałów używanych jako wyjście.
Pozostałe podopcje określają jak dużą część danego kanału zmiksować do kanału docelowego. To jest najbardziej skomplikowana część. Aby sprostać temu zadaniu, podzielmy podopcje na kilka grup, po jednej dla każdego kanału wyjściowego. Każda podopcja w zbiorze odpowiada pojedynczemu kanałowi wejściowemu. Liczba, którą podasz odpowiada części kanału wejściowego, która zostanie zmiksowana w kanale wyjściowym.
pan akceptuje wartości od 0 do 512, co odpowiada wartościom od 0% do 51200% oryginalnej głośności. Bądź ostrożny używając wartości większych od 1. Może to spowodować nie tylko bardzo duże zwiększenie głośności, ale także, jeżeli przekroczysz zakres swojej karty muzycznej, możesz usłyszeć okropne trzaski. Jeżeli chcesz, możesz stosować po filtrze pan dopisać ,volume, co włączy obcinanie głośności, jednak najlepiej używać na tyle małych wartości parametrów pan, aby przycinanie nie było potrzebne.
Oto jeszcze jeden przykład, jak odtworzyć lewy kanał w dwóch głośnikach. Postępując zgodnie z krokami opisanymi powyżej:
pan powinien używać dwóch kanałów wyjściowych, więc pierwsza podopcja to "2".
Ponieważ mamy dwa kanały wejściowe, będziemy mieli dwie grupy podopcji. Ponieważ używane są również dwa kanały wyjściowe, w każdej grupie będą po dwie podopcje. Lewy kanał z pliku powinien zostać skopiowany z pełną głośnością do nowych kanału: lewego i prawego. W związku z tym, pierwsza grupa podopcji to "1:1". Prawy kanał powinien zostać pominięty, zatem druga grupa to "0:0". Wszelkie zera na końcu listy podopcji mogą zostać pominięte, ale dla przejrzystości przykładu, pozostawimy je.
Po złączeniu wszystkich podopcji otrzymamy:
mplayer filename
-af pan=2:1:1:0:0
Jeżeli pożądanym kanałem jest prawy, a nie lewy, podopcje zmienią się na "2:0:0:1:1".
Podobnie jak przy użyciu channels, istnieje skrót działający tylko z lewym kanałem:
mplayer filename
-af pan=1:1
Jeżeli pan posiada tylko jeden kanał wejściowy (pozostałe kanały są pomijane), potrzebna jest tylko jedna grupa podopcji z jedną podopcją, która oznacza, że jedyny kanał będzie zawierał 100% siebie.
Dekoder 6-kanałowego PCM zawarty w MPlayerze nie potrafi zmniejszać liczby kanałów przez miksowanie. Oto metoda dokonania tego przy użyciu opcji pan:
Liczba kanałów wyjściowych to 2, więc pierwsza podopcja to "2".
Jako, że mamy 6 kanałów wejściowych, musimy użyć sześciu grup opcji. Na szczęście, ponieważ interesują nas tylko dwa pierwsze kanały, możemy użyć tylko dwóch grup opcji; pozostałe cztery grupy mogą zostać pominięte. Pamiętaj, że nie wszystkie wielokanałowe pliki audio mają tę samą kolejność kanałów. Poniższy przykład pokazuje zmniejszanie liczby kanałów w pliku, w którym kolejność kanałów jest taka, jak w AC3 5.1:
0 - lewy przedni 1 - prawy przedni 2 - lewy tylny 3 - prawy tylny 4 - środkowy przedni 5 - subwoofer (głośnik niskotonowy)
Pierwsza grupa podopcji zawiera kolejne wartości oryginalnej głośności lewego przedniego kanału, które powinny być dostarczone do odpowiednich kanałów wyjściowych: "1:0". Prawy przedni kanał powinien zostać przeniesiony do prawego wyjściowego: "0:1". Analogicznie dla kanałów tylnych: "1:0" i "0:1". Kanał środkowy powinien zostać przeniesiony do obu kanałów wyjściowych z połową głośności: "0.5:0.5", zaś kanał głośnika niskotonowego powinien być słyszalny w obu kanałach wyjściowych z pełną głośnością: "1:1".
Połącz wszystko razem, a otrzymasz:
mplayer 6-channel.wav
-af pan=2:1:0:0:1:1:0:0:1:0.5:0.5:1:1
Przedstawione powyżej głośności są tylko przybliżonym przykładem. Nie czuj się nimi skrępowany i zmieniaj je zgodnie ze swoim uznaniem.
Jeżeli posiadasz parę dużych przednich głośników, możesz nie mieć ochoty tracić pieniędzy na dodatkowy głośnik niskotonowy, tylko po to, aby mieć kompletny system 5.1. Jeżeli użyjesz opcji -channels 5, przekażesz do lib52 informację, że ma dekodować audio 5.1 dla systemu 5.0. Tym sposobem kanał głośnika niskotonowego zostanie po prostu pominięty. Jeżeli chcesz rozdzielić kanał subwoofera samodzielnie, musisz dokonać ręcznego zmiksowania przy użyciu pan:
Jako, że pan musi analizować wszystkie 6 kanałów, podaj opcję -channels 6, aby liba52 zdekodował je wszystkie.
Ponieważ pan będzie używał pięciu kanałów wyjściowych, pierwsza podopcja to "5".
Sześć kanałów wejściowych i pięć wyjściowych oznacza 6 grup po 5 podopcji.
Lewy przedni kanał replikuje samego siebie: "1:0:0:0:0"
Identycznie dla prawego przedniego kanału: "0:1:0:0:0"
Tak samo dla lewego tylnego: "0:0:1:0:0"
Oraz tak samo dla prawego tylnego: "0:0:0:1:0"
Środkowy też: "0:0:0:0:1"
Teraz musimy zdecydować, co zrobić z subwooferem. Na przykład możemy podzielić go po połowie na lewy przedni i prawy przedni: "0.5:0.5:0:0:0"
Po połączeniu wszystkich opcji otrzymasz:
mplayer dvd://1
-channels 6 -af pan=5:1:0:0:0:0:0:1:0:0:0:0:0:1:0:0:0:0:0:1:0:0:0:0:0:1:0.5:0.5:0:0:0
Niekóre ścieżki audio są zbyt ciche aby można ich komfortowo słuchać bez wzmocnienia. Staje się to problemem, gdy Twój sprzęt audio nie potrafi wzmacniać sygnału. Opcja -softvol instruuje MPlayera, aby ten używał wewnętrznego miksera. Możesz wtedy używać klawiszy strojenia głośności (domyślnie 9 i 0), aby uzyskać większe poziomy głośności. Pamiętaj, że nie omija to miksera Twojej karty muzycznej; MPlayer zwiększa tylko głośność sygnału przed przesłaniem go do Twojej karty. Poniższy przykład może być dobrym początkiem:
mplayer cichy-plik
-softvol -softvol-max 300
Opcja -softvol-max określa maksymalny dozwolony poziom głośności, jako procent głośności oryginalnej. Przykładowo, -softvol-max 200 pozwoli na maksymalne zwiększenie głośności do 200% głośności oryginalnej. Można bezpiecznie używać dużych parametrów -softvol-max; większa głośność nie zostanie użyta, jeżeli nie zwiększysz jej przy pomocy klawiszy regulacji głośności. Jedyną wadą stosowania większych wartości jest to, że, ponieważ MPlayer ustala głośność jako procent głośności maksymalnej, nie będziesz w stanie precyzyjnie kontrolować głośności przy pomocy klawiszy regulacji głośności. Użyj mniejszych wartości parametrów -softvol-max i/lub dodaj opcję -volstep 1 aby uzyskać większą precyzję.
Opcja -softvol działa poprzez kontrolę filtru volume. Jeżeli chcesz odtwarzać plik z określoną głośnością, możesz podać opcję dla volume ręcznie:
mplayer cichy-plik
-af volume=10
Pozwoli to na odtworzenie pliku z 10-decybelowym wzmocnieniem. Bądź ostrożny używając filtru volume - ustawiając zbyt dużą głośność możesz łatwo uszkodzić swój słuch. Zaczynaj od małych wartości i stopniowo zwiększaj je aż do uzyskania pożądanej głośności. Ponadto, jeżeli podasz zbyt dużą wartość, filtr volume może musieć przyciąć głośność, aby nie przesłać do karty muzycznej danych spoza akceptowalnego przez nią zakresu; będzie to powodować zniekształcenia dźwięku.
Sekcja ta opisuje jak oglądać/nagrywać obraz za pomocą tunera TV kompatybilnego z V4L. Zajrzyj do strony man by zobaczyć opis opcji TV i klawiszy sterujących.
Najpierw musisz przekompilować. ./configure wykryje automatycznie nagłówki jądra związane z V4L i obecność urządzeń /dev/video*. Jeśli istnieją, obsługa TV zostanie wbudowana (zobacz wynik działania ./configure).
Upewnij się, że Twój tuner działa z innymi programami do obsługi TV pod Linuksem, na przykład XawTV.
Kompletna lista opcji dostępna jest na stronie man. Tu jest tylko kilka wskazówek:
Używaj opcji channels. Przykład:
-tv channels=26-MTV1,23-TV2
Wyjaśnienie: Jeśli użyjesz tej opcji, dostępne będą tylko kanały 23 i 26 oraz przy zmianie kanału pojawi się ładny napis na OSD, wyświetlający jego nazwę. Odstępy w nazwie kanału muszą zostać zastąpione znakiem "_".
Używaj rozsądnych rozmiarów obrazu. Rozmiary obrazu wynikowego powinny być podzielne przez 16.
Jeśli nagrywasz obraz video o pionowej rozdzielczości większej niż połowa rozdzielczości pełnej (np. 288 dla PAL lub 240 dla NTSC), wtedy 'ramki' które otrzymasz będą tak naprawdę parami poprzeplatanych (interleaved) pól. W zależności od tego, co chcesz zrobić ze strumieniem video, możesz go zostawić w takiej formie, użyć destrukcyjnego usuwania przeplotu (deinterlacing), albo rozdzielić pary na pojedyncze pola.
W przeciwnym wypadku dostaniesz film, który jest zniekształcony w trakcie scen o dużej dynamice, a wskazana szybkość transmisji (bitrate) prawdopodobnie nie będzie nawet mogła być utrzymana przez kontroler szybkości (bitrate controller), ponieważ artefakty przeplotu tworzą duże ilości szczegółów, a co za tym idzie, potrzebują dużej przepustowości. Możesz włączyć usuwanie przeplotu za pomocą opcji -vf pp=TYP_DEINT. Zwykle pp=lb spisuje się dobrze, ale to kwestia gustu. Poczytaj o innych algorytmach usuwania przeplotu na stronie man i zacznij eksperymentować.
Usuwaj "martwe miejsca". Kiedy nagrywasz video, są pewnie miejsca przy brzegach, które są zazwyczaj czarne lub zawierają szum. Jak się łatwo domyślić, niepotrzebnie zużywają sporo przepustowości (dokładniej, to nie same czarne miejsca, lecz ostre przejścia pomiędzy czarnym kolorem i jaśniejszym obrazem video, ale nie jest to akurat takie ważne). Zanim zaczniesz nagrywać, ustaw argumenty opcji crop by wyciąć wszystkie "śmieci" na brzegach. Oczywiście nie zapomnij o utrzymaniu prawidłowych wymiarów obrazu.
Uważaj na obciążenie CPU. Przez większość czasu Nie powinno ono przekroczyć granicy 90%. Jeśli masz duży bufor nagrywania, MEncoder może przetrwać przeciążenie przez najwyżej kilka sekund i nic więcej. Lepiej więc wyłączyć wszystkie trójwymiarowe wygaszacze OpenGL i inne tego typu bajery.
Nie mieszaj z zegarem systemowym. MEncoder korzysta z niego do synchronizacji A/V. Jeśli zmodyfikujesz zegar systemowy (zwłaszcza wstecz), MEncoder się pogubi i utraci klatki. Jest to bardzo ważna sprawa jeśli jesteś podpięty do sieci i używasz do synchronizacji czasu różnych programów typu NTP. Musisz wyłączyć NTP w trakcie nagrywania, jeśli chcesz, by było ono przeprowadzone niezawodnie.
Nie zmieniaj opcji outfmt, chyba, że wiesz co robisz lub
Twoja karta/sterownik naprawdę nie obsługuje ustawienia domyślnego
(przestrzeń kolorów YV12). W poprzednich wersjach
MPlayera/MEncodera
konieczne było podanie formatu wyjścia.
Ten problem powinien być rozwiązany w aktualnych wydaniach i opcja
outfmt nie jest już wymagana, a ustawienie domyślne powinno
pasować każdemu. Na przykład, jeśli nagrywasz do formatu DivX używając
libavcodec
i podasz opcję
outfmt=RGB24 aby zwiększyć jakość nagrywanego obrazu,
zostanie on i tak później z powrotem przekonwertowany do YV12, więc jedyne,
co osiągniesz, to ogromna strata mocy obliczeniowej.
By użyć przestrzeni kolorów I420 (outfmt=i420), musisz dodać opcję -vc rawi420 z powodu konfliktu fourcc z kodekiem Intel Indeo.
Jest kilka sposobów na nagrywanie audio. Możesz nagrywać dźwięk za pomocą Twojej karty dźwiękowej korzystając z zewnętrznego kabla pomiędzy kartą video i wejściem liniowym lub korzystając z wbudowanego w układ bt878 przetwornika ADC. W tym drugim przypadku musisz załadować sterownik btaudio. Przeczytaj plik linux/Documentation/sound/btaudio (w drzewie jądra, a nie MPlayera) by dowiedzieć się jak korzystać z tego sterownika.
Jeśli MEncoder nie może otworzyć urządzenia dźwiękowego, upewnij się, że jest ono rzeczywiście dostępne. Zdarzają się problemy z serwerami dźwięku typu aRts (KDE) lub ESD (GNOME). Jeśli masz kartę full-duplex (prawie wszystkie przyzwoite karty dostępne obecnie obsługują tę funkcję) i korzystasz z KDE, spróbuj zaznaczyć opcję "Działanie w pełni dupleksowe" ("full duplex") w konfiguracji serwera dźwięku.
Puste wyjście, do AAlib :)
mplayer -tv driver=dummy:width=640:height=480 -vo aa tv://
Wejście ze standardowego V4L:
mplayer -tv driver=v4l:width=640:height=480:outfmt=i420 -vc rawi420 -vo xv tv://
Bardziej skomplikowany przykład. Każe on MEncoderowi nagrać pełen obraz PAL, wykadrować go i usunąć przeplot korzystając z algorytmu liniowego zlewania (linear blend). Audio jest kompresowane ze stałą szybkością równą 64kbps, przy użyciu kodeka LAME. To ustawienie jest dobre do nagrywania filmów.
mencoder -tv driver=v4l:width=768:height=576 -oac mp3lame -lameopts cbr:br=64 \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 \
-vf crop=720:544:24:16,pp=lb -o wyjscie.avi
tv://
Ten przykład dodatkowo przeskaluje obraz do 384x288 i skompresuje video z szybkością 350kbps w trybie wysokiej jakości. Opcja vqmax uwalnia kwantyzator i pozwala kompresorowi video na osiągnięcie tak niskiej szybkości nawet kosztem jakości obrazu. Może być to używane do nagrywania długich seriali TV, kiedy jakość obrazu nie jest tak ważna.
mencoder -tv driver=v4l:width=768:height=576 \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=350:vhq:vqmax=31:keyint=300 \
-oac mp3lame -lameopts cbr:br=48 -sws 1 -o wyjscie.avi
\
-vf crop=720:540:24:18,pp=lb,scale=384:288 tv://
Jest również możliwe podanie mniejszych wymiarów obrazu w opcji -tv i pominięcie programowego skalowania, ale to podejście wykorzystuje maksymalną ilość dostępnych informacji i jest trochę bardziej odporne na szum. Układy bt878, ze względu na ograniczenia sprzętowe, mogą stosować uśrednianie pikseli jedynie w kierunku poziomym.
Ten rozdział opisuje jak włączyć możliwość słuchania radia przy użyciu tunera radiowego kompatybilnego z V4L. Opis opcji i sterowania klawiaturą znajduje się na stronie man.
Najpierw, musisz przekompilować MPlayera używając ./configure z opcją --enable-radio i (jeśli chcesz móc przechwytywać radio) --enable-radio-capture.
Upewnij się że Twój tuner działa z innym oprogramowaniem do radia w Linuksie, na przykład z XawTV.
Pełna lista opcji jest dostępna na stronie man. Tu jest tylko kilka porad:
Używaj opcji channels. Na przykład:
-radio channels=104.4-Sibir,103.9-Maximum
Wyjaśnienie: Przy użyciu tej opcji dostępne będą tylko stacje na częstotliwościach 104.4 i 103.9. Przy przełączaniu kanału OSD będzie wyświetlać nazwę kanału. Spacje w nazwie kanału muszą zostać zastąpione przez znak "_".
Jest kilka metod przechwytywania audio. Możesz przechwytywać dźwięk albo
korzystając ze swojej karty dźwiękowej i zewnętrznego kabelka łączącego kartę
video z wejściem dźwięku, albo używając wbudowanego w chip saa7134 konwertera
ADC. W tym drugim przypadku, musisz załadować sterownik
saa7134-alsa
lub saa7134-oss
.
Do przechwytywania dźwięku nie można użyć MEncodera, ponieważ wymaga on do działania strumienia video. Możesz więc albo użyć arecord z projektu ALSA albo opcji -ao pcm:file=file.wav. W tym drugim przypadku nie będziesz słyszał dźwięku (chyba że masz kabelek do line-in i wyłączyłeś jego wyciszenie).
Wejście ze standardowego V4L (przy użyciu kabelka line-in, bez przechwytywania):
mplayer radio://104.4
Wejście ze standardowego V4L (przy użyciu kabelka line-in, bez przechwytywania, interface V4Lv1):
mplayer -radio driver=v4l radio://104.4
Odtwarzanie drugiego kanału z listy:
mplayer -radio channels=104.4=Sibir,103.9=Maximm radio://2
Przesyłanie dźwięku szyną PCI z wewnętrznego konwertera ADC na karcie radiowej.
W tym przykładzie tuner jest używany jako druga karta dźwiękowa (urządzenia
alsa hw:1,0). Dla kart opartych na saa7134 musi być załadowany moduł
saa7134-alsa
lub saa7134-oss
.
mplayer -rawaudio rate=32000 radio://2/capture \ -radio adevice=hw=1.0:arate=32000:channels=104.4=Sibir,103.9=Maximm
Jeśli używasz nazw urządzeń ALSA dwukropki muszą być zastąpione znakami równości a przecinki kropkami.
libcaca
- Color ASCII Art library (biblioteka kolorowego ASCII-Art)Jest WYSOCE wskazane sprawdzenie, czy rejestry MTRR są ustawione prawidłowo, ponieważ mogą dać duży wzrost wydajności.
Wykonaj cat /proc/mtrr:
--($:~)--
cat /proc/mtrr
reg00: base=0xe4000000 (3648MB), size= 16MB: write-combining, count=9
reg01: base=0xd8000000 (3456MB), size= 128MB: write-combining, count=1
Widać mojego Matroksa G400 z 16MB pamięci. Wydałem tę komendę z XFree 4.x.x, które ustawiają MTRR automatycznie.
Jeżeli nie zadziałało, trzeba to ustawić ręcznie. Przede wszystkim musisz znaleźć adres bazowy. Możesz to zrobić na 3 sposoby:
z komunikatów startowych X11, na przykład:
(--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000 (--) SVGA: Linear framebuffer at 0xD8000000
z /proc/pci (użyj polecenia lspci -v):
01:00.0 VGA compatible controller: Matrox Graphics, Inc.: Unknown device 0525 Memory at d8000000 (32-bit, prefetchable)
z komunikatów sterownika mga_vid w jądrze (użyj dmesg):
mga_mem_base = d8000000
Znajdźmy teraz rozmiar pamięci. Jest to bardzo łatwe, po prostu zamień rozmiar RAMu na karcie graficznej na system szesnastkowy lub użyj tej tabelki:
1 MB | 0x100000 |
2 MB | 0x200000 |
4 MB | 0x400000 |
8 MB | 0x800000 |
16 MB | 0x1000000 |
32 MB | 0x2000000 |
Znasz już adres bazowy i rozmiar pamięci. Ustawmy więc rejestry MTRR!
Na przykład dla powyższej karty Matrox (base=0xd8000000
)
z 32MB RAMu (size=0x2000000
) po prostu wykonaj:
echo "base=0xd8000000 size=0x2000000 type=write-combining" > /proc/mtrr
Nie wszystkie procesory obsługują MTRR. Na przykład starsze K6-2 (jakieś 266MHz, stepping 0) nie obsługują MTRR, ale stepping 12 już tak (wykonaj cat /proc/cpuinfo aby sprawdzić).
W XFree86 4.0.2 lub nowszym możesz używać sprzętowego YUV poprzez rozszerzenie XVideo. To tego używa opcja -vo xv. Ten sterownik obsługuje także regulację jasności/kontrastu/nasycenia/itp. (chyba, że używasz starego, powolnego kodeka DirectShow DivX, który to obsługuje wszędzie). Spójrz na stronę man.
Aby to zadziałało upewnij się, że:
Masz XFree86 4.0.2 lub nowsze (starsze nie mają XVideo)
Twoja karta obsługuje przyśpieszanie sprzętowe (współczesne karty to robią)
X ładuje rozszerzenie XVideo, zwykle wygląda to tak:
(II) Loading extension XVideo
w /var/log/XFree86.0.log
To ładuje tylko rozszerzenie XFree86. W dobrej instalacji jest to zawsze włączone i nie oznacza to że obsługa XVideo w karcie jest załadowana.
Twoja karta obsługuje Xv pod Linuksem. Aby sprawdzić, spróbuj xvinfo, wchodzące w skład dystrybucji XFree86. Powinno wyświetlić długi tekst podobny do tego:
X-Video Extension version 2.2 screen #0 Adaptor #0: "Savage Streams Engine" number of ports: 1 port base: 43 operations supported: PutImage supported visuals: depth 16, visualID 0x22 depth 16, visualID 0x23 number of attributes: 5 (...) Number of image formats: 7 id: 0x32595559 (YUY2) guid: 59555932-0000-0010-8000-00aa00389b71 bits per pixel: 16 number of planes: 1 type: YUV (packed) id: 0x32315659 (YV12) guid: 59563132-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) (...etc...)
Karta musi obsługiwać formaty "YUY2 packed" i "YV12 planar", aby mogła być używana z MPlayerem.
I na koniec sprawdź, czy MPlayer został skompilowany z obsługą Xv. Wykonaj mplayer -vo help | grep xv . Jeżeli została wbudowana obsługa Xv to powinien się pojawić podobny wiersz:
xv X11/Xv
Starsze sterowniki 3dfx znane były z tego, że miały problemy z akceleracją XVideo. Nie obsługiwały ani przestrzeni kolorów YUY2, ani YV12. Sprawdź czy masz XFree86 w wersji 4.2.0 lub nowszej, działają one dobrze z YV12 i YUY2. Poprzednie wersje, z 4.1.0 włącznie, wywalały się na YV12. Jeżeli napotkasz na dziwne działanie używając -vo xv, spróbuj SDL (także ma XVideo) i zobacz, czy to pomaga. Dokładniejsze instrukcje są w sekcji SDL.
LUB, spróbuj NOWEGO sterownika -vo tdfxfb! Zajrzyj do sekcji tdfxfb
S3 Savage3D powinny działać. Jeżeli masz Savage4 używaj XFree86 4.0.3 lub nowszego (gdyby występowały problemy z obrazem, spróbuj ustawić głębię kolorów na 16bpp). Jeżeli chodzi o S3 Virge: obsługuje ona Xv, ale jest bardzo wolna, więc najlepiej ją sprzedaj.
Teraz dostępny jest natywny sterownik bufora ramek (framebuffer) dla kart S3 Virge, podobny do tdfxfb. Ustaw swój bufor ramek (np. dodaj "vga=792 video=vesa:mtrr" do parametrów swojego kernela) i używaj -vo s3fb (-vf yuy2 i -dr także mogą okazać się przydatne).
Obecnie niejasne jest, które modele kart Savage nie mają sprzętowej obsługi YV12 i robią to programowo (co jest wolne). Jeżeli podejrzewasz o to swoją kartę, zdobądź nowsze sterowniki, lub grzecznie poproś o sterownik z obsługą MMX/3DNow! na liście dyskusyjnej MPlayer-users.
nVidia nie zawsze jest dobrym wyborem dla Linuksa ... Sterownik XFree86 o otwartych źródłach obsługuje większość tych kart, lecz w niektórych wypadkach będziesz zmuszony używać binarnych sterowników o zamkniętych źródłach (do pobrania ze strony nVidii). Jeżeli chcesz uzyskać przyspieszenie 3D to zawsze będziesz potrzebować tych sterowników.
karty Riva 128 nie obsługują XVideo nawet ze sterownikami nVidii :( Zażalenia składaj do nVidii.
Jednakże MPlayer zawiera sterownik VIDIX obsługujący większość kart nVidia. Obecnie znajduje się w stadium beta i ma pewne ograniczenia. Więcej informacji znajdziesz w sekcji nVidia VIDIX.
Sterowniki GATOS (których powinieneś używać, chyba że masz Rage128 lub Radeon) mają standardowo włączone VSYNC. Znaczy to, że szybkość dekodowania (!) jest zsynchronizowana z częstotliwością odświeżania obrazu. Jeżeli odtwarzanie wydaje Ci się powolne, spróbuj w jakiś sposób wyłączyć VSYNC, lub ustaw częstotliwość odświeżania na n*(fps filmu) Hz.
Radeon VE - jeżeli potrzebujesz X, używaj XFree86 4.2.0 lub nowszego. Brak obsługi wyjścia TV. Oczywiście w MPlayerze możesz uzyskać przyśpieszane wyświetlanie, z lub bez wyjścia TV. Żadne biblioteki czy X nie są do tego potrzebne. Poczytaj sekcję o VIDIX.
Te karty można znaleźć w wielu laptopach. Musisz używać XFree86 4.3.0 lub nowszych, lub sterowników Stefana Seyfried'a obsługujących Xv. Po prostu wybierz ten, który pasuje do Twojej wersji XFree86.
XFree86 4.3.0 zawierają obsługę Xv, lecz Bohdan Horst wysłał małą łatkę na źródła XFree86, która przyśpiesza operacje na buforze ramki (framebuffer) nawet czterokrotnie. Ta łatka została uwzględniona w XFree86 CVS i powinna znaleźć się w następnej wersji po 4.3.0
Aby umożliwić odtwarzanie zawartości o rozmiarach DVD zmodyfikuj swój XF86Config w następujący sposób:
Section "Device"
[...]
Driver "neomagic"
Option "OverlayMem" "829440"
[...]
EndSection
Jeżeli chcesz używać Xv z kartą Trident, to jeśli nie działa z 4.1.0, zainstaluj XFree 4.2.0. 4.2.0 obsługuje pełnoekranowe Xv w karcie Cyberblade XP.
Alternatywą jest sterownik VIDIX dla karty Cyberblade/i1.
Jeżeli chcesz używać Xv z kartą opartą na Kyro (na przykład Hercules Prophet 4000XT), powinieneś ściągnąć sterowniki ze strony PowerVR.
WSTĘP. Celem tego dokumentu jest wyjaśnienie w kilku słowach, czym ogólnie jest DGA i co może zrobić sterownik do MPlayera (i czego nie może).
CO TO JEST DGA.
DGA to skrót od Direct Graphics Access
(Bezpośredni Dostęp do Grafiki) i jest dla programu sposobem
ominięcia serwera X i bezpośrednią modyfikację pamięci bufora ramki
(framebuffer). Technicznie mówiąc, działa to w ten sposób,
że pamięć bufora ramki mapowana jest na zakres pamięci Twojego procesu.
Jądro pozwala na to tylko gdy masz prawa administratora (superuser).
Możesz je uzyskać logując się jako
root
lub ustawiając bit SUID
na pliku wykonywalnym MPlayera
(nie zalecane).
Istnieją dwie wersje DGA: DGA1 używane przez XFree 3.x.x i DGA2, które pojawiło się w XFree 4.0.1.
DGA1 zapewnia jedynie bezpośredni dostęp do bufora ramki, w sposób opisany powyżej. Aby zmienić rozdzielczość sygnału video będziesz musiał polegać na rozszerzeniu XVidMode.
DGA2 łączy cechy rozszerzenia XVidMode z możliwością zmiany głębi wyświetlania, więc możesz mając uruchomiony serwer X w 32 bitowej głębi przełączać się na 15 bitów i vice versa.
Jednakże DGA ma pewne wady. Jest poniekąd zależne od układu graficznego jakiego używasz, a także od implementacji sterownika video (w serwerze X) sterującego układem. Nie działa to więc na każdym systemie...
INSTALOWANIE OBSŁUGI DGA W MPLAYERZE. Przede wszystkim upewnij się, że X ładuje rozszerzenie DGA. Spójrz na /var/log/XFree86.0.log:
(II) Loading extension XFree86-DGA
XFree86 4.0.x lub nowsze jest wysoce wskazane! Sterownik DGA MPlayera jest wykrywany automatycznie przez ./configure. Możesz także wymusić jego obsługę poprzez --enable-dga.
Jeżeli sterownik nie mógł przełączyć się na niższą rozdzielczość, poeksperymentuj z opcjami -vm (tylko w X 3.3.x), -fs, -bpp, -zoom aby znaleźć tryb wyświetlania, który odpowiada filmowi. Na razie nie ma żadnego konwertera :(
Stań się użytkownikiem root
.
DGA wymaga praw superużytkownika, aby móc zapisywać bezpośrednio do pamięci video.
Jeżeli chcesz posługiwać się DGA jako zwykły użytkownik, zainstaluj
MPlayera w trybie SUID root:
chown root/usr/local/bin/mplayer
chmod 750/usr/local/bin/mplayer
chmod +s/usr/local/bin/mplayer
Teraz DGA działa także dla zwykłego użytkownika.
To jest poważne zagrożenie bezpieczeństwa! Nigdy nie rób tego na serwerze, ani na komputerze dostępnym dla innych osób, ponieważ mogą one zdobyć prawa roota poprzez MPlayera z ustawionym SUID root.
Teraz użyj opcji -vo dga i już! (mam nadzieję:) Powinieneś także spróbować czy działa u Ciebie opcja -vo sdl:driver=dga! Jest wiele szybsza!
ZMIANA ROZDZIELCZOŚCI. Sterownik DGA zezwala na zmianę rozdzielczości sygnału wyjściowego. Eliminuje to potrzebę (wolnego) programowego skalowania i równocześnie zapewnia wyświetlanie pełnoekranowe. W warunkach idealnych rozdzielczość zostałaby zmieniona na dokładnie taką samą (z zachowaniem formatu obrazu) jak dane video, ale serwer X pozwala stosować tylko tryby predefiniowane w /etc/X11/XF86Config (/etc/X11/XF86Config-4 dla XFree 4.X.X). Są one definiowane przez tak zwane "modelines" (wiersze trybów) i zależą od możliwości Twojego sprzętu. serwer X skanuje przy starcie ten plik konfiguracyjny i wyłącza tryby nie pasujące do Twojego sprzętu. Aby się dowiedzieć, które tryby przetrwały ten proces sprawdź plik /var/log/XFree86.0.log.
Te wpisy działają z układem Riva128, przy użyciu modułu sterownika nv.o (moduł serwera X):
Section "Modes" Identifier "Modes[0]" Modeline "800x600" 40 800 840 968 1056 600 601 605 628 Modeline "712x600" 35.0 712 740 850 900 400 410 412 425 Modeline "640x480" 25.175 640 664 760 800 480 491 493 525 Modeline "400x300" 20 400 416 480 528 300 301 303 314 Doublescan Modeline "352x288" 25.10 352 368 416 432 288 296 290 310 Modeline "352x240" 15.750 352 368 416 432 240 244 246 262 Doublescan Modeline "320x240" 12.588 320 336 384 400 240 245 246 262 Doublescan EndSection
DGA i MPLAYER. DGA jest używane w dwóch miejscach w MPlayerze: można go używać przez sterownik SDL (-vo sdl:driver=dga) oraz bezpośrednio przez sterownik DGA (-vo dga). To, co zostało napisane powyżej, jest prawdziwe dla obu; w następnych sekcjach wyjaśnię, jak działa sterownik DGA dla MPlayera.
WŁASNOŚCI. Sterownik DGA wywoływany jest poprzez podanie -vo dga w wierszu poleceń. Standardowym zachowaniem jest zmiana rozdzielczości na jak najbardziej pasującą do obrazu. Świadomie ignorowane są opcje -vm i -fs (zmiana trybu wyświetlania oraz wyświetlanie pełnoekranowe) - sterownik zawsze próbuje pokryć jak największą powierzchnię ekranu poprzez zmianę trybu wyświetlania, dzięki temu nie marnuje mocy procesora na skalowanie obrazu. Jeżeli nie podoba Ci się dobrany tryb, możesz sam go określić, korzystając z opcji -x oraz -y. Jeżeli podasz opcję -v, sterownik DGA wyświetli między innymi listę wszystkich obsługiwanych w tej chwili trybów, dostępnych w Twoim pliku konfiguracyjnym XF86Config. Mając DGA2 możesz zmusić je także do wyświetlania obrazu w określonej głębi, używając opcji -bpp. Prawidłowymi głębiami są 15, 16, 34 i 32. Od Twojego sprzętu zależy, czy są one obsługiwane natywnie, czy też dokonywana jest konwersja (możliwe, że powolna).
Jeżeli jesteś takim szczęśliwcem, że masz wystarczająco dużo pamięci pozaekranowej (offscreen memory) aby zmieścił się tam cały obraz, sterownik DGA użyje podwójnego buforowania. Efektem będzie płynniejsze odtwarzanie filmu. Sterownik poinformuje Cię czy podwójne buforowanie jest włączone czy nie.
Podwójne buforowanie oznacza, że następna ramka Twojego filmu jest rysowana w pamięci pozaekranowej w czasie gdy obecna ramka jest wyświetlana. Gdy następna ramka będzie gotowa, układ graficzny zostanie poinformowany o lokalizacji nowej ramki w pamięci i po prostu sięgnie tam po dane aby je wyświetlić. W międzyczasie poprzedni bufor w pamięci zostanie ponownie wypełniony kolejnymi danymi video.
Podwójne buforowanie może być włączane opcją -double oraz może być wyłączane opcją -nodouble. Obecnie standardowym zachowaniem jest wyłączone podwójne buforowanie. Jeśli używasz sterownika DGA wyświetlanie OSD (On Screen Display - wyświetlanie na ekranie) działa wyłącznie z włączonym podwójnym buforowaniem. Jednakże włączenie podwójnego buforowania może zaowocować dużym spadkiem szybkości (na moim K6-II+ 525 używało dodatkowe 20% czasu procesora!) w zależności od implementacji DGA dla Twojego sprzętu.
KWESTIA SZYBKOŚCI. Ogólnie rzecz biorąc, dostęp do bufora ramki poprzez DGA powinien być przynajmniej tak szybki, jak podczas używania sterownika X11, z dodatkową korzyścią uzyskania pełnoekranowego obrazu. Procentowe wartości szybkości wyświetlane przez MPlayera należy interpretować ostrożnie. Na przykład przy korzystaniu ze sterownika X11 nie jest uwzględniany czas potrzebny serwerowi X na rysowanie. Podłącz terminal do portu szeregowego swojego komputera i uruchom top aby zobaczyć co się na prawdę dzieje w Twoim komputerze.
Generalnie przyśpieszenie przy używaniu DGA w stosunku do "normalnego" używania X11 bardzo zależy od Twojej karty graficznej i od tego, jak dobrze zoptymalizowany jest moduł do serwera X.
Jeżeli masz wolny system, lepiej używaj 15 lub 16 bitowej głębi kolorówi, ponieważ wymaga ona tylko połowy przepustowości pamięci w porównaniu do głębi 32 bitowej.
Używanie 24 bitowej głębi jest dobrym pomysłem, nawet jeśli Twoja karta natywnie obsługuje tylko 32 bitową głębię, ponieważ 24 bitowa głębia przesyła 25% mniej danych w porównaniu do w pełni 32 bitowego trybu.
Widziałem pewne pliki AVI odtwarzane na Pentium MMX 266. Na AMD K6-2 powinno działać od 400MHz.
ZNANE BŁĘDY. Według niektórych deweloperów XFree DGA jest niezłą bestią. Mówią oni, że lepiej go nie używać, ponieważ jego implementacja nie zawsze jest bezbłędna dla każdego sterownika XFree.
Istnieje błąd związany z XFree 4.0.3 i sterownikiem nv.o objawiający się dziwnymi kolorami.
Sterowniki ATI wymagają wielokrotnego przełączania trybu po użyciu DGA.
Niektóre sterowniki po prostu nie wracają do normalnej rozdzielczości (użyj Ctrl+Alt+Keypad + oraz Ctrl+Alt+Keypad - aby przełączać się ręcznie).
Niektóre sterowniki wyświetlają dziwne kolory.
Niektóre sterowniki kłamią na temat rozmiaru pamięci, którą mapują na przestrzeń adresową procesu. Przez to vo_dga nie będzie używać podwójnego buforowania (SIS?).
Niektóre sterowniki nie zwracają żadnego poprawnego trybu. W tym wypadku sterownik DGA się wywali mówiąc Ci o bezsensownym trybie 100000x100000 (lub podobnym).
OSD działa tylko z włączonym podwójnym buforowaniem (w przeciwnym razie migocze).
SDL (Simple Directmedia Layer) jest w gruncie rzeczy
zunifikowanym interfejsem video/audio.
Programy, które go używają, wiedzą tylko o SDL,
a nie o sterownikach audio lub video, których używa SDL.
Na przykład port Dooma używający SDL może działać korzystając z
svgalib, aalib, X, fbdev i innych, musisz tylko określić (na przykład)
sterownik video, którego chcesz użyć.
Wybór następuje poprzez zmienną środowiskową SDL_VIDEODRIVER
.
No, teoretycznie.
W MPlayerze używaliśmy programowego skalowania sterownika SDL dla X11, dla kart/sterowników, które nie obsługują XVideo, dopóki nie zrobiliśmy własnego (szybszego, lepszego) programowego skalowania. Używaliśmy także jego wyjścia aalib, ale teraz mamy własny sterownik, który jest wygodniejszy. Jego tryb DGA był lepszy od naszego... aż do niedawna. Rozumiesz już? :)
Pomaga także z niektórymi wadliwymi sterownikami/kartami w przypadku, gdy odtwarzanie kuleje (nie z powodu wolnego systemu) lub gdy dźwięk jest opóźniony.
Wyjście video SDL obsługuje wyświetlanie napisów pod filmem, na czarnym pasku (jeżeli obecny).
INSTALACJA. Będziesz musiał zainstalować svgalib i jej pakiet rozwojowy, aby MPlayer zbudował swój własny sterownik SVGAlib (automatycznie wykrywane, lecz można wymusić). Nie zapomnij przerobić /etc/vga/libvga.config, tak aby svgalib współdziałało z Twoją kartą i monitorem.
Nie używaj opcji -fs ponieważ włącza ona skalowanie programowe, które jest powolne. Jeżeli naprawdę tego potrzebujesz, używaj opcji -sws 4, która produkuje obraz złej jakości, ale jest nieco szybsza.
OBSŁUGA EGA (4BPP). SVGAlib zawiera EGAlib i MPlayer może wyświetlać każdy film w 16 kolorach. Użyteczne jest to w następujących zestawieniach:
karta EGA z monitorem EGA: 320x200x4bpp, 640x200x4bpp, 640x350x4bpp
karta EGA z monitorem CGA: 320x200x4bpp, 640x200x4bpp
bpp (bity na piksel) musi być ręcznie ustawione na 4: -bpp 4
Film prawdopodobnie musi być przeskalowany tak, aby pasował do trybu EGA:
-vf scale=640:350
lub
-vf scale=320:200
Aby to osiągnąć, musimy sięgnąć po metodę skalowania szybką, lecz złej jakości:
-sws 4
Możliwe, że trzeba wyłączyć automatyczną korekcję proporcji obrazu:
-noaspect
Z praktyki wiem, że najlepszą jakość obrazu na ekranach EGA można osiągnąć poprzez lekkie zmniejszenie jasności: -vf eq=-20:0. Musiałem także zmniejszyć częstotliwość próbkowania, ponieważ dźwięk 44kHz był popsuty: -srate 22050.
OSD i napisy możesz włączyć tylko przy pomocy filtru expand. Dokładne parametry znajdziesz na stronie man.
./configure automatycznie wykrywa, czy zbudować wyjście FBdev. Więcej informacji znajdziesz w dokumentacji bufora ramki w źródłach jądra (Documentation/fb/*).
Jeżeli Twoja karta nie obsługuje standardu VBE 2.0 (starsze karty ISA/PCI, takie jak S3 Trio64), lecz VBE 1.2 (lub starsze?): cóż, pozostaje VESAfb, ale będziesz musiał załadować SciTech Display Doctor (dawniej UniVBE) przed zabootowaniem Linuksa. Użyj dyskietki startowej DOS lub czegoś innego. Nie zapomnij zarejestrować swojej kopii UniVBE ;))
Wyjście FBdev przyjmuje kilka dodatkowych parametrów:
Określa urządzanie bufora ramki, którego użyć (domyślnie: /dev/fb0)
Nazwa trybu do użycia (zgodnie z /etc/fb.modes)
Plik konfiguracyjny trybów (domyślnie: /etc/fb.modes)
ważne wartości, patrz example.conf
Jeżeli chcesz się przełączyć na określony tryb, użyj
mplayer -vm -fbmodenazwa_trybu
nazwa_pliku
Samo -vm wybierze najbardziej odpowiedni tryb z /etc/fb.modes. Można użyć także wraz z opcjami -x oraz -y. Opcja -flip jest obsługiwana wyłącznie gdy format (pixel format) filmu pasuje do formatu (pixel format) obrazu. Zwróć uwagę na wartość bpp. Sterownik fbdev próbuje użyć bieżącej wartości, chyba że użyjesz opcji -bpp.
Opcja -zoom nie jest obsługiwana (użyj -vf scale). Nie możesz używać trybów 8bpp (lub mniej).
Możesz chcieć wyłączyć kursor:
echo -e '\033[?25l'
lub
setterm -cursor off
oraz wygaszacz ekranu:
setterm -blank 0
Aby z powrotem włączyć kursor:
echo -e '\033[?25h'
lub
setterm -cursor on
Zmiana trybów FBdev nie działa z buforem ramki VESA, i nie proś o to, ponieważ nie jest to ograniczenie MPlayera.
Ta sekcja traktuje o obsłudze układu BES (Back-End Scaler) na kartach
Matrox G200/G400/G450/G550 przez sterownik
mga_vid
z jądra.
Ma on sprzętowy VSYNC z potrójnym buforowaniem.
Działa na konsoli framebuffer oraz w X.
Tylko dla Linuksa! Na systemach nie-Linuksowych (testowane na FreeBSD) używaj zamiast tego VIDIX!
Instalacja
Przed użyciem musisz skompilować mga_vid.o:
cd drivers make
Następnie stwórz urządzenie (device) /dev/mga_vid:
mknod /dev/mga_vid c 178 0
oraz załaduj sterownik poprzez:
insmod mga_vid.o
Powinieneś sprawdzić rozmiar wykrywanej pamięci używając polecenia dmesg. Jeżeli zwracana wartość jest zła użyj opcji: mga_ram_size (najpierw rmmod mga_vid), podaj rozmiar pamięci na karcie (w MB):
insmod mga_vid.o mga_ram_size=16
Aby moduł był ładowany/usuwany automatycznie w razie potrzeby: najpierw wstaw następujący wiersz na końcu /etc/modules.conf:
alias char-major-178 mga_vid
Następnie skopiuj moduł mga_vid.o
we właściwe miejsce w /lib/modules/wersja jądra
/gdzieś
.
Po czym uruchom
depmod -a
Teraz musisz (ponownie) skompilować MPlayera, ./configure wykryje /dev/mga_vid i zbuduje sterownik "mga". Używanie go w MPlayerze uzyskuje się poprzez -vo mga jeżeli masz konsolę matroxfb, lub -vo xmga pod XFree86 3.x.x lub 4.x.x.
Sterownik mga_vid współpracuje z Xv.
Plik urządzenia (device file) /dev/mga_vid może być odczytywany aby uzyskać pewne informacje, na przykład poprzez
cat /dev/mga_vid
i można do niego pisać, by zmienić jasność:
echo "brightness=120" > /dev/mga_vid
Ten sterownik używa bufora ramki tdfx w jądrze aby odtwarzać filmy z przyśpieszeniem YUV. Będziesz potrzebował jądra z obsługą tdfxfb. Będziesz także musiał odpowiednio skompilować MPlayera.
./configure --enable-tdfxfb
MPlayer obsługuje wyświetlanie filmów używając OpenGL, lecz jeśli Twoja platforma/sterownik obsługuje Xv, jak powinno być w przypadku PeCetów z Linuksem, używaj Xv. Wydajność OpenGL jest znacząco mniejsza. Jeżeli masz implementację X11 bez obsługi Xv, OpenGL jest sensowną alternatywą.
Niestety nie wszystkie sterowniki to obsługują. Sterowniki Utah-GLX (dla XFree86 3.3.6) obsługują to w każdej karcie. Szczegóły ich instalacji dostępne są na stronie http://utah-glx.sf.net.
XFree86(DRI) 4.0.3 i nowsze obsługują OpenGL w kartach Matrox i Radeon, 4.2.0 i nowsze obsługują Rage128. Na http://dri.sf.net znajdziesz instrukcję ściągania i instalacji.
Podpowiedź od jednego z naszych użytkowników: wyjście video GL może być użyte aby uzyskać wyjście TV z vsync. Będziesz musiał ustawić zmienną środowiskową (przynajmniej dla nVidia):
export __GL_SYNC_TO_VBLANK=1
AAlib jest biblioteką do wyświetlania grafiki w trybie tekstowym, używając potężnego silnika renderującego ASCII. Istnieje wiele programów już ją obsługujących, takich jak Doom, Quake, etc. MPlayer zawiera świetnie działający sterownik. Jeżeli ./configure wykryje zainstalowane aalib, zostanie zbudowany sterownik aalib libvo.
Możesz używać następujących klawiszy w oknie AA, aby zmienić opcje renderowania:
Klawisz | Akcja |
---|---|
1 | zmniejsz kontrast |
2 | zwiększ kontrast |
3 | zmniejsz jasność |
4 | zwiększ jasność |
5 | włącz/wyłącz szybkie renderowanie |
6 | ustaw tryb ditheringu (brak, error distribution, Floyd Steinberg) |
7 | odwróć obraz |
8 | przełączanie kontroli między aa i MPlayerem |
Następujące opcje mogą być użyte w wierszu poleceń:
V
zmiana koloru OSD
V
Zmiana koloru napisów
gdzie V
jest jednym z:
0
(normalny),
1
(ciemny),
2
(pogrubiony),
3
(pogrubiona czcionka),
4
(odwrócony),
5
(specjalny).
AAlib samo w sobie ma wiele opcji. Poniżej znajduje się kilka ważniejszych:
Ustawia sugerowany sterownik aa (X11, curses, Linux)
Używa wszystkich 256 znaków.
Używa 8-bitowego ASCII
Wyświetla wszystkie opcje aalib
Renderowanie bardzo obciąża CPU, zwłaszcza przy użyciu AA-on-X (aalib w X), a zajmuje mniej CPU na standardowej, nie-framebufferowej konsoli. Użyj SVGATextMode, aby ustawić duży tryb tekstowy i baw się dobrze! (drugi monitor z kartą Hercules wymiata:)) (ale moim skromnym zdaniem możesz użyć opcji -vf 1bpp aby uzyskać grafikę na hgafb:)
Użyj opcji -framedrop, jeżeli Twój komputer nie jest na tyle szybki, aby wyrenderować wszystkie ramki!
Odtwarzając w terminalu osiągniesz lepszą szybkość i jakość używając sterownika
Linux, a nie curses (-aadriver linux).
Jednakże będziesz potrzebował praw zapisu na
/dev/vcsa<terminal>
!
Nie jest to wykrywane automatycznie przez aalib, ale vo_aa próbuje
znaleźć najlepszy tryb. Spójrz na
http://aa-project.sf.net/tune,
jest tam więcej informacji o dostrajaniu.
Biblioteka libcaca
jest bibiloteką produkującą tekst zamiast pikseli, może więc pracować na
starszych kartach graficznych oraz terminalach tekstowych. Jest podobna do
słynnej biblioteki AAlib
.
libcaca
potrzebuje do pracy terminalu,
powinna więc działać na wszystkich systemach Uniksowych (włącznie z Mac OS X),
używając biblioteki
slang
lub biblioteki
ncurses
, w DOSie używając biblioteki
conio.h
i w systemach Windowsowych
używając slang
lub
ncurses
(poprzez emulację Cygwin) bądź
conio.h
. Jeżeli
./configure
wykryje libcaca
, to zostanie zbudowany
sterownik caca libvo.
Różnice między AAlib
są
następujące:
16 dostępnych kolorów na wyjściu znakowym (256 par kolorów)
dirthering obrazu kolorowego
Lecz libcaca
ma także
następujące ograniczenia:
brak obsługi jasności, kontrastu, gammy
Aby zmienić opcje renderowania, możesz użyć następujących klawiszy w oknie caca:
Klawisz | Akcja |
---|---|
d |
Przełączanie metod ditheringu libcaca .
|
a |
Przełączanie anyaliasingu (wygładzania)
libcaca .
|
b |
Przełączanie tła libcaca .
|
libcaca
będzie także szukać
następujących zmiennych środowiskowych:
Ustawia zalecany sterownik caca, np. ncurses, slang, x11.
Określa liczbę wierszy i kolumn, np. 128x50.
Określa jakiej użyć czcionki, np. fixed, nexus.
Jeżeli Twój komputer nie jest wystarczająco szybki, aby renderować wszystkie ramki, użyj opcji -framedrop.
Ten sterownik został zaprojektowany i napisany jako ogólny sterownik dla dowolnej karty, która ma BIOS zgodny z VESA VBE 2.0. Inną zaletą tego sterownika jest to, że próbuje on wymusić włączenie wyjścia TV. VESA BIOS EXTENSION (VBE) Version 3.0, z dnia 16 września 1998 (Strona 70) mówi:
Podwójne kontrolery (Dual-Controller Designs). VBE 3.0 obsługuje podwójne kontrolery zakładając, że zwykle obydwa kontrolery są dostarczane przez tego samego OEM, pod kontrolą pojedynczego ROM BIOSu na karcie graficznej. Jest możliwe ukrycie przed aplikacją, że obecne są dwa kontrolery. Ograniczeniem tego jest brak możliwości równoczesnego używania niezależnych kontrolerów, ale pozwala aplikacjom wypuszczonym przed VBE 3.0 na normalne działanie. Funkcja VBE 00h (zwróć informację o kontrolerze) zwraca połączone informacje o obydwóch kontrolerach, włącznie z połączoną listą dostępnych trybów. Gdy aplikacja wybiera tryb, włączany jest odpowiedni kontroler. Każda z pozostałych funkcji VBE operuje później na aktywnym kontrolerze.
Są więc szanse, że używając tego sterownika uzyskasz działające wyjście TV. (Zgaduję, że często wyjście TV jest samodzielnym układem (standalone head), lub przynajmniej samodzielnym wyjściem.)
ZALETY
Jest szansa, że będziesz mógł oglądać filmy nawet, gdy Linux nie wie, jakiego sprzętu używasz.
Nie ma potrzeby instalowania jakichkolwiek rzeczy związanych z grafiką (takich jak X11 (AKA XFree86), fbdev i tak dalej) na Twoim Linuksie. Ten sterownik można uruchamiać z trybu tekstowego.
Jest szansa że uzyskasz działające wyjście TV. (Jest tak przynajmniej w przypadku kart ATI).
Ten sterownik wywołuje procedurę obsługi przerwania 10h
(int 10h
handler), nie jest więc emulatorem -
odwołuje się do rzeczywistych rzeczy
rzeczywistego BIOSu w
trybie rzeczywistym (real-mode). (tak naprawdę,
to w trybie vm86, ale działa równie szybko).
Możesz używać VIDIX, uzyskując przez to przyśpieszone wyświetlanie video oraz wyjście TV w tym samym czasie! (Zalecane dla kart ATI.)
Jeżeli masz VESA VBE 3.0+ i określiłeś gdzieś monitor-hfreq, monitor-vfreq, monitor-dotclock (w pliku konfiguracyjnym lub w wierszu poleceń), uzyskasz najwyższą możliwą częstotliwość odświeżania (Używając General Timing Formula (Ogólnej Formuły Taktowania)). Aby to włączyć, musisz określić wszystkie opcje monitora.
WADY
Działa tylko na systemach x86.
Może być używane tylko przez użytkownika
root
.
Obecnie jest dostępne tylko dla Linuksa.
Nie używaj tego sterownika wraz z GCC 2.96! Nie będzie działać!
OPCJE WIERSZA POLECEŃ DLA VESA
opts
obecnie rozpoznawane: dga
, aby wymusić tryb dga oraz
nodga
, aby wyłączyć tryb dga. W trybie dga możesz
włączyć podwójne buforowanie
opcją -double. Informacja: możesz pominąć
te parametry, aby włączyć automatyczne wykrywanie
trybu dga.
ZNANE PROBLEMY I ICH OBEJŚCIA
Jeżeli zainstalowałeś czcionkę NLS (Native Language Support - Obsługa Języka Rodzimego) w swoim Linuksie i używasz sterownika VESA z trybu tekstowego to po zakończeniu MPlayera będziesz miał załadowaną czcionkę ROM zamiast narodowej. Możesz z powrotem załadować czcionkę narodową używając na przykład narzędzia setsysfont z dystrybucji Mandrake/Mandriva. (Podpowiedź: To samo narzędzie jest używane do lokalizacji fbdev).
Niektóre Linuksowe sterowniki grafiki nie aktualizują aktywnego trybu BIOS w pamięci DOS. Więc jeżeli masz taki problem - zawsze używaj trybu VESA tylko z trybu tekstowego. W przeciwnym wypadku tryb tekstowy (#03) i tak będzie włączany i będziesz musiał restartować komputer.
Często po zakończeniu pracy sterownika VESA dostajesz czarny ekran. Aby przywrócić ekran do stanu oryginalnego po prostu przełącz się na inną konsolę (wciskając Alt+F<x>) po czym przełącz się z powrotem na poprzednią konsolę w ten sam sposób.
Aby uzyskać działające wyjście TV musisz mieć podłączony odbiornik TV przed włączeniem swojego PC, ponieważ video BIOS inicjalizuje się tylko podczas procedury POST
Unikaj, jeśli to możliwe. Wyjście na X11 (używa rozszerzenia współdzielonej pamięci) nie używa żadnego przyśpieszania sprzętowego. Obsługuje (przyśpieszane przez MMX/3DNow/SSE, lecz ciągle wolne) skalowanie programowe. Użyj opcji -fs -zoom. Większość kart ma obsługę sprzętowego skalowania, warto więc użyć dla nich opcji -vo xv lub -vo xmga dla kart Matrox.
Problemem jest to, że sterowniki do większości kart nie obsługują sprzętowego przyśpieszenia na wyjściu na drugi monitor (second head)/TV. W takim przypadku widać zielone/niebieskie okno zamiast filmu. To tutaj przydaje się ten sterownik, lecz potrzebujesz potężnego CPU aby używać programowego skalowania. Nie używaj programowego wyjścia SDL + skalowania, jakość obrazu jest o wiele gorsza!
Skalowanie programowe jest bardzo wolne, lepiej spróbuj zmienić tryb video. Jest to bardzo proste. Spójrz na wiersze trybów sekcji DGA i wstaw je do swojego XF86Config.
Jeżeli masz 4.x.x: użyj opcji -vm. Zmieni ona rozdzielczość na taką jaką ma twój film. Jeżeli nie:
W XFree86 3.x.x: musisz poruszać się po dostępnych rozdzielczościach poprzez kombinacje klawiszy Ctrl+Alt+Keypad + oraz Ctrl+Alt+Keypad -.
Jeżeli nie możesz znaleźć trybów, które wstawiłeś, przeszukaj komunikaty XFree86. Niektóre sterowniki nie mogą używać niskich pixelclock (częstotliwości taktowania układu RAMDAC), które są wymagane dla trybów o niskiej rozdzielczości.
WSTĘP. VIDIX jest skrótem od VIDeo Interface for *niX (Interfejs VIDeo dla *niXów). VIDIX został zaprojektowany i napisany jako interfejs dla szybkich sterowników działających w przestrzeni użytkownika (user-space), zapewniających taką samą wydajność, jak mga_vid dla kart Matrox. Jest także wysoce przenośny (portable).
Ten interfejs został zaprojektowany jako próba dopasowania istniejących interfejsów przyśpieszanego video (znanych jako mga_vid, rage128_vidm radeon_vid, pm3_vid) do ustalonego schematu. Zapewnia wysokopoziomowy interfejs dla układów znanych jako BES (BackEnd Scalers) lub OV (Video Overlay - nakładka video). Nie zapewnia on niskopoziomowego interfejsu do tworów znanych jako serwery grafiki. (nie chcę współzawodniczyć z zespołem X11 w przełączaniu trybów graficznych). Innymi słowy, głównym celem tego interfejsu jest maksymalizacja szybkości odtwarzania video.
ZASTOSOWANIE
Możesz używać samodzielnego sterownika wyjścia video: -vo xvidix. Ten sterownik został stworzony jako interfejs X11 dla technologii VIDIX. Wymaga serwera X i może pracować tylko pod nim. Zwróć uwagę na to, że stosowany jest bezpośredni dostęp do sprzętu i omijany jest sterownik X, pixmapy przechowywane (cached) w pamięci karty mogą zostać uszkodzone. Możesz temu zapobiec ograniczając ilość używanej przez X pamięci poprzez opcję "VideoRam" w sekcji "device". Powinieneś ustawić to na rozmiar pamięci na karcie minus 4MB. Jeżeli masz mniej niż 8MB pamięci video (video RAM), możesz użyć zamiast tego opcji "XaaNoPixmapCache" w sekcji "screen".
Istnieje konsolowy sterownik VIDIX: -vo cvidix. Wymaga on dla większości kart działającego i zainicjalizowanego bufora ramki (albo po prostu zapaskudzisz sobie ekran). Otrzymasz podobny efekt jak przy -vo mga lub -vo fbdev. Jednakże karty nVidia są zdolne do wyświetlania w pełni graficznego obrazu w konsoli całkowicie tekstowej. Więcej informacji znajdziesz w sekcji nvidia_vid. Żeby pozbyć się tekstu na ramkach i mrugającego kursora, wypróbuj coś w rodzaju
setterm -cursor off > /dev/tty9
(zakładając, że do tej pory nie używałeś tty9
)
a potem przełącz się na tty9
.
Z drugiej strony, -colorkey 0 powinno dać video odtwarzające
się "w tle", chociaż działanie tego zależy od prawidłowego funkcjonowania
koloru kluczowego.
Możesz użyć podurządzenia (subdevice) VIDIX, które zostało dodane do rozmaitych sterowników wyjścia video, takich jak: -vo vesa:vidix (tylko Linux) oraz -vo fbdev:vidix.
W rzeczywistości nie ma znaczenia, który sterownik wyjścia video jest używany z VIDIX.
WYMAGANIA
Karta graficzna powinna pracować w trybie graficznym (z wyjątkiem kart nVidia z w/w sterownikiem wyjścia -vo cvidix).
Sterownik wyjścia video MPlayera powinien znać aktywny tryb video, a także powinien być w stanie przekazać podurządzeniu VIDIX niektóre cechy serwera.
METODY UŻYWANIA. Gdy VIDIX używany jest jako podurządzenie (-vo vesa:vidix) konfiguracja trybu video jest dokonywana przez urządzenie wyjścia video (w skrócie vo_server). Możesz więc przekazać MPlayerowi takie same ustawienia jak dla vo_server. Dodatkowo rozumie on ustawienie -double jako globalnie widoczny parametr. (Zalecam używanie tego ustawienia z VIDIX przynajmniej dla kart ATI). Jeżeli chodzi o -vo xvidix, to obecnie rozpoznaje następujące opcje -fs -zoom -x -y -double.
Możesz także określić sterownik VIDIX jako trzeci podargument w wierszu poleceń:
mplayer -vo xvidix:mga_vid.so -fs -zoom -double plik.avi
lub
mplayer -vo vesa:vidix:radeon_vid.so -fs -zoom -double -bpp 32 plik.avi
Ale jest to niebezpieczne i nie powinieneś tego robić. W tym przypadku podany sterownik zostanie wymuszony i rezultat może być nieprzewidywalny (może zawiesić Twój komputer). Powinieneś to robić TYLKO, jeśli jesteś całkowicie pewien, że zadziała, a MPlayer nie robi tego automatycznie. Proszę, powiadom o tym deweloperów. Prawidłowym sposobem jest używanie VIDIX bez żadnych argumentów, aby umożliwić automatyczne wykrywanie sterownika.
Ponieważ VIDIX wymaga bezpośredniego dostępu do sprzętu, musisz uruchamiać MPlayera jako root lub ustawić bit SUID na binarce MPlayera (Ostrzeżenie: Jest to zagrożenie bezpieczeństwa!). Alternatywnie możesz używać specjalnego modułu jądra, takiego jak ten:
Ściągnij rozwojową wersję svgalib (na przykład 1.9.17) LUB ściągnij stąd wersję stworzoną przez Alexa specjalnie do użytku z MPlayerem (nie potrzebuje ona do kompilacji źródeł svgalib)
Skompiluj moduł w katalogu svgalib_helper (jeżeli ściągnąłeś źródła ze strony svgalib to można go znaleźć wewnątrz katalogu svgalib-1.9.17/kernel/) i załaduj go (insmod).
Aby utworzyć odpowiednie urządzenia (devices) w katalogu /dev, wykonaj jako root
make device
w katalogu svgalib_helper.
Przenieś katalog svgalib_helper do mplayer/main/libdha/svgalib_helper.
Wymagane jeżeli ściągnąłeś źródła ze strony svgalib: usuń komentarz przed wierszem CFLAGS zawierający ciąg "svgalib_helper" z libdha/Makefile.
Przekompiluj i zainstaluj libdha
Obecnie większość kart ATI jest obsługiwana natywnie, od Mach64 do najnowszych Radeonów.
Są dwie skompilowanie binarki: radeon_vid dla Radeonów oraz rage128_vid dla kart Rage 128. Możesz wymusić jedną z nich lub pozwolić systemowi VIDIX na autodetekcję dostępnych sterowników.
Matrox G200, G400, G450 i G550 zgłoszono jako działające.
Sterownik obsługuje korektory (equalizery) video i powinien być prawie tak szybki jak bufor ramki Matrox
Jest dostępny sterownik dla układu Trident Cyberblade/i1, który można znaleźć na płytach głównych VIA Epia.
Sterownik ten został napisany przez (i jest pod opieką) Alastaira M. Robinsona.
Chociaż istnieje sterownik dla układów 3DLabs GLINT R3 oraz Permedia3, to nikt go nie testował (sprawozdania są mile widziane).
Unikalną cechą sterownika nvidia_vid jest jego zdolność do wyświetlania obrazu na zwykłej, czysto tekstowej konsoli - bez magicznych X, bufora ramki, czy czegokolwiek. W tym celu będziemy musieli użyć wyjścia video cvidix, jak w pokazuje poniższy przykład:
mplayer -vo cvidix przyklad.avi
"DirectFB jest biblioteką graficzną, która była tworzona z myślą o systemach typu embedded. Oferuje ona maksymalną przyśpieszaną sprzętowo wydajność przy minimalnym zużyciu zasobów i minimalnym narzucie biblioteki. " - cytat z http://www.directfb.org
Nie będę tu podawał cech DirectFB.
Chociaż MPlayer nie jest obsługiwany jako "dostawca video" dla DirectFB, ten sterownik wyjścia umożliwi odtwarzanie video poprzez DirectFB. Będzie ono - oczywiście - przyśpieszane. Na moim Matroksie G400 szybkość DirectFB była taka sama jak XVideo.
Zawsze próbuj używać najnowszej wersji DirectFB. Możesz używać opcji DirectFB w wierszu poleceń, używając opcji -dfbopts. Wyboru warstwy można dokonać metodą podurządzenia. Przykład: -vo directfb:2 (standardową jest warstwa -1 : autodetekcja)
Przeczytaj proszę główną sekcję DirectFB, znajdziesz tam ogólne informacje.
Ten sterownik wyjścia video włączy CRTC2 (na drugim wyjściu z karty) w kartach Matrox G400/G450/G550, wyświetlając obraz niezależnie od pierwszego wyjścia z karty.
Ville Syrjala ma na swojej stronie domowej README oraz HOWTO wyjaśniające, jak uruchomić wyjście TV DirectFB w kartach Matrox.
MPlayer obsługuje karty z układem Siemens DVB, od producentów takich, jak: Siemens, Technotrend, Galaxis czy Hauppauge. Najnowsze sterowniki DVB są dostępne na stronie Linux TV. Jeżeli chcesz programowego transkodowania, powinieneś dysponować procesorem z zegarem co najmniej 1GHz.
Configure powinien wykryć Twoją kartę DVB. Jeżeli tak się nie stało, możesz wymusić obsługę DVB używając
./configure --enable-dvb
Jeżeli Twoje nagłówki 'ost' znajdują się w niestandardowym miejscu, ustaw ścieżkę przy pomocy
./configure --extra-cflags=katalog ze źródłami DVB
/ost/include
Po czym skompiluj i zainstaluj jak zwykle.
ZASTOSOWANIE. Sprzętowego dekodowania (odtwarzanie standardowych plików MPEG-1/2) można dokonać tą komendą:
mplayer -ao mpegpes -vo mpegpes plik.mpg|vob
Programowe dekodowanie oraz transkodowanie różnych formatów do MPEG-1 można uzyskać używając polecenia podobnego do:
mplayer -ao mpegpes -vo mpegpestwójplik.roz
mplayer -ao mpegpes -vo mpegpes -vf expandtwójplik.roz
Zauważ, że karty DVB obsługują tylko rozdzielczość pionową równą 288 i 576 dla PAL oraz 240 i 480 dla NTSC. Musisz przeskalować obraz, dodając scale=szerokość:wysokość, z wybraną wysokością i szerokością do opcji -vf. Karty DVB akceptują różne szerokości, takie jak 720, 704, 640, 512, 480, 352 itp. i dokonują sprzętowego skalowania w kierunku horyzontalnym, więc w większości przypadków nie musisz skalować horyzontalnie. Dla MPEG-4 (DivX) 512x384 (proporcje 4:3) wypróbuj:
mplayer -ao mpegpes -vo mpegpes -vf scale=512:576
Jeżeli masz film w formacie panoramicznym i nie chcesz go skalować do pełnej wysokości, możesz użyć filtru expand=szer:wys aby dodać czarne paski. Aby wyświetlić MPEG-4 (DivX) 640x384, wypróbuj:
mplayer -ao mpegpes -vo mpegpes -vf expand=640:576 plik.avi
Jeżeli twój CPU jest za wolny na pełnowymiarowy MPEG-4 (DivX) 720x576, spróbuj przeskalować w dół:
mplayer -ao mpegpes -vo mpegpes -vf scale=352:576 plik.avi
Jeżeli to nie poprawiło szybkości, spróbuj także pionowego skalowania w dół:
mplayer -ao mpegpes -vo mpegpes -vf scale=352:288 plik.avi
Dla OSD i napisów użyj cechy OSD filtru expand. Zamiast expand=wys:szer lub expand=wys:szer:x:y, użyj więc expand=wys:szer:x:y:1 (piąty parametr :1 na końcu umożliwi renderowanie (wyświetlanie) OSD). Możesz chcieć przesunąć obraz trochę w górę, aby zyskać więcej miejsca na napisy. Możesz także chcieć przesunąć napisy w górę, jeżeli znajdują się poza ekranem TV, użyj opcji -subpos <0-100>, aby to dopasować (-subpos 80 jest dobrym wyborem).
Aby odtwarzać filmy z liczbą klatek na sekundę inną niż 25 na telewizorze PAL lub na wolnym CPU, dodaj opcję -framedrop.
Zachowanie proporcji plików MPEG-4 (DivX) oraz optymalne parametry skalowania (sprzętowe poziome i programowe pionowe z zachowaniem odpowiednich proporcji), można uzyskać przy użyciu nowego filtru dvbscale:
dla TV 4:3: -vf dvbscale,scale=-1:0,expand=-1:576:-1:-1:1 dla TV 16:9: -vf dvbscale=1024,scale=-1:0,expand=-1:576:-1:-1:1
Cyfrowa telewizja (moduł wejścia DVB). Możesz użyć swojej karty DVB do oglądania cyfrowej telewizji.
Powinieneś mieć zainstalowane programy scan oraz szap/tzap/czap/azap; wszystkie są w paczce ze sterownikami.
Sprawdź czy Twoje sterowniki działają prawidłowo używając programu takiego jak dvbstream (jest on podstawą modułu wejścia DVB).
Teraz powinieneś ułożyć plik ~/.mplayer/channels.conf zgodnie ze składnią akceptowaną przez szap/tzap/czap/azap lub kazać scan zrobić to za Ciebie.
Jeżeli masz kartę więcej niż jednego typu (np. ATSC, satelita, kablówka, z nadajnika naziemnego), to możesz zapisać swoje pliki kanałów jako: ~/.mplayer/channels.conf.sat (satelita), ~/.mplayer/channels.conf.ter (naziemna), ~/.mplayer/channels.conf.cbl (kablówka), oraz ~/.mplayer/channels.conf.atsc dając w ten sposób MPlayerowi wskazówkę aby używał tych plików zamiast ~/.mplayer/channels.conf, a Ty musisz tylko określić, której karty użyć.
Upewnij się, że w channels.conf masz tylko kanały niekodowane (Free to Air). W przeciwnym razie MPlayer będzie próbował przeskoczyć do następnego widzialnego kanału, lecz może to zająć trochę czasu jeżeli wystąpuje po sobie wiele kanałów kodowanych.
W polach audio i video możesz użyć rozszerzonej składni: ...:pid[+pid]:... (każdy maksymalnie dla 6 pidów); W tym przypadku MPlayer uwzględni w strumieniu wszystkie podane pidy, plus pid 0 (zawierający PAT). Zachęcamy do uwzględnienia w każdym wierszu pidu PMT (jeżeli go znasz) dla określanego kanału. Inne możliwe zastosowania: pid televideo, druga ścieżka dźwiękowa, itp.
Jeśli MPlayer często uskarża się na
Too many video/audio packets in the buffer
(za dużo pakietów video/audio w buforze) albo jeśli zauważysz rosnący brak synchronizacji między audio a video spróbuj użyć demuksera MPEG-TS z libavformat, dodając -demuxer lavf -lavfdopts probesize=128 do wiersza poleceń.
Aby wyświetlić pierwszy z kanałów obecnych na Twojej liście, uruchom
mplayer dvb://
Jeżeli chcesz oglądać określony kanał, na przykład R1, uruchom
mplayer dvb://R1
Jeżeli masz więcej niż jedną kartę, będziesz musiał określić numer karty, na której jest widoczny kanał (np. 2), korzystając z następującej składni:
mplayer dvb://2@R1
Aby przełączać kanały używaj klawiszy h (następny) oraz k (poprzedni) lub skorzystaj z menu OSD).
Jeżeli Twój ~/.mplayer/menu.conf zawiera wpis
<dvbsel>
, taki jak ten w przykładowym pliku
etc/dvb-menu.conf (którym możesz nadpisać
~/.mplayer/menu.conf), w menu głównym pokaże się
podmenu, które zezwoli Ci na wybór jednego kanału z obecnych w Twoim
channels.conf, możliwe, że poprzedzone menu z listą
dostępnych kart, jeżeli więcej niż jedna nadaje się do użytku
MPlayerem.
Jeżeli chcesz zapisać program (audycję) na dysku, użyj
mplayer -dumpfile r1.ts -dumpstream dvb://R1
Jeżeli chcesz nagrać go w innym formacie (przekodowując go), możesz zamiast tego użyć polecenia podobnego do
mencoder -o r1.avi -ovc xvid -xvidencopts bitrate=800 -oac mp3lame -lameopts cbr:br=128 -pp=ci dvb://R1
Na stronie man znajdziesz listę opcji, które możesz przekazać modułowi wejścia DVB.
PRZYSZŁOŚĆ. Jeżeli masz pytania lub chcesz otrzymywać przyszłe ogłoszenia, a także wziąć udział w dyskusjach na ten temat, przyłącz się do naszej listy dyskusyjnej MPlayer-DVB. Proszę pamiętaj, że językiem listy jest angielski.
W przyszłości możesz się spodziewać zdolności wyświetlania OSD i napisów przy użyciu wbudowanej obsługi OSD przez karty DVB, a także bardziej płynnego odtwarzania filmów innych niż 25fps oraz transkodowania w czasie rzeczywistym MPEG-2 i MPEG-4 (częściowa dekompresja).
MPlayer obsługuje sprzętowo przyśpieszane odtwarzanie przy użyciu karty DXR2.
Przede wszystkim będziesz potrzebował poprawnie zainstalowanych sterowników DXR2. Sterowniki i instrukcję instalacji możesz znaleźć na stronie Centrum zasobów DXR2 (DXR2 Resource Center).
ZASTOSOWANIE
Włącz wyjście TV.
Włącz wyjście nakładki w X11.
Ta opcja używana jest do sterowania sterownikiem DXR2.
Układ nakładki (overlay chipset) używany w DXR2 jest dość kiepskiej jakości, ale standardowe ustawienia powinny działać u wszystkich. OSD może być użyte z nakładką (nie na TV) poprzez rysowanie go kolorem kluczowym (colorkey). Ze standardowymi ustawieniami koloru kluczowego możesz uzyskać różne rezultaty, zwykle będziesz widział kolor kluczowy dookoła znaków lub inny śmieszny efekt. Jeżeli dobrze dostosujesz ustawienia koloru kluczowego, powinieneś uzyskać akceptowalne wyniki.
Listę dostępnych opcji znajdziesz na stronie man.
MPlayer obsługuje sprzętowo przyśpieszane odtwarzanie na kartach Creative DXR3 oraz Sigma Designs Hollywood Plus. Obie te karty używają układu dekodującego em8300 firmy Sigma Designs.
Przede wszystkim będziesz potrzebował poprawnie zainstalowanych sterowników DXR3/H+ w wersji 0.12.0 lub nowszej. Sterowniki i instrukcję ich instalacji możesz znaleźć na stronie DXR3 & Hollywood Plus dla Linuksa. configure powinno wykryć Twoją kartę automatycznie, kompilacja powinna przebiec bez problemu.
ZASTOSOWANIE
device
overlay włącza nakładkę zamiast wyjścia TV.
Do działania wymaga poprawnie skonfigurowanych ustawień nakładki.
Najłatwiejszym sposobem konfiguracji nakładki jest odpalenie autocal.
Następnie uruchom MPlayera z wyjściem dxr3 oraz z
wyłączoną nakładką; uruchom dxr3view.
W dxr3view możesz dostrajać ustawienia nakładki i oglądać efekty na bieżąco,
być może będzie to w przyszłości obsługiwane przez GUI MPlayera.
Po poprawnym ustawieniu nakładki nie będziesz już musiał używać dxr3view.
prebuf włącza buforowanie z wyprzedzeniem (prebuffering).
Prebuffering jest możliwością układu em8300, która umożliwia przetrzymywanie
w pamięci więcej niż jednej ramki video na raz. Oznacza to, że
MPlayer
uruchomiony z włączonym prebufferingiem będzie próbował cały czas utrzymywać
wypełniony bufor. Jeżeli masz wolną maszynę, MPlayer
będzie używał prawie lub dokładnie 100% CPU. Jest to szczególnie powszechne
przy odtwarzaniu czystych strumieni MPEG (takich jak DVD, SVCD itd.).
MPlayer wypełni bufor bardzo szybko, ponieważ nie
będzie musiał przekodowywać strumienia do MPEG.
Z prebufferingiem odtwarzanie video jest dużo
mniej wrażliwe na inne programy wykorzystujące CPU. Nie będzie gubił ramek,
chyba że inne aplikacje będą wykorzystywały CPU przez dłuższy czas.
Uruchamiany bez prebufferingu, em8300 jest o wiele bardziej wrażliwy na
obciążenie CPU, włączenie opcji -framedrop jest więc wysoce
wskazane aby uniknąć dalszej utraty synchronizacji.
sync włączy nowy mechanizm synchronizacji (sync-engine). Jest
to na razie funkcja eksperymentalna. Z włączonym sync wewnętrzny zegar em8300
będzie cały czas monitorowany. Gdy zacznie się różnić od zegara
MPlayera zostanie zresetowany, czego skutkiem będzie
opuszczenie przez em8300 wszystkich opóźnionych
ramek. norm=x ustawi standard TV dla DXR3 bez potrzeby
używania zewnętrznych narzędzi, takich jak em8300setup. Poprawnymi
standardami są: 5 = NTSC, 4 = PAL-60, 3 = PAL. Specjalne standardy to
2 (automatyczne dostrojenie
używające PAL/PAL-60) oraz 1 (automatyczne dostrojenie używające PAL/NTSC);
decydują one, którego standardu użyć patrząc na ilość klatek na sekundę filmu.
norm = 0 (standardowe) nie zmienia bieżącego standardu.
device
= numer urządzenia, którego
możesz użyć, jeżeli masz więcej niż jedną kartę em8300.
Każda z tych opcji może być pominięta.
:prebuf:sync spisuje się doskonale przy odtwarzaniu filmów
MPEG-4 (DivX). Niektórzy miewają problemy podczas odtwarzania plików
MPEG-1/2 korzystając
z opcji prebuf. Spróbuj najpierw bez żadnych opcji. Jeżeli będziesz miał
problemy z synchronizacją lub z napisami DVD, wypróbuj :sync.
X
Ustawia wyjście audio, gdzie X
jest numerem
urządzenia (0 jeżeli pojedyncza karta).
xxxxx
em8300 nie potrafi odgrywać dźwięku o częstotliwości próbkowania niższej niż 44100Hz. Jeżeli częstotliwość próbkowania jest niższa niż 44100Hz wybierz 44100HZ lub 48000Hz w zależności, która bardziej pasuje. Na przykład jeżeli film używa 22050Hz - wybierz 44100Hz (44100 / 2 = 22050), jeżeli używa 24000Hz - wybierz 48000Hz (48000 / 2 = 24000) i tak dalej. Nie działa to z cyfrowym wyjściem audio (-ac hwac3).
Aby oglądać zawartość nie-MPEG na em8300 (np. MPEG-4 (DivX) lub RealVideo)
będziesz musiał określić filtr video MPEG-1 taki jak
libavcodec
(lavc).
Spójrz na stronę man, aby uzyskać więcej informacji o -vf lavc.
Obecnie nie istnieje sposób ustawienia współczynnika fps dla
em8300, co oznacza, że jest on zablokowany na 30000/1001fps. Z tego powodu jest
bardzo wskazane abyś używał
-vf lavc=quality
:25, szczególnie
jeżeli używasz buforowania z wyprzedzeniem. Dlaczego 25 a nie 30000/1001? Cóż,
przy 30000/1001 odtwarzanie staje się nieco skokowe. Powód tego nie jest nam znany.
Jeżeli ustawisz fps pomiędzy 25 a 27 obraz stanie się stabilny. W chwili obecnej
nie możemy zrobić nic poza zaakceptowaniem tego faktu.
Chociaż sterownik DXR3 może wstawić jakieś OSD w obraz MPEG-1/2/4, ma ono o wiele niższą jakość niż tradycyjne OSD MPlayera, ma także liczne problemy z odświeżaniem. Powyższy wiersz najpierw zamieni wejściowe video na MPEG-4 (jest to konieczne, przepraszamy), następnie nałoży filtr expand (rozszerzenie), który nic nie rozszerzy (-1: domyślne), ale doda normalne OSD do obrazu (robi to ta jedynka na końcu).
em8300 obsługuje odtwarzanie AC3 audio (dźwięk przestrzenny) poprzez cyfrowe wyjście karty. Spójrz na opcję -ao oss powyżej. Musi ona być użyta aby określić wyjście DXR3 zamiast tego z karty dźwiękowej.
Jest to sterownik wyświetlania (-vo zr) dla wielu kart
służących do przechwytywania/odtwarzania MJPEG (testowane z DC10+ i Buz,
powinien także działać dla LML33 oraz DC10). Sterownik koduje ramkę na JPEG i
wysyła ją do karty. Do konwersji na JPEG używany i wymagany jest
libavcodec
. Korzystając ze specjalnego
trybu cinerama
możesz oglądać filmy w formacie panoramicznym (wide screen), zakładając że masz
dwa ekrany i dwie karty MJPEG. W zależności od rozdzielczości i ustawień
jakości, sterownik ten może wymagać sporo mocy CPU. Pamiętaj, aby użyć
-framedrop, jeżeli Twoja maszyna jest zbyt wolna. Info: Mój AMD
K6-2 350MHz jest (z -framedrop) całkiem wystarczający do
oglądania materiałów o rozmiarach VCD, oraz przeskalowanych w dół filmów.
Sterownik ten "rozmawia" ze sterownikiem jądra dostępnym na http://mjpeg.sf.net, musisz więc go najpierw uruchomić. Obecność karty MJPEG jest wykrywana automatycznie przez skrypt configure. Jeżeli autodetekcja zawiedzie, wymuś wykrywanie używając
./configure --enable-zr
Wyjście można kontrolować licznymi opcjami. Obszerny opis opcji można znaleźć na stronie man, krótki poprzez wywołanie
mplayer -zrhelp
Rzeczy takie, jak skalowanie i OSD (wyświetlanie na ekranie) nie są obsługiwane przez ten sterownik, ale można je uzyskać poprzez filtry video. Załóżmy, że masz film w rozdzielczości 512x272 i chciałbyś go wyświetlić na pełnym ekranie, używając swojego DC10+. Istnieją trzy główne możliwości - możesz przeskalować film do szerokości 768, 384 lub 192. Ze względu na wydajność i jakość, wybrałbym przeskalowanie filmu do 384x204 używając szybkiego programowego skalowania w trybie bilinear. Polecenie wygląda w ten sposób:
mplayer -vo zr -sws 0 -vf scale=384:204 film.avi
Kadrowania można dokonać filtrem crop albo tym sterownikiem. Załóżmy, że Twój film jest zbyt szeroki, aby go wyświetlić na Twoim Buz i chcesz użyć -zrcrop, aby uczynić film mniej szerokim. Powinieneś użyć takiego polecenia:
mplayer -vo zr -zrcrop 720x320+80+0 benhur.avi
Jeżeli chcesz użyć filtru crop, wykonaj:
mplayer -vo zr -vf crop=720:320:80:0 benhur.avi
Dodatkowe wystąpienia -zrcrop wywołują tryb cinerama. Możesz na przykład rozdzielić obraz na kilka TV lub projektorów, uzyskując w ten sposób większy ekran. Powiedzmy, że masz dwa projektory, lewy podłączony do karty Buz na /dev/video1 a prawy do DC10+ na /dev/video0. Film jest w rozdzielczości 704x288. Załóżmy także, że chcesz, aby obraz z prawego projektora był czarno-biały oraz aby ramki jpeg wyświetlane z lewego projektora były jakości 10. Aby uzyskać taki efekt powinieneś wydać następujące polecenie:
mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
film.avi
Jak pewnie zauważyłeś, opcje przed drugim -zrcrop odnoszą się tylko do DC10+, a opcje po drugim -zrcrop odnoszą się do Buz. Ilość kart uczestniczących w cinerama ograniczona jest do czterech, więc możesz zbudować ekran (ścianę video:) 2x2.
Na koniec - ważna uwaga: Nie włączaj ani nie wyłączaj XawTV na urządzeniu odtwarzającym w trakcie odtwarzania - zawiesisz swój komputer. Można natomiast NAJPIERW włączyć XawTV, NASTĘPNIE włączyć MPlayera, poczekać, aż MPlayer zakończy działanie i POTEM wyłączyć XawTV.
Ten sterownik zdolny jest do odtwarzanie używając protokołu UDP Blinkenlights (mrugające światła - przyp. tłum.). Jeżeli nie wiesz, czym jest Blinkenlights lub jego następca - Arcade, dowiedz się. Pomimo, że prawdopodobnie jest to najrzadziej używane wyjście video, z pewnością jest najfajniejszym jakie MPlayer ma do zaoferowania. Po prostu pooglądaj kilka dokumentacyjnych filmów Blinkenlights. Na filmie Arcade możesz zobaczyć sterownik wyjściowy Blinkenlights w akcji w 00:07:50.
Pod Linuksem istnieją dwa sposoby uruchomienia wyjścia TV na karcie Matrox G400:
instrukcje dla Matrox G450/G550 znajdują się w następnej sekcji!
Używając sterownika oraz modułu HAL, dostępnego na stronie Matroksa. Będziesz miał X na TV.
Ten sposób nie daje Ci przyśpieszanego odtwarzania jak pod Windowsami! Drugie wyjście ma tylko bufor ramki YUV, BES (Back End Scaler, układ skalujący YUV na kartach G200/G400/G450/G550) tam nie działa. Windowsowy sterownik jakoś to obchodzi, prawdopodobnie używając silnika (engine) 3D do powiększania, a bufora ramki YUV do wyświetlania obrazu. Jeżeli na prawdę musisz używać X, użyj opcji -vo x11 -fs -zoom. Ostrzegam, że będzie to WOLNE i będzie miało włączone zabezpieczenie przed kopiowaniem Macrovision (Macrovision copy protection). (możesz "obejść" Macrovision używając tego skryptu perla).
Używając modułów matroxfb w jądrach 2.4. 2.2 nie obsługują wyjścia TV, więc są do tego celu bezużyteczne. Musisz włączyć WSZYSTKIE specyficzne dla matroxfb podczas kompilacji (poza MultiHead) i skompilować je w moduły! Będziesz także potrzebował włączonego I2C.
Wejdź do TVout i wpisz
./compile.sh. Zainstaluj
TVout/matroxset/matroxset w jakimś katalogu
znajdującym się w zmiennej PATH
.
Jeżeli nie masz zainstalowanego fbset, umieść
TVout/fbset/fbset gdzieś w
swojej zmiennej PATH
.
Jeżeli nie masz zainstalowanego con2fb, umieść
TVout/con2fb/con2fb gdzieś w
swojej zmiennej PATH
.
Następnie wejdź do katalogu TVout/ w źródłach MPlayera i uruchom ./modules jako root. Twoja konsola tekstowa wejdzie w tryb framebuffer (nie ma odwrotu!).
Następnie, WYEDYTUJ i uruchom skrypt ./matroxtv. Ukaże Ci się bardzo proste menu. Naciśnij 2 i Enter. Teraz powinieneś mieć ten sam obraz na monitorze i TV. Jeżeli na obrazie TV (standardowo PAL) są jakieś paski, znaczy to, że skrypt nie był w stanie poprawnie ustawić rozdzielczości (standardowo na 640x512). Wypróbuj inne rozdzielczości z menu i/lub poeksperymentuj z fbset.
Tiaa. Następnym zadaniem będzie sprawienie aby kursor na tty1 (lub innym) zniknął oraz aby wyłączyć wygaszanie ekranu. Wykonaj następujące polecenia:
echo -e '\033[?25l' setterm -blank 0
lub
setterm -cursor off setterm -blank 0
Możliwe, że chcesz umieścić to w skrypcie, a także wyczyścić ekran. Aby z powrotem włączyć kursor:
echo -e '\033[?25h'
lub
setterm -cursor on
Tiaa git. Rozpocznij odtwarzanie filmu przez:
mplayer -vo mga -fs -screenw 640 -screenh 512 nazwa_pliku
(Jeżeli używasz X, przełącz się teraz na matroxfb używając np.
Ctrl+Alt+F1.)
Zmień 640
oraz 512
, jeżeli chcesz
ustawić inną rozdzielczość...
Ciesz się ultra-szybkim ultra-bajernym wyjściem TV Matroksa (lepsze niż Xv)!
Konstruowanie kabla TV-out do Matroksów. Nikt nie bierze na siebie żadnej odpowiedzialności za zniszczenia spowodowane tą dokumentacją.
Kabel dla G400. W złączu CRTC2 na czwartej nóżce (pin) jest sygnał composite video. Uziemienie jest na szóstej, siódmej i ósmej nóżce. (info dostarczone przez Balázs Rácz)
Kabel dla G450. W złączu CTRC2 na pierwszej nóżce jest sygnał composite video. Ziemia jest na piątej, szóstej, siódmej i pietnastej (5, 6, 7, 15) nóżce. (info dostarczone przez Balázs Kerekes)
Obsługa wyjścia TV dla tych kart została dodana dopiero niedawno i nie należy jeszcze do głównego drzewa jądra. . Z tego, co wiem, moduł mga_vid nie może być obecnie użyty ponieważ sterownik G450/G550 pracuje tylko w jednej konfiguracji: pierwszy układ CRTC (z wieloma możliwościami) na pierwszym ekranie (monitor) i drugi CRTC (bez BES - po objaśnienia do BES sięgnij do sekcji G400 wyżej) na TV. W chwili obecnej możesz więc używać tylko sterownika wyjścia fbdev MPlayera.
Obecnie pierwszy CRTC nie może być przekierowany na drugie wyjście. Autor sterownika jądra matroxfb - Petr Vandrovec - być może zrobi obsługę tego poprzez wyświetlanie wyjścia z pierwszego CRTC na obydwa złącza jednocześnie, jak to jest w tej chwili zalecane dla G400, patrz sekcja wyżej.
Potrzebną łatkę na jądro i dokładne HOWTO można ściągnąć z http://www.bglug.ca/matrox_tvout/
WSTĘP. Obecnie ATI nie chce obsługiwać pod Linuksem żadnego z układów TV-out, z powodu ich licencjonowanej technologii Macrovision.
STAN KART ATI Z TV-OUT POD LINUKSEM
ATI Mach64: obsługiwane przez GATOS.
ASIC Radeon VIVO: obsługiwane przez GATOS.
Radeon oraz Rage128: obsługiwane przez MPlayera! Sprawdź sekcje sterownik VESA oraz VIDIX.
Rage Mobility P/M, Radeon, Rage 128, Mobility M3/M4: obsługiwane przez atitvout.
Na innych kartach używaj sterownika VESA, bez VIDIX. Potrzebny jest jednak potężny CPU.
Jedyna rzecz, którą musisz zrobić to: Mieć podłączony odbiornik TV przez uruchomieniem swojego PC, ponieważ video BIOS inicjalizuje się tylko podczas procedury POST.
Najpierw MUSISZ ściągnąć sterowniki o zamkniętych źródłach z http://nvidia.com. Nie będę tutaj opisywał procesu instalacji i konfiguracji ponieważ nie jest to celem tej dokumentacji.
Jeżeli XFree86, XVideo i przyśpieszanie 3D już działa prawidłowo, przerób sekcję Device swojej karty w pliku XF86Config zgodnie z poniższym wzorcem (dostosuj do swojej karty/TV):
Section "Device" Identifier "GeForce" VendorName "ASUS" BoardName "nVidia GeForce2/MX 400" Driver "nvidia" #Option "NvAGP" "1" Option "NoLogo" Option "CursorShadow" "on" Option "TwinView" Option "TwinViewOrientation" "Clone" Option "MetaModes" "1024x768,640x480" Option "ConnectedMonitor" "CRT, TV" Option "TVStandard" "PAL-B" Option "TVOutFormat" "Composite" EndSection
Oczywiście najważniejsza jest część TwinView.
Układ NeoMagic można znaleźć w rożnych laptopach, niektóre wyposażone są w prosty analogowy koder TV, inne mają bardziej zaawansowaną wersję.
Układ analogowy: Doniesiono nam, że dobre wyjście TV można uzyskać używając -vo fbdev lub -vo fbdev2. Potrzebujesz wkompilowanego w jądro vesafb i przekazane do poleceń jądra: append="video=vesafb:ywrap,mtrr" vga=791. Powinieneś uruchomić X, następnie przełączyć się do konsoli używając np. CTRL+ALT+F1. Jeżeli nie wystartujesz X przed uruchomieniem MPlayera z konsoli obraz będzie powolny i będzie się ciął (mile widziane wytłumaczenie). Zaloguj się na konsoli, a następnie wykonaj następujące polecenie:
clear; mplayer -vo fbdev -zoom -cache 8192 dvd://
Powinieneś ujrzeć odtwarzany w konsoli film zajmujący około połowę ekranu LCD Twojego laptopa. Aby przełączyć się na TV naciśnij Fn+F5 trzy razy. Przetestowane na Tecra 800, jądro 2.6.15 z vesafb, ALSA v1.0.10.
Układ kodujący Chrontel 70xx: Obecny w IBM thinkpad 390E, a możliwe, że także w innych Thinkpadach lub notebookach.
Dla trybu PAL musisz użyć -vo vesa:neotv_pal. Dla trybu NTSC - -vo vesa:neotv_ntsc. Zapewni to funkcjonowanie wyjścia TV w następujących trybach 16 bpp i 8 bpp:
NTSC 320x240, 640x480, być może także 800x600.
PAL 320x240, 400x300, 640x480, 800x600.
Tryb 512x384 nie jest obsługiwany przez BIOS. Musisz przeskalować obraz do innej rozdzielczości aby aktywować wyjście TV. Jeżeli widzisz obraz na ekranie w rozdzielczości 640x480 lub 800x600, lecz nie w 320x240, lub w innych mniejszych rozdzielczościach, to musisz zamienić dwie tabele w vbelib.c. Więcej szczegółów znajdziesz w kodzie funkcji vbeSetTV. W tym przypadku skontaktuj się z autorem.
Znane problemy: Tylko VESA, nie są zaimplementowane ustawienia obrazu takie jak jasność, kontrast, poziom czerni (blacklevel) i filtr migotania (flickfilter).
Główną platformą rozwojową jest Linux x86, chociaż MPlayer pracuje również na wielu innych portach tego systemu. Pakiety binarne są dostępne z kilku źródeł, jednakże żaden z nich nie jest przez nas obsługiwany. Zgłaszaj problemy do ich opiekunów, a nie do nas.
Aby zbudować pakiet dla Debiana, wywołaj poniższe polecenie w katalogu ze źródłami MPlayera:
fakeroot debian/rules binary
Jeśli chcesz przekazać własne opcje do skryptu configure, możesz ustawić zmienną
środowiskową DEB_BUILD_OPTIONS
. Na przykład, jeśli chcesz
obsługi menu i GUI, wyglądało by to tak:
DEB_BUILD_OPTIONS="--enable-gui --enable-menu" fakeroot debian/rules binary
Możesz przekazać również niektóre zmienne do Makefile. Na przykład, jeśli chcesz kompilować przy pomocy gcc 3.4, nawet jeśli nie jest to domyślny kompilator:
CC=gcc-3.4 DEB_BUILD_OPTIONS="--enable-gui" fakeroot debian/rules binary
Aby wyczyściś katalog ze źródłami wykonaj poniższa komendę:
fakeroot debian/rules clean
Jako superużytkownik możesz zainstalować pakiet .deb tak, jak zwykle:
dpkg -i ../mplayer_wersja
.deb
Christian Marillat buduje dla Debiana nieoficjalne paczki MPlayera, MEncodera i naszych czcionek bitmapowych już od jakiegoś czasu, możesz je pobrać (apt-get) z jego strony domowej.
Dominik Mierzejewski opiekuje się oficjalnymi pakietami RPM MPlayera dla Fedora Core. Są one dostępne w repozytorium Livna.
RPMy dla Mandrake/Mandriva są dostępne na P.L.F.. SuSE zawierał okrojoną wersję MPlayera w dystrybucji. Usunęli ją w swoich najnowszych wydaniach. W pełni funkcjonalne pakiety możesz pobrać z links2linux.de.
MPlayer działa również na PDA z procesorami ARM
działających pod kontrolą Linuksa, np. Sharp Zaurus, Compaq iPAQ.
Najprostszym sposobem, żeby uzyskać MPlayera,
jest pobranie go z odpowiedniego źródła pakietów (stable, testing, unstable)
z witryny OpenZaurus. Jeżeli chcesz
go skompilować samodzielnie, powinieneś przyjrzeć się katalogom
mplayera
i biblioteki
libavcodec
w głównym katalogu źródłowym OpenZaurusa. Zawierają one najświeższe łatki
i pliki Makefile, służące do samodzielnej kompilacji
MPlayera z libavcodec
.
Jeżeli potrzebujesz interfejsu GUI, możesz użyć xmms-embedded.
MPlayer działa na FreeBSD, OpenBSD, NetBSD, BSD/OS i Darwinie. Dostępne są wersje portów/pkgsrc/fink/itp., które prawdopodobnie są łatwiejsze w instalacji, niż kompilacja ze źródeł.
Do zbudowania MPlayera będziesz potrzebował GNU make (gmake - rdzenne make BSD nie zadziała) i najnowszej wersji binutils.
Jeżeli MPlayer nie może znaleźć /dev/cdrom lub /dev/dvd, stwórz odpowiednie dowiązanie symboliczne:
ln -s /dev/twoje_urządzenie_cdrom
/dev/cdrom
Aby używać bibliotek Win32 z MPlayerem, będziesz
potrzebował przekompilować jądro z opcją "USER_LDT
"
(chyba, że używasz FreeBSD-CURRENT, tam jest domyślnie włączona).
Jeżeli Twój procesor ma rozszerzenie SSE, przekompiluj jądro z opcją
"CPU_ENABLE_SSE
" (wymagany FreeBSD-STABLE lub łaty na jądro).
Ze względu na ograniczenia w różnych wersjach gas (GNU assemblera - przyp. tłumacza)
(dotyczące relokacji i MMX), będziesz musiał przeprowadzić kompilację w dwóch krokach:
Po pierwsze, upewnij się, że wersja nierdzenna występuje w zmiennej $PATH
i wykonaj gmake -k, a następnie upewnij się, że używana jest wersja rdzenna
i wykonaj gmake.
Powyższa metoda nie jest już potrzebna w OpenBSD 3.4.
Zobacz rozdział Mac OS.
MPlayer został przeportowany na wiele komercyjnych wariantów Uniksa. Jako, że środowiska programistyczne przeważnie różnią się od tych znajdowanych w wolnych Uniksach, być może będziesz musiał wprowadzić ręczne poprawki, aby program skompilował się poprawnie.
MPlayer powinien działać na Solarisie 2.6 lub nowszym. Możesz skorzystać ze sterownika dźwięku SUN'a podająć opcję -ao sun.
Na UltraSPARCach,
MPlayer korzysta z rozszerzenia
VIS (odpowiednik MMX), obecnie tylko w
libmpeg2
,
libavo
i
libavcodec
,
ale nie w mp3lib
. Możesz oglądać plik VOB na
procesorze z taktowaniem 400MHz. Będziesz potrzebował do tego biblioteki
mLib
.
Caveat:
mediaLib jest aktualnie wyłączone w domyślnej konfiguracji MPlayera, z powodu błędów. Użytkownicy SPARC-ów, którzy budują MPlayera z obsługą mediaLib informowali o delikatnym, zielonymi miganiu wideo kodowane i dekodowanego przez libavcodec. Możesz włączyć mediaLib, jeżeli chcesz używając:
$ ./configure --enable-mlib
Robisz to na własne ryzyko. Użytkownicy x86 powinni nigdy nie używać mediaLib, ponieważ w efekcie otrzymają kiepską wydajność MPlayera.
Aby zbudować pakiet, będziesz potrzebował GNU make (gmake, /opt/sfw/gmake), rdzenne make Solarisa nie zadziała. Typowy błąd jaki otrzymujesz, budując tym drugim zamiast GNU make, to:
% /usr/ccs/bin/make make: Fatal error in reader: Makefile, line 25: Unexpected end of line seen
W Solarisie przeznaczonym dla SPARC, potrzebujesz kompilatora GNU C/C++; nie ma znaczenia, czy jest on skonfigurowany z, czy bez GNU assemblera.
Na Solarisie x86, potrzebujesz GNU assemblera i kompilatora GNU C/C++, skonfigurowanego do używania GNU assemblera! Kod MPlayera, na platformie x86, w znaczący sposób korzysta z instrukcji MMX, SSE i 3DNOW!, które nie mogą być skompilowane przy pomocy assemblera Sun /usr/ccs/bin/as.
Skrypt configure stara się określić, jaki assembler
wywoływany jest przez komendę "gcc" (jeżeli próba zakończy się fiaskiem,
użyj opcji --as=/gdziekolwiek/zainstalowałeś/gnu-as
,
żeby określić gdzie skrypt configure może znaleźć GNU "as" w Twoim
systemie).
Rozwiązania najczęstszych problemów:
Błąd jaki wyświetli configure na Solarisie x86, używającym GCC bez GNU assemblera:
% configure ... Checking assembler (/usr/ccs/bin/as) ... , failed Please upgrade(downgrade) binutils to 2.10.1...
(Rozwiązanie: Zainstaluj i używaj gcc skonfigurowanego z opcją --with-as=gas)
Typowy błąd, jaki otrzymasz przy próbie budowy kompilatorem GNU C, który nie używa 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 ...
MPlayer może się wysypać podczas dekodowania i kodowania wideo używających win32codecs:
... Trying to force audio codec driver family acm... Opening audio decoder: [acm] Win32/ACM decoders sysi86(SI86DSCR): Invalid argument Couldn't install fs segment, expect segfault MPlayer interrupted by signal 11 in module: init_audio_codec ...
Dzieje się tak z powodu zmian w sysi86() w Solaris 10 i wydaniach pre-Solaris Nevada b31. Zostało to naprawione w Solaris Nevada b32; jednak Sun nie przeniósł jeszcze poprawki do Solarisa 10. Projekt MPlayer poinformował o tym problemie Sun i łatka jest aktualnie wprowadzana do Solarisa 10. Więcej informacji o tym błędzie może zostać znaleziona na stronie: http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6308413.
Ze względu na błędy występujące w Solarisie 8, możesz nie być w stanie odtwarzać płyt DVD o pojemności większej niż 4 GB:
Sterownik sd(7D) dla Solarisa 8 x86 ma błąd ujawniający się przy próbie dostępu do bloku dyskowego >4GB urządzenia korzystającego z logicznego rozmiaru bloku !=DEV_BSIZE (np. nośnik CD-ROM i DVD). Ze względu na przepełnienie 32bitowych liczb całkowitych, odczytywany jest adres dysku modulo 4GB (http://groups.yahoo.com/group/solarisonintel/message/22516). Ten problem nie występuje na Solarisie 8 przeznaczonym dla procesorów SPARC.
Podobny błąd występuje w kodzie systemu plików hsfs(7FS) (znanym jako ISO9660), hsfs może nie obsługiwać partycji/dysków większych niż 4GB, wszystkie dane są odczytywane z bloku modulo 4GB (http://groups.yahoo.com/group/solarisonintel/message/22592). Problem może być rozwiązany przy pomocy łatki 109764-04 (sparc) / 109765-04 (x86).
Joe Page umieścił na swojej stronie domowej dokument HOWTO stworzony przez Martina Gansser'a dotyczący MPlayera na HP-UX. Korzystając z zawartych tam intrukcji program powinien się skompilować bez najmniejszych problemów. Poniższe informacje są zaczerpnięte z tego opracowania.
Do budowy będziesz potrzebował GCC 3.4.0, GNU make 3.80, i SDL 1.2.7 lub ich nowszych wersji. Kompilator HP cc nie wyprodukuje działającego programu, a wcześniejsze wersje GCC są pełne błędów. Aby moć skorzystać z OpenGL, musisz zainstalować biblioteki Mesa, wtedy sterowniki wyjścia video gl i gl2 powinny działać. Ich wydajność może być tragiczna, jednak zależne jest to od mocy obliczeniowej procesora. Dobrym zamiennikiem, raczej kiepskiego, systemu dźwiękowego HP-UX jest GNU esound.
Stwórz urządzenie DVD, przeskanuj magistralę SCSI komendą:
# ioscan -fn Class I H/W Path Driver S/W State H/W Type Description ... ext_bus 1 8/16/5 c720 CLAIMED INTERFACE Built-in SCSI target 3 8/16/5.2 tgt CLAIMED DEVICE disk 4 8/16/5.2.0 sdisk CLAIMED DEVICE PIONEER DVD-ROM DVD-305 /dev/dsk/c1t2d0 /dev/rdsk/c1t2d0 target 4 8/16/5.7 tgt CLAIMED DEVICE ctl 1 8/16/5.7.0 sctl CLAIMED DEVICE Initiator /dev/rscsi/c1t7d0 /dev/rscsi/c1t7l0 /dev/scsi/c1t7l0 ...
Z rezultatów działania komendy możemy odczytać, że na adresie 2 SCSI znajduje się Pioneer DVD-ROM. Instancja karty dla ścieżki sprzętowej 8/16 to 1.
Stwórz dowiązanie surowego urządzenia do urządzenia DVD.
# ln -s /dev/rdsk/c<instancja magistrali SCSI>
t<ID docelowego SCSI>
d<LUN>
/dev/<urządzenie>
Przykład:
# ln -s /dev/rdsk/c1t2d0 /dev/dvd
Poniżej znajdują się rozwiązania kilku najczęstszych problemów:
Wysypanie się programu przy uruchamianiu z komunikatem błędu:
/usr/lib/dld.sl: Unresolved symbol: finite (code) from /usr/local/lib/gcc-lib/hppa2.0n-hp-hpux11.00/3.2/../../../libGL.sl
Oznacza to, że funkcja .finite().
jest niedostępna
w standardowej bibliotece math HP-UX.
Zamiast niej dostępna jest .isfinite().
.
Rozwiązanie: Skorzystaj z najnowszego pliku składowego Mesa.
Wysypanie się programu przy odtwarzaniu z komunikatem:
/usr/lib/dld.sl: Unresolved symbol: sem_init (code) from /usr/local/lib/libSDL-1.2.sl.0
Rozwiązanie: Skorzystaj z opcji extralibdir skryptu configure --extra-ldflags="/usr/lib -lrt"
MPlayer powoduje błąd naruszenia ochrony pamięci (segfault) z komunikatem:
Pid 10166 received a SIGSEGV for stack growth failure. Possible causes: insufficient memory or swap space, or stack size exceeded maxssiz. Segmentation fault
Rozwiazanie:
Jądro HP-UX ma domyślnie zdefiniowany rozmiar stosu przeznaczonego na każdy
proces i jest to 8MB(?).(11.0 i nowsze łatki 10.20 pozwalają Ci zwiększyć
parametr maxssiz
do 350MB dla 32-bitowych programów).
Musisz rozszerzyć maxssiz
i przekompilować jądro
(i uruchomić ponownie komputer). Możesz wykorzystać do tego celu SAM. (Kiedy
w nim będziesz, sprawdź wartość maxdsiz
. Określa ona
maksymalny rozmiar danych, jaką program może użyć. To czy domyślne 64MB wystarczy
czy nie, zależy wyłącznie od wymagań Twoich aplikacji.)
MPlayer kompiluje się z powodzenie na AIX 5.1, 5.2 i 5.3, korzystając z GCC 3.3 lub wyższego. Budowanie MPlayer na AIX 4.3.3 i niższych nie było sprawdzane. Zaleca się, abyś budowal MPlayera używając GCC 3.4 lub wyższego lub jeżeli kompilujesz na POWER5 - GCC 4.0.
Upenij się, że używasz GNU make (/opt/freeware/bin/gmake), aby kompilować MPlayera, jako że możesz napotkać na problemy przy korzystaniu z /usr/ccs/bin/make.
Wykrywanie CPU jest ciągle dopracowywane. Poniższe architektury zostały przetestowane:
604e
POWER3
POWER4
Poniższe architektury nie były testowane, ale i tak powinny działać:
POWER
POWER2
POWER5
Dźwięk przez Ultimedia Services nie jest obsługiwany, jako że ta technologia została porzucona w AIX 5.1; dlatego też, jedynym wyjściem jest korzystanie ze sterowników AIX Open Sound System (OSS) tworzonych przez 4Front Technologies, znajdziesz je na http://www.opensound.com/aix.html . 4Front Technologies udostępnia swoje sterowniki OSS za darmo do niekomercyjnego zastosowania; jednakże, nie ma aktualnie sterowników wyjścia audio dla AIX 5.2 lub 5.3. Oznacza to, że AIX 5.2 i 5.3 nie potrafią aktualnie używać wyjścia audio MPlayera.
Rozwiązania częstych problemów:
Jeżeli otrzymujesz od configure taki komunikat błędu:
$ ./configure ... Checking for iconv program ... no No working iconv program found, use --charset=US-ASCII to continue anyway. Messages in the GTK-2 interface will be broken then.
To dzieje się tak dlatego, że AIX używa nie standardowych zestawów nazw znaków; dlatego też, konwersja wyjścia MPlayera do innego zestawu znaków (kodowania) nie jest aktualnie obsługiwana. Rozwiązaniem jest użycie:
$ ./configure --charset=noconv
Tak, MPlayer działa na Windowsie pod Cygwinem i MinGW. Nie ma jeszcze oficjalnego interfejsu GUI, ale wersja dla wiersza poleceń jest już w pełni funkcjonalna. Powinieneś sprawdzić listę MPlayer-cygwin, aby uzyskać pomoc albo otrzymać najnowsze informacje. Oficjalne paczki z binariami dla Windowsa znajdziesz na stronie pobierania. Pakiety zawierające instalatory i proste nakładki GUI dostępne są z zewnętrznych źródeł, informacje o nich zebraliśmy w sekcji poświęconej Windowsowi na stronie projektów.
Jeżeli chcesz uniknąć korzystania z wiersza poleceń, prostym sposobem na jego ominięcie jest umieszczenie skrótu na pulpicie, który będzie zawierał podobny wpis w części odpowiedzialnej za wykonanie komendy:
c:\ścieżka\do\
mplayer.exe %1
Spowoduje to, że MPlayer będzie odtwarzał film, który zostanie przeciągnięty na jego skrót. Dodaj opcję -fs, aby korzystać z trybu pełnoekranowego.
Najlepsze wyniki są osiągane ze sterownikami wyjściowymi video DirectX (-vo directx). Możesz skorzystać również z OpenGL lub SDL, jednak wydajność OpenGL w znacznym stopniu zależy od systemu, a SDL może powodować powstanie zakłóceń w obrazie albo wywołać błąd, i zakończyć działanie programu. Jeżeli występują zakłócenia obrazu, spróbuj wyłączyć sprzętową akcelerację przez opcję -vo directx:noaccel. Ściągnij pliki nagłówkowe DirectX 7, żeby skompilować sterownik do wyjścia video DirectX. Co więcej, musisz mieć zainstalowany DirectX 7 lub nowszy, aby to wyjście zadziałało.
VIDIX działa teraz również pod Windowsem jako -vo winvidix, chociaż jego obsługa jest eksperymentalna i wymaga trochę ręcznego przygotowania. Pobierz dhahelper.sys lub dhahelper.sys (z obsługą MTRR) i skopiuj go do libdha/dhahelperwin w drzewie źródłowym MPlayera. Uruchom konsolę, następnie przejdź do tego katalogu i wykonaj
gcc -o dhasetup.exe dhasetup.c
i
dhasetup.exe install
jako Administrator. Będziesz musiał ponownie uruchomić komputer. Teraz, skopiuj wszystkie pliki
z rozszerzeniem .so
z katalogu
vidix/drivers do
mplayer/vidix
względem położnia pliku mplayer.exe.
Żeby osiągnąć najlepsze wyniki MPlayer powinien korzystać z przestrzeni kolorów, którą Twoja karta wspomaga sprzętowo. Niestety wiele sterowników graficznych Windowsa źle informuje o obsługiwanych przez kartę przestrzeniach. Aby sprawdzić które są źle obsługiwane, wykonaj poniższą komendę:
mplayer -benchmark -nosound -frames 100 -vf format=przestrzeń
film
gdzie przestrzeń
może być jakąkolwiek
wartością spośród tych uzyskanych przez opcję -vf format=fmt=help.
Jeśli któraś z nich działa szczególnie źle, opcja
-vf noformat=przestrzeń
zapobiegnie jej używaniu. Możesz to na stałe dodać do Twojego pliku konfiguracyjnego.
Dostępne są specjalne zbiory z kodekami przeznaczone dla systemu Windows, znajdziesz je na
stronie kodeków.
Pozwolą Ci one na odtwarzanie formatów, które nie są jeszcze bezpośrednio obsługiwane w
MPlayerze. Umieść je, gdzieś w swojej ścieżce (w katalogu podanym w
zmiennej PATH - przyp. tłumacza) lub przekaż opcję
--codecsdir=c:/ścieżka/do/Twoich/kodeków
(lub, tylko w środowkisku Cygwin,
--codecsdir=/ścieżka/do/Twoich/kodeków
)
do skryptu configure.
Mieliśmy doniesienia, że biblioteki Real, muszą być zapisywalne dla użytkownika, który
uruchamia MPlayera, ale tylko na niektórych systemach (NT4).
Spróbuj nadać im atrybut zapisywalności.
Możesz odtwarzać VCD, odtwarzając pliki .DAT lub .MPG, które Windows pokazuje na VCD. To działa mniej więcej tak (dopasuj literę dysku do Twojego CD-ROMu):
mplayer d:/mpegav/avseq01.dat
DVD również działa, podaj literę Twojego DVD-ROMu przez opcję -dvd-device:
mplayer dvd://<tytuł>
-dvd-deviced
:
Konsola Cygwin/MinGW jest raczej wolna. Zgłoszono, że przekierowywanie wyjścia albo używanie opcji -quiet poprawia wydajność na niektórych systemach. Bezpośrednie renderowanie (-dr) również może pomóc. Jeżeli odtwarzanie jest nierówne, spróbuj użyć -autosync 100. Jeżeli którakolwiek z tych opcji Ci pomogła, może będziesz chciał umieścić ją w swoim pliku konfiguracyjnym.
Na Windowsie automatyczne wykrywanie typu procesora wyłącza rozszerzenie SSE z powodu okazjonalnych i ciężkich do wyśledzenia błędów powodujących zakończenie aplikacji. Jeżeli nadal chesz mieć obsługę SSE pod Windowsem, będziesz musiał skompilować program bez wykrywania typu CPU w trakcie działania.
Jeżeli masz Pentium 4 i program wysypuje Ci się podczas używania kodeków RealPlayer'a, prawdopodobnie będziesz musiał wyłączyć obsługę hyperthreading'u.
Aby skompilować MPlayera wymagana jest wersja Cygwina 1.5.0 lub późniejsza.
Pliki nagłówkowe DirectX muszą być rozpakowane do /usr/include/ lub /usr/local/include/.
Instrukcje i pliki potrzebne do kompilacji SDLa dla Cygwin są dostępne na stronie libsdl.
Zainstalowanie MinGW, który umożliwiłby kompilację MPlayera było zawiłe, ale teraz składa się tylko z trzech prostych kroków i niedługo powinno działać "prosto z pudełka". Zainstaluj MinGW 3.0.0 lub nowszy. Zainstaluj MSYS 1.0.9 lub nowszy i wskaż systemowi poinstalacyjnemu MSYSa, że MinGW jest zainstalowane.
Rozpakuj pliki nagłówkowe DirectX do /mingw/include/.
Do obsługi skompresowanych nagłówków MOV wymagana jest biblioteka zlib, która nie jest domyślnie dostępna w MinGW. Skonfiguruj ją z opcją --prefix=/mingw i zainstaluj przed kompilacją MPlayera.
Pełną instrukcję jak zbudować MPlayera i wszystkie potrzebne biblioteki znajdziesz w MPlayer MinGW HOWTO.
"Surowe" źródła MPlayera obsługują tylko Mac OS X w wersjach 10.2 i wyższych. Możesz spróbować umożliwić obsługę starszych wersji Mac OS oraz przysłać nam łaty! MPlayer nie działa na Mac OS w wersjach niższych niż 10, jednak powinien skompilować się bez problemu na systemie Mac OS X 10.2 i wyższym. Zalecanym kompilatorem jest GCC 3.x w wersji Apple. Możesz otrzymać podstawowe środowisko do kompilacji, instalując Xcode od Apple. Jeżeli masz Mac OS X 10.3.9 lub późniejszy i QuickTime 7, możesz skorzystać ze sterownika wyjścia video corevideo.
Niestety, to podstawowe środowisko ni epozwoli ci na skorzystanie ze
wszystkich fajnych możliwości MPlayera.
Przykładowo, żeby uzyskać wkompilowaną obsługę OSD, będziesz
potrzebował bibliotek fontconfig
i freetype
zainstalowanych na swojej maszynie.
W przeciwieństwie do innych Uniksów, takich jak większość odmian
Linuksa i BSD, OS X nie ma systemu pakietów dostarczanego razem
z systemem.
Można wybierać spośród co najmniej dwóch systemów pakietów: Fink i DarwinPorts.\ Oba dostarczają takie same usługi (np. dużo pakietów do wyboru, rozwiązywanie zależności, możliwość łatwego dodania/aktualizacji/usunięcia pakietów itp.). Fink oferuje zarówno binarne pakiety, jak i możliwość zbudowania wszystkiego ze źródeł. Natomiast DarwinPorts pozwala tylko na budowanie ze źródeł. Autorzy tego przewodnika wybrali DarwinPorts z powodu tej prostej przyczyny, że jego podstawowa wersja była lżejsza. Podane przykłady będą oparte na DarwinPorts.
Przykładowo, żeby skomilować MPlayera z obsługą OSD:
sudo port install pkgconfig
Zainstaluje to pkg-config, który jest systemem
do zarządzania flagami kompilacji/dowiązań bibliotek.
MPlayerowy skrypt
configure
używa go do prawidłowego
wykrywania bibliotek.
Następnie możesz zainstalować fontconfig
w podobny sposób:
sudo port install fontconfig
Następnie możesz uruchomić MPlayerowy skrypt
configure
(zapisz zmienne systemowe
PKG_CONFIG_PATH
i PATH
, żeby
configure
znalazł biblioteki zainstalowane
przez DarwinPorts):
PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/ PATH=$PATH:/opt/local/bin/ ./configure
Możesz pobrać natywne GUI dla MPlayera razem z prekompilowanymi binariami MPlayera dla Mac OS X ze strony projektu MPlayerOSX, ale uwaga: projekt nie jest już aktywny.
Na szczęście, MPlayerOSX został przejęty przez członka załogi MPlayera. Wersje testowe są dostępne na stronie z materiałami do pobrania, a oficjalne wydanie powinno pojawić się już niedługo.
Aby zbudować MPlayerOSX bezpośrednio
ze źródeł, potrzebujesz modułu mplayerosx
,
main
i kopii modułu CVS
main
o nazwie
main_noaltivec
.
mplayerosx
to graficzna nakładka,
main
to MPlayer, a
main_noaltivec
to MPlayer zbudowany bez obsługi
AltiVec.
Aby pobrać moduł z repozytorium SVN wykonaj polecenia:
svn checkout svn://svn.mplayerhq.hu/mplayerosx/trunk/ mplayerosx svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/ main
W celu zbudowania MPlayerOSX będziesz musiał utowrzyć podobną strukturę katalogów:
katalog_źródłowy_MPlayera | |--->main (źródła MPlayera z Subversion) | |--->main_noaltivec (źródła MPlayera z Subversion skonfigurowane z opcją --disable-altivec) | |--->mplayerosx (źródła MPlayer OS X z Subversion)
Najpierw musisz zbudować main i main_noaltivec.
Następnie ustaw globalną zmienną:
export MACOSX_DEPLOYMENT_TARGET=10.3
Potem skonfiguruj:
Jeżeli konfigurujesz dla maszyny G4 lub lepszej z obsługą AltiVec, postępuj jak poniżej:
./configure --with-termcaplib=ncurses.5 --disable-gl --disable-x11
Jeżeli konfigurujesz dla maszyny z procesorem G3 bez AltiVec, postępuj jak ponieżej:
./configure --with-termcaplib=ncurses.5 --disable-gl --disable-x11 --disable-altivec
Być może będziesz musiał wyedytować plik config.mak
i zmienić wartości -mcpu
-mtune
z -74XX
na
-G3
.
Następnie wykonaj
make
przejdź do katalogu mplayerosx i wpisz
make dist
Zostanie utworzony skompresowany obraz .dmg
zawierający gotowy do uruchomienia program.
Możes również skorzystać z projektu Xcode 2.1; stary projekt dla Xcode 1.x już nie działa.
Pełna lista dostępnych opcji MEncodera oraz przykłady znajdują się na stronie man. W pliku encoding-tips znajduje się dużo przykładów i przewodników skompletowanych z wielu wątków listy dyskusyjnej MPlayer-users. W archiwum znajdziesz mnóstwo dyskusji o aspektach i problemach związanych z kodowaniem przy pomocy MEncodera.
Kodeki audio i video stosowane przy kodowaniu są wybierane odpowiednio opcjami -oac i -ovc. Napisz na przykład:
mencoder -ovc help
by uzyskać listę wszystkich kodeków video obsługiwanych przez MEncodera na Twoim komputerze. Dostępne są następujące:
Kodeki audio:
Nazwa kodeka audio | Opis |
---|---|
mp3lame | kodowanie na MP3 VBR, ABR lub przy użyciu LAME |
lavc | używa jednego z kodeków audio z libavcodec |
faac | koder audio FAAC AAC |
toolame | koder MPEG Audio Layer 2 |
twolame | koder MPEG Audio Layer 2 encoder oparty na tooLAME |
pcm | nieskompresowany dźwięk PCM |
copy | nie przekodowywuj, tylko przekopiuj zakodowane ramki |
Kodeki video:
Nazwa kodeka video | Opis |
---|---|
lavc | używa jednego z kodeków video z libavcodec |
xvid | Xvid, kodek MPEG-4 Advanced Simple Profile (ASP) |
x264 | x264, MPEG-4 Advanced Video Coding (AVC), zwany kodekiem H.264 |
nuv | nuppel video, używany przez niektóre aplikacje czasu rzeczywistego |
raw | nieskompresowane klatki video |
copy | nie przekodowywuj, tylko przekopiuj zakodowane ramki |
frameno | używany do kodowania trójprzebiegowego (nie zalecane) |
Format wyjściowy wybiera się opcją -of. Napisz:
mencoder -of help
by otrzymać listę wszystkich formatów obsługiwanych przez MEncodera na Twoim komputerze.
Formaty przechowywania:
Nazwa formatu | Opis |
---|---|
lavf | jeden z formatów obsługiwanych przez
libavformat |
avi | Audio-Video Interleaved (Przeplecione Audio-Video) |
mpeg | MPEG-1 i MPEG-2 PS |
rawvideo | surowy strumień video (bez muxowania - tylko jeden strumień video) |
rawaudio | surowy strumień audio (bez muxowania - tylko jeden strumień audio) |
Format AVI jest podstawowym formatem MEncodera, co oznacza że jest najlepiej obsługiwany i że MEncoder był projektowany z myślą o nim. Jak napisano wcześniej, można używać innych formatów, ale możesz napotkać przy tym problemy.
Formaty z libavformat
:
Jeśli chcesz żeby libavformat
dokonywał muksowania zbioru wyjściowego (przy użyciu opcji
-of lavf), stosowny format zostanie ustalony na podstawie
rozszerzenia pliku wyjściowego.
Możesz wymusić konkretny format opcją format biblioteki
libavformat
.
nazwa formatu libavformat | Opis |
---|---|
mpg | MPEG-1 i MPEG-2 PS |
asf | Advanced Streaming Format (Zaawansowany format strumieniowy) |
avi | Audio-Video Interleaved |
wav | Waveform Audio |
swf | Macromedia Flash |
flv | Macromedia Flash video |
rm | RealMedia |
au | SUN AU |
nut | otwarty format NUT (eksperymentalny i jeszcze bez specyfikacji) |
mov | QuickTime |
mp4 | MPEG-4 format |
dv | format Sony Digital Video |
Jak widzisz, libavformat
pozwala
MEncoderowi tworzyć sporą ilość różnych formatów.
Niestety, ponieważ MEncoder nie był tworzony
z myślą o innych formatach niż AVI, powinieneś mieć paranoidalne podejście do
wynikowych plików.
Dokładnie sprawdź czy jest prawidłowa synchronizacja audio/video i czy plik
może zostać prawidłowo odtworzony przez odtwarzacze inne niż
MPlayer.
Przykład 6.1. kodowanie do formatu Macromedia Flash
Tworzenie zbioru Macromedia Flash video, nadającego się do odtwarzania w przeglądarce sieciowej z wtyczką Macromedia Flash:
mencoderwejście.avi
-owyjście.flv
-of lavf \ -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \ -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3
MEncoder może kodoważ ze zbiorów lub bezpośrednio
z dysku DVD lub VCD.
Po prostu podaj nazwę zbioru w wierszu poleceń żeby kodować ze zbioru, albo
dvd://numertytułu
lub
vcd://numerścieżki
by nagrywać
z tytułu DVD albo ścieżki VCD.
Jeśli już skopiowałeś DVD na twardy dysk (możesz na przykład użyć narzędzia
takiego jak dvdbackup, dostępnego na większości
systemów), wciąż powinieneś używać składni dvd://, razem
z opcją -dvd-device po której następuje ścieżka do
skopiowanego DVD.
Opcji -dvd-device i -cdrom-device możesz
też używać by podać własne ścieżki do węzłów urządzeń, jeśli domyślne
/dev/dvd i /dev/cdrom nie są
właściwe w Twoim systemie.
Przy kodowaniu z DVD, często pożądanym jest wybranie do kodowania rozdziału
lub zasięgu rozdziałów.
Możesz w tym celu użyć opcji -chapters, na przykład
-chapters 1-4
zakoduje z DVD
tylko rozdziały od 1 do 4.
Jest to zwłaszcza użyteczne gdy robisz kodowanie do wielkości 1400 MB,
przeznaczone na 2 CD, ponieważ możesz się upewnić że przerwa nastąpi
dokładnie na granicy rozdziałów a nie w środku sceny.
Jeśli masz obsługiwaną kartę przechwytywania TV, możesz też kodować z jej
urządzenia wejściowego.
Użyj opcji tv://numerkanału
jako
nazwy pliku, a opcją -tv skonfiguruj rozmaite ustawienia
przechwytywania.
Podobnie działa wejście z DVB.
Nazwa związana jest z faktem, iż przy użyciu tej metody plik kodowany jest dwa razy. Pierwsze kodowanie (dubbed pass) tworzy pliki tymczasowe (*.log) o rozmiarze kilku megabajtów, nie kasuj ich od razu (możesz natomiast skasować plik AVI a jeszcze lepiej nie tworzyć go w ogóle poprzez zapisywanie w /dev/null). W drugim przebiegu przy pomocy danych o bitrate z plików tymczasowych tworzony jest plik wyjściowy drugiego przebiegu. Plik końcowy będzie miał o wiele lepszą jakość w porównaniu ze standardowym 1-przebiegowym kodowaniem. Jeżeli pierwszy raz o tym słyszysz, powinieneś zajrzeć do któregoś z wielu przewodników dostępnych w sieci.
Przykład 6.2. kopiowanie ścieżki dźwiękowej
Dwuprzebiegowe kodowanie DVD do MPEG-4 ("DivX") AVI z kopiowaniem ścieżki dźwiękowej.
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o /dev/null
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
-oac copy -o output.avi
Przykład 6.3. kodowanie ścieżki dźwiękowej
Dwuprzebiegowe kodowanie DVD do MPEG-4 ("DivX") AVI z kodowaniem ścieżki dźwiękowej do MP3. Uważaj stosując tę metodę, ponieważ w niektórych przypadkach może zaowocować desynchronizacją audio/video.
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
-oac mp3lame -lameopts vbr=3 -o /dev/null
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
-oac mp3lame -lameopts vbr=3 -o output.avi
MEncoder obsługuje kodowanie do formatu video Sony PSP, ale, w zależności od wersji oprogramowania PSP, wymaga różnych ograniczeń. Powinieneś byś bezpieczny, jeśli respektujesz poniższe ograniczenia:
Bitrate: nie powinno przekraczać 1500kbps, jednakże poprzednie wersje obsługiwały praktycznie dowolny bitrate jeśli tylko nagłówek twierdził że nie jest za wysokie.
Wymiary: wysokość i szerokość filmu PSP powinny być wielokrotnościami 16, a iloczyn szerokość * wysokość musi być <= 64000. W niektórych okolicznościach może być możliwe że PSP odtworzy wyższe rozdzielczości.
Audio: powinno mieć częstotliwość próbkowania 24kHz dla MPEG-4 i 48kHz dla H.264.
Przykład 6.4. kodowanie dla PSP
mencoder -ofps 30000/1001 -af lavcresample=24000 -vf harddup -oac lavc \ -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:acodec=libfaac \ -of lavf -lavfopts format=psp \wejściowe.video
-owyjście.psp
Możesz też ustawić tytuł filmu dzięki
-info name=TytułFilmu
.
MEncoder może tworzyć pliki formatu MPEG (MPEG-PS). Zazwyczaj, jeśli używasz filmu MPEG-1 albo MPEG-2, to jest tak ponieważ kodujesz na ograniczony format, taki jak SVCD, VCD albo DVD. Specyficzne ograniczenia tych formatów są wyjaśnione w przewodniku tworzenia VCD i DVD.
Aby zmienić wyjściowy format plików MEncodera, użyj opcji -of mpeg.
Przykład:
mencoderwejscie.avi
-of mpeg -ovc lavc -lavcopts vcodec=mpeg1video \ -oac copyinne_opcje
-owyjście.mpg
Tworzenie pliku MPEG-1, który można odtworzyć na systemach z minimalną obsługą multimedialną, taką jak domyślne instalacje Windows:
mencoderwejscie.avi
-of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 \ -owyjście.mpg
-oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \ -lavcopts vcodec=mpeg1video:vbitrate=1152:keyint=15:mbd=2:aspect=4/3
To samo, ale używając muxera MPEG z libavformat
:
mencoderwejście.avi
-oVCD.mpg
-ofps 25 -vf scale=352:288,harddup -of lavf \ -lavfopts format=mpg:i_certify_that_my_video_stream_does_not_use_b_frames \ -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \ -lavcopts vcodec=mpeg1video:vrc_buf_size=327:keyint=15:vrc_maxrate=1152:vbitrate=1152:vmax_b_frames=0
Jeżeli z jakiegoś powodu nie satysfakcjonuje Cię jakość video z drugiego przebiegu, możesz ponownie uruchomić kodowanie swojego video z inną docelową szybkością transmisji (bitrate), zakładając, że zapisałeś statystyki pliku z poprzedniego przebiegu. Jest to możliwe, ponieważ głównym celem pliku ze statystykami jest zapamiętanie złożoności każdej z ramek, co nie zależy zbyt mocno od szybkości transmisji. Weź jednak pod uwagę, że uzyskasz najlepsze wyniki, jeżeli wszystkie przebiegi będą uruchomione z nieróżniącymi się za bardzo docelowymi szybkościami transmisji.
Często zachodzi potrzeba zmiany wielkości obrazu. Powodów tego może być wiele: zmniejszenie rozmiaru pliku, przepustowość sieci, itd. Większość ludzi stosuje przeskalowywanie nawet przy konwertowaniu płyt DVD, SVCD do DivX AVI. Jeżeli chcesz przeskalowywać, przeczytaj sekcję o zachowywaniu proporcji obrazu.
Proces skalowania obsługiwany jest przez filtr video scale
:
-vf scale=szerokość
:wysokość
.
Jego jakość może być ustawiona parametrem -sws.
Jeśli nie jest on podany MEncoder użyje wartości 2: bicubic.
Sposób użycia:
mencoderwejscie.mpg
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \ -vf scale=640:480 -owyjście.avi
MEncoder obsługuje strumienie wejściowe na dwa sposoby: koduje lub kopiuje je. Ta sekcja jest o kopiowaniu.
Strumień video (opcja -ovc copy): ładne rzeczy można wyczyniać:) Jak wstawianie (nie konwertowanie) FLI, VIDO lub MPEG-1 video w plik AVI! Oczywiście tylko MPlayer potrafi odtwarzać takie pliki :) I prawdopodobnie nie ma dla tego żadnego sensownego zastosowania. Poważniej: kopiowanie strumieni video może być przydatne wtedy, gdy np. tylko strumień audio ma być zakodowany (np. nieskompresowane PCM do MP3).
Strumień audio (opcja -oac copy):
prosto i przystępnie. Możliwe jest wmiksowanie zewnętrznego źródła (MP3, WAV)
do strumienia wyjściowego. Użyj w tym celu opcji
-audiofile nazwa_pliku
.
Używanie -oac copy do kopiowania z jednego formatu przechowywania do innego może wymagać użycia -fafmttag żeby utrzymać znacznik formatu audio z oryginalnego zbioru. Na przykład jeśli konwertujesz zbiór NSV z audio zakodowanym AAC do formatu AVI, to znacznik formatu audio będzie nieprawidłowy i musi zostać zmieniony. Listę znaczników formatów audio znajdziesz w pliku codecs.conf.
Przykład:
mencoderwejście.nsv
-oac copy -fafmttag 0x706D \ -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -owyjście.avi
MEncoder jest w stanie stworzyć film z jednego lub wielu plików JPEG, PNG, TGA albo innych obrazków. Poprzez proste kopiowanie ramek może stworzyć pliki MJPEG (Motion (ruchomy - przypis tłumacza) JPEG), MPNG (Motion PNG) lub MTGA (Motion TGA).
Jak to działa:
MEncoder dekoduje wejściowy
obrazek/obrazki z pomocą biblioteki
libjpeg
(w przypadku dekodowania
PNG, skorzysta z libpng
).
Potem MEncoder kompresuje zdekodowane pliki podanym kompresorem (DivX4, Xvid, FFmpeg msmpeg4, itd.).
Przykłady. Opis i sposób działania funkcji -mf znajdują się na stronie man.
Tworzenie pliku MPEG-4 ze wszystkich plików JPEG w aktualnym katalogu:
mencoder mf://*.jpg
-mf w=800:h=600:fps=25:type=jpg -ovc lavc\ -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -owyjście.avi
Tworzenie pliku MPEG-4 z niektórych plików JPEG w aktualnym katalogu:
mencoder mf://ramka001.jpg,ramka002.jpg
-mf w=800:h=600:fps=25:type=jpg \ -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -owyjście.avi
Tworzenie plików MPEG-4 z jawnie podanej listy plików JPEG (list.txt w aktualnym katalogu, zawiera listę plików, które mają zostać użyte jako źródło, po jednym w każdym wierszu):
mencoder mf://@list.txt
-mf w=800:h=600:fps=25:type=jpg \ -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -owyjście.avi
Możesz mieszać rózne typy obrazków, niezależnie od używanej metody — wymieniane pliki, znaki globalne czy plik z listą — o ile oczywiście wszystkie mają te same wymiary. Możesz więc n.p. zrobić klatkę tytułową z obrazka PNG a potem umieścić pokaz swoich zdjęć JPEG.
Tworzenie pliku Motion JPEG (MJPEG) ze wszystkich plików JPEG w aktualnym katalogu:
mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc copy -ovc copy -o wyjście.avi
Tworzenie nieskompresowanego pliku ze wszystkich plików PNG w aktualnym katalogu:
mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc raw -oac copy -o wyjście.avi
Szerokość musi być liczbą podzielną przez 4, takie są ograniczenia formatu RAW RGB AVI.
Tworzenie pliku Motion PNG (MPNG) ze wszystkich plików PNG w aktualnym katalogu:
mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc copy -oac copy -o wyjście.avi
Tworzenie pliku Motion TGA (MTGA) ze wszystkich plików TGA w aktualnym katalogu:
mencoder mf://*.tga -mf w=800:h=600:fps=25:type=tga -ovc copy -oac copy -o wyjście.avi
MEncoder jest w stanie wyciągnąć napisy z DVD do pliku w formacie VOBsub. Tworzy je para plików z rozszerzeniem .idx i .sub, które są zazwyczaj spakowane do pojedyńczego archiwum .rar. MPlayer może je odtwarzać z opcjami -vobsub i -vobsubid.
Podajesz nazwę bazową (tzn. bez rozszerzenia .idx lub .sub) pliku wyjściowego opcją -vobsubout oraz indeks dla tego pliku opcją -vobsuboutindex.
Jeżeli źródłem nie jest DVD powinieneś użyć opcji -ifo, aby wskazać plik .ifo potrzebny do stworzenia pliku wynikowego .idx.
Jeżeli źródłem nie jest DVD i nie masz pliku .ifo, będziesz musiał użyć opcji -vobsubid, aby podać id języka, które będzie umieszczone w pliku .idx.
Każde uruchomienie dołączy do istniejących napisów, jeżeli pliki .idx i .sub istnieją. Powinieneś więc usunąć je przed uruchomieniem.
Przykład 6.5. Kopiowanie dwóch napisów z DVD podczas dwu-przebiegowego kodowania
rmnapisy.idx
napisy.sub
mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \ -vobsuboutnapisy
-vobsuboutindex 0 -sid 2 mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \ -vobsuboutnapisy
-vobsuboutindex 1 -sid 5
Przykład 6.6. Kopiowanie francuskich napisów z pliku MPEG
rmnapisy.idx
napisy.sub
mencoderfilm.mpg
-ifofilm.ifo
-vobsuboutnapisy
-vobsuboutindex 0 \ -vobsuboutid fr -sid 1 -nosound -ovc copy
Pliki DVD i SVCD (tzn. MPEG-1/2) zawierają informacje o proporcji obrazu, która opisuje, jak odtwarzacz ma skalować strumień video, żeby ludzie nie byli jajogłowi (np.: 480x480 + 4:3 = 640x480). Jednak przy kodowaniu plików AVI (DivX) musisz być świadom, że nagłówek AVI nie przechowuje tej wartości. Przeskalowywanie jest obrzydliwe i czasochłonne, musi być jakiś lepszy sposób!
Jest
MPEG-4 posiada unikalną cechę: strumień video może posiadać swoją wartość proporcji obrazu. Tak, dokładnie jak pliki MPEG-1/2 (DVD, SVCD) i H.263. Niestety, istnieje tylko kilka odtwarzaczy video, pomijając MPlayera, które obsługują tę cechę MPEG-4.
Możliwość ta może być jedynie używana z kodekiem mpeg4
z biblioteki
libavcodec
.
Pamiętaj: chociaż MPlayer poprawnie odtworzy
stworzone pliki, inne odtwarzacze mogą użyć złych proporcji obrazu
(aspect ratio).
Z pewnością powinieneś wyciąć czarne pasy nad i pod obrazem.
Zobacz jak używać filtrów cropdetect
i crop
na stronie man.
Sposób użycia:
mencoderprzykładowy-svcd.mpg
-vf crop=714:548:0:14 -oac copy -ovc lavc \ -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -owyjście.avi
libavcodec
codec familyXvid
codecx264
codecVideo For Windows
codec family
Jednym z często zadawanych pytań jest "Jak zrobić rip najlepszej jakości przy danej objętości?". Innym pytaniem jest "Jak zrobić najlepszy możliwy rip? Nie ważne jaka będzie objętość, chcę najlepszej jakości."
To drugie pytanie jest przynajmniej źle postawione. W końcu, jeśli nie przejmujesz się wielkością pliku, mógłbyć po prostu skopiować strumień MPEG-2 z DVD. Pewnie, dostaniesz AVI wielkości około 5GB, ale jeśli chcesz najlepszej jakości i nie przejmujesz się wielkością to jest to najlepsze wyjście.
Tak na prawdę, powodem dla którego chcesz przekodować DVD na MPEG-4 jest to, że przejmujesz się wielkością pliku.
Ciężko jest pokazać książkowy przepis na tworzenie ripu DVD bardzo wysokiej
jakości. Trzeba wziąć pod uwagę kilka czynników, i powinieneś rozumieć
szczegóły procesu, albo jest duża szansa że nie będziesz zadowolony z wyników.
Poniżej zbadamy niektóre problemy i pokażemy przykład. Zakładamy że używasz
libavcodec
do kodowania obrazu,
chociaż ta sama teoria działą też przy innych kodekach.
Jeśli to wydaje Ci się za dużo, to pewnie powinieneś użyć jednej z wielu nakładek dostępnych w sekcji MEncodera naszej strony z powiązanymi projektami. W ten sposób, powinno się udać otrzymać ripy wysokiej jakości bez zbyt myślenia za dużo, ponieważ te narzędzia są projektowane by podejmować za Ciebie mądre decyzje.
Zanim w ogóle zaczniesz myśleć o kodowaniu filmu, musisz przejść kilka wstępnych kroków.
Pierwszym i najważniejszym krokiem przed kodowaniem powinno być ustalenie jakim typem filmu się zajmujesz. Jeśli Twój film jest z DVD albo telewizji (zwykłej, kablowej czy satelitarnej), będzie w jednym z dwóch formatów: NTSC w Ameryce Północnej i Japonii, PAL w Europie itp. Trzeba sobie jednak zdawać sprawę z tego, że jest to tylko format do prezentacji w telewizji, i często nie jest oryginalnym formatem filmu. Doświadczenie pokazuje że filmy NTSC są trudniejsze do kodowania, ponieważ jest więcej elementów do zidentyfikowania w źródle. Żeby zrobić odpowienie kodowanie musisz znać oryginalny format filmu. Nieuwzględnienie tego skutkuje wieloma wadami wynikowego pliku, na przykład brzydkie artefakty przeplotu i powtórzone albo zagubione klatki. Poza tym że są brzydkie, artefakty są też szkodliwe dla kodowania: Dostaniesz gorszą jakość na jednostkę bitrate.
Poniżej jest lista popularnych typów materiału źródłowego, gdzie można je najczęściej znaleźć i ich własności:
Typowy film: Tworzony do wyświetlania przy 24fps.
Film PAL: Nagrywany kamerą video PAL z prędkością 50 pól na sekundę. Pole składa się tylko z parzystych albo nieparzystych linii klatki. Telewizja była projektowana by odświerzać je naprzemiennie, w charakterze taniej formy analogowej kompresji. Ludzkie oko podobno kompensuje ten efekt, ale jeśli zrozumiesz przeplot nauczysz się go widzieć też w telewizji i nigdy już nie będziesz z niej ZADOWOLONY. Dwa pola nie dają pełnej klatki, ponieważ są uchwycone co 1/50 sekundy, więc nie pasują do siebie, chyba że nie ma ruchu.
Film NTSC: Nagrany kamerą NTSC z prędkością 60000/1001 pól na sekundę, albo 60 pól na sekundę w erze przedkolorowej. Poza tym podobny do PAL.
Animacja: Zazwyczaj rysowana przy 24fps, ale zdarzają się też z mieszanym framerate.
Grafika komputerowa (CG): Może być dowolny framerate, ale niektóre są częstsze niż inne; wartości 24 i 30 klatek na sekundę są typowe dla NTSC, a 25fps jest typowe dla PAL.
Stary film: Rozmaite niższe framerate.
Filmy składające się z klatek nazywa się progresywnymi, podczas gdy te składające się z niezależnych pól nazywa się z przeplotem, albo filmem - chociaż ten drugi termin jest niejasny.
Żeby nie było za łatwo, niektóre filmy są kombinacją kilku powyższych typów.
Najważniejszą różnicą między tymi formatami, jest to że niektóre są oparte na klatkach a inne na polach. Zawsze gdy film jest przygotowywany do wyświetlania w telewizji jest przekształcany na format oparty na polach. Rozliczne metody którymi się tego dokonuje są wspólnie nazywane "telecine", a niesławne "3:2 pulldown" z NTSC jest jednym z jego rodzajów. Jeżeli oryginał nie był też oparty na polach (z tą samą prędkością), dostajesz film w innym formacie niż oryginał.
Jest kilka popularnych typów pulldown:
pulldown PAL 2:2: Najprzyjemniejszy z nich wszystkich. Każda klatka jest pokazywana przez czas dwóch pól, poprzez wydobycie parzystych i nieparzystych linii i pokazywanie ich na przemian. Jeśli oryginalny materiał miał 24fps, ten proces przyspiesza film o 4%.
pulldown PAL 2:2:2:2:2:2:2:2:2:2:2:3: Każda 12ta klatka jest pokazywana przez czas trzech pól zamiast tylko dwóch. Dzięki temu nie ma przyspieszenia o 4%, ale proces jest o wiele trudniejszy do odtworzenia. Zazwyczaj występuje w produkcjach muzycznych, gdzie zmiana prędkości o 4% poważnie by uszkodziła muzykę.
NTSC 3:2 telecine: Klatki są pokazywane na przemian przez czas 3ch albo 2ch pól. To daje częstotliwość pól 2.5 raza większą niż oryginalna częstotliwość klatek. Rezultat jest też lekko zwolniony z 60 pól na sekundę do 60000/1001 pól na sekundę by utrzymać częstotliwość pól w NTSC.
NTSC 2:2 pulldown: Używane do pokazywania materiałów 30fps na NTSC. Przyjemne, tak jak pulldown 2:2 PAL.
Są też metody konwersji między filmami PAL i NTSC, ale ten temat wykracza poza zakres tego podręcznika. Jeśli natkniesz się na taki film i chcesz go zakodować, to największe szanse masz robiąc kopię w oryginalnym formacie. Konwersja między tymi dwoma formatami jest wysoce destrukcyjna i nie może zostać ładnie odwrócona, więc kodowanie będzie o wiele gorszej jakości jeśli jest robione z przekonwertowanego źródła.
Gdy film jest zapisywany na DVD, kolejne pary pól są zapisywane jako klatka, pomimo tego że nie są przezaczone do wyświetlania razem. Standard MPEG-2 używany na DVD i w cyfrowej TV pozwala na zakodowanie oryginalnej progresywnej klatki i na przechowanie w nagłówku klatki ilości pól przez które ta klatka powinna być pokazana. Filmy zrobione przy użyciu tej metody są często określane mianem "miękkiego telecine" (soft-telecine), ponieważ proces ten tylko informuje odtwarzacz że ma on zastosować pulldown, a nie stosuje go samemu. Tak jest o wiele lepiej, ponieważ może to zostać łatwo odwrócone (a tak na prawdę zignorowane) przez koder i ponieważ zachowuje możliwie najwyższą jakość. Niestety, wielu producentów DVD i stacji nadawczych nie stosuje prawidłowych technik kodowania ale w zamian produkuje filmy przy użyciu "twardego telecine" (hard-telecine), gdzie pola są faktycznie powtórzone w zakodowanym MPEG-2.
Procedury radzenia sobie z takimi przypadkami będą omówione w dalszej części przewodnika. Teraz podamy tylko kilka wskazówek jak identyfikować z jakim typem materiału mamy do czynienia.
Regiony NTSC:
Jeśli MPlayer wyświetla w trakcie oglądania filmu że framerate zostało zmienione na 24000/1001 i nigdy nie powraca, to jest to prawie na pewno progresywny materiał na którym zastosowano "miękkie telecine".
Jeśli MPlayer pokazuje że framerate zmienia się między 24000/1001 i 30000/1001 i czasami widzisz "grzebienie" to jest kilka możliwości. Kawałki 24000/1001fps są prawie na pewno progresywne, poddane "miękkiemu telecine", ale fragmenty 30000/1001 fps mogą albo być 24000/1001 poddanym "twardemu telecine" albo filmem NTCS o 60000/1001 polach na sekundę. Używaj tych samych metod co w następnych dwóch przypadkach żeby je odróżnić.
Jeśli MPlayer nigdy nie pokazuje informacji o zmianie framerate i każda klatka z ruchem wygląda jak grzebień, to masz film NTSC z 60000/1001 polami na sekundę.
Jeśli MPlayer nigdy nie pokazuje informacji o zmianie framerate i dwie klatki z każdych pięciu mają grzebienie, to film jest 24000/1001 fps poddanym "twardemu telecine".
Regiony PAL:
Jeśli nie widzisz grzebieni, to jest to 2:2 pulldown.
Jeśli na przemian przez pół sekundy widzisz grzebienie a potem nie, to masz 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.
Jeśli zawsze widzisz grzebienie w trakcie ruchu, to film jest filmem PAL wyświetlanym z 50 polami na sekundę.
MPlayer może zwolnić odtwarzanie filmu opcją -speed albo odtwarzać klatka po klatce. Spróbuj użyć opcji -speed 0.2 żeby oglądać film bardzo wolno, albo naciskaj wielokrotnie klawisz "." żeby wyświetlać klatka po klatce. Może to pomóc zidentyfikować wzorzec jeśli nie możesz go dostrzec przy pełnej prędkości.
Jest możliwe zakodowanie filmu z szeroką gamą jakości. Z nowoczesnymi koderami i odrobiną kompresji przed kodekiem (zmniejszenie rozdzielczości i usuwanie szumu), możliwe jest osiągnięcie bardzo dobrej jakości przy 700 MB, dla 90-110 minutowego filmu kinowego. Dodatkowo tylko najdłuższe filmy nie dają się zakodować na 1400 MB z prawie doskonałą jakością.
Są trzy podejścia do kodowania video: stały bitrate (CBR), stały kwantyzator i tryb wieloprzebiegowy (ABR, uśrednione bitrate).
Złożoność klatek filmu, a zatem i ilość bitów potrzebna na ich zakodowanie, może się bardzo mocno zmieniać w zależności od sceny. Nowoczesne kodery potrafią się dostosowywać do tych zmian i zmieniać bitrate. Jednak w prostych trybach, takich jak CBR, kodery nie znają zapotrzebowania na bitrate w przyszłych scenach, więc nie mogą na długo przekraczać wymaganego bitrate. Bardziej zaawansowane tryby, takie jak kodowanie wieloprzebiegowe, potrafią wziąć pod uwagę statystyki z poprzednich przebiegów, co naprawia ten problem.
Większość kodeków obsługujących kodowanie ABR obsługuje tylko kodowanie
dwuprzebiegowe, podczas gdy niektóre inne, na przykład
x264
albo
Xvid
potrafią wykonywać wiele
przebiegów, z lekką poprawą jakości po każdym przebiegu. Jednak ta poprawa
nie jest zauważalna ani mierzalna po około 4tym przebiegu.
Dlatego też, w tej części, tryb dwuprzebiegowy i wieloprzebiegowy będą
używane zamiennie.
W każdym z tych trybów, kodek video (na przykład
libavcodec
)
dzieli klatkę obrazu na makrobloki 16x16 pikseli i stosuje do każdego z nich
kwantyzator. Im niższy kwantyzator, tym lepsza jakość i tym wyższe bitrate.
Metody jakiej koder używa do ustalenia kwantyzatora są różne i można nimi
sterować. (Jest to straszliwe uproszczenie, ale wystarcza do zrozumienia
podstaw.)
Kiedy podajesz stałe bitrate, kodek koduje usuwając tyle szczegółów ile musi
i tak mało jak to tylko możliwe żeby pozostać poniżej podanego bitrate.
Jeśli na prawdę nie obchodzi cię wielkość pliku, możesz użyć CBR i podać
nieskończone bitrate (W praktyce oznacza to bitrate na tyle wysokie że nie
stanowi bariery, na przykład 10000Kbit.) Bez żadnego ograniczenia na bitrate
kodek użyje najniższego możliwego kwantyzatora do każdej klatki (ustalonego
dla libavcodec
opcją
vqmin, domyślnie 2).
Gdy tylko podasz bitrate na tyle niskie że kodek musi używać wyższego
kwantyzatora, to prawie na pewno niszczysz film.
Żeby tego uniknąć, powinieneś pewnie zmniejszyć rozdzielczość filmu, metodą
opisaną dalej.
Ogólnie, jeśli zależy Ci na jakości, powinieneś unikać CBR.
Przy stałym kwantyzatorze, kodek używa na każdym makrobloku tego samego
kwantyzatora, podanego opcją vqscale
(w przypadku libavcodec
).
Jeśli chcesz możliwie najlepszy efekt, znów ignorując bitrate, możesz użyć
vqscale=2. Da to ten sam bitrate i PSNR (peak
signal-to-noise ratio, szczytowa proporcja sygnału do szumu) co CBR
z vbitrate=nieskończoność i domyślnym
vqmin.
Problemem przy stałym kwantyzatorze jest to, że używa podanego kwantyzatora niezależnie od tego czy makroblok tego wymaga czy nie. To znaczy że można by było zastosować do makrobloku wyższy kwantyzator bez utraty postrzegalnej jakości. Dlaczego marnować bity na niepotrzebnie niski kwantyzator? Mikroprocesor ma tyle cykli ile jest czasu, ale jest tylko ograniczona ilość bitów na twardym dysku.
Przy kodowaniu dwuprzebiegowym, pierwszy przebieg potraktuje film jak przu ustawieniu CBR, ale zachowa informacje o własnościach każdej klatki. Te dane są później używane przy drugim przebiegu do podejmowania słusznych decyzji o używanym kwantyzatorze. Przy szybkich scenach albo niewielu szczegółach pewnie użyje większego kwantyzatora, podczas gdy dla powolnych, szczegółowych scen będzie niższy kwantyzator.
Jeśli używasz vqscale=2 to marnujesz bity. Jeśli używasz vqscale=3 to nie dostajesz najlepszej możliwej jakości. Załóżmy że zakodowałeś swoje DVD przy vqscale=3 i dostałeś bitrate 1800Kbit. Jeśli zrobisz dwa przebiegi z vbitrate=1800 ostateczny wynik będzie miał wyższą jakość przy tym samym bitrate.
Ponieważ jesteś już przekonany że prawidłowym wyborem są dwa przebiegi, prawdziwym pytaniem jest jakiego bitrate użyć. Nie ma jednej odpowiedzi. Idealnie chcesz wybrać bitrate będący najlepszym kompromisem między jakością a wielkością pliku. To się zmienia w zależności od filmu.
Jeśli wielkość nie ma znaczenia, dobrym punktem wyjściowym do bardzo wysokiej jakości jest około 2000Kbit plus minus 200Kbit. Jeśli jest dużo akcji albo szczegółów, albo po prostu masz bardzo wrażliwe oko, możesz się zdecydować na 2400 albo 2600. Przy niektórych DVD możesz nie zauważyć różnicy przy 1400Kbit. Dobrym pomysłem jest poeksperymentowanie z kilkoma scenami i różnymi wartościami bitrate żeby nabrać wyczucia.
Jeśli chcesz konkretnej wielkości, musisz jakoś obliczyć bitrare.
Ale zanim to zrobisz, musisz wiedzieć ile miejsca potrzebujesz na dźwięk,
więc powinieneś ściągnąć go
najpierw.
Możesz wyliczyć bitrate z następującego równania:
bitrate = (wielkość_docelowa_w_MBajtach - wielkość_dźwięku_w_MBajtach)
* 1024 * 1024 / długość_w_sekundach * 8 / 1000
Na przykład by wcisnąć dwugodzinny film na płytkę 702MB, z 60MB ścieżki
dźwiękowej, bitrate video musi być:
(702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000
= 740kbps
Ze względu na naturę kodowania typu MPEG istnieją różne ograniczenia których warto się trzymać żeby osiągnąć najlepszą jakość. MPEG dzieli obraz na kwadraty 16x16 pikseli nazywane makroblokami, każdy z nich składa się z 4 bloków 8x8 informacji o jasności (luminancja, luma) i dwóch 8x8 z połową rozdzielczości (jeden na składową czerwono-morską, drugi na niebiesko-żółtą). Nawet jeśli wysokość i szerokość filmu nie są wielokrotnościami 16, koder użyje tyle makrobloków żeby przykryć cały obszar obrazu, dodatkowa przestrzeń zostanie zmarnowana. Zatem w interesie zwiększenai jakości przy utrzymaniu wielkości pliku kiepskim pomysłem jest używanie wymiarów które nie są wielokrotnością 16.
Większość DVD ma też jakieś czarne ramki na brzegach. Zostawienie ich tam mocno zaszkodzi jakości na kilka sposobów.
Kompresje typu MPEG są zależne od transformat przestrzeni częstotliwości, a dokładniej Dyskretnej Transformaty Cosinusowej (DCT), która jest podobna do transformaty Fouriera. Ten sposób kodowania jest efektywny przy wzorach i gładkich przejściach, ale kiepsko sobie radzi z ostrymi krawędziami. Żeby je zakoować, musi używać o wiele większej liczby bitów, albo wystąpią artefakty znane jako pierścienie.
Transformacja częstotliwości (DCT) jest stosowana osobno do każdego makrobloku (tak na prawdę do każdego bloku), więc ten problem istnieje tylko gdy ostra krawędź jest wewnątrz bloku. Jeśli czarna ramka zaczyna się dokładnie na krawędzi 16-pikselowego bloku, nie stwarza problemów. Jednakże, rzadko kiedy takie ramki są ładnie wyrównane, więc zazwyczaj będzie trzeba przyciąć obraz żeby tego uniknąć.
Poza transformatami przestrzeni częstotliwości, kompresje typu MPEG używają wektorów ruchu, by reprezentować zmiany między sąsiednimi klatkami. Oczywiście wektory ruchu są mniej efektywne w stosunku do nowej treści przychodzącej z brzegów obrazka, ponieważ nie było jej na poprzedniej klatce. Jeśli obraz rozciąga się do krawędzi zakodowanego regionu, wektory ruchu radzą sobie z treścią wychodzącą poza krawędzie. Jednak jeśli są ramki, mogą być kłopoty:
Dla każdego makrobloku, kompresja typu MPEG przechowuje wektor opisujący która część poprzedniej klatki powinna być skopiowana do tego makrobloku jako podstawa do przewidzenia następnej klatki. Zakodowane wtedy muszą być tylko różnice. Jeśli makroblok zawiera fragment ramki, to wektory ruchu z pozostałych cześci obrazu zamażą obramowanie. Oznacza to że dużo bitów będzie zużytych albo na jej powtórne zaczernienie albo (co bardziej prawdopodobne), wektor ruchu w ogóle nie będzie użyty i wszystkie zmiany w tym makrobloku będzie trzeba zakodować bezpośrednio. W obu przypadkach, bardzo cierpi na tym efektywność kodowania.
Powtórnie, ten problem występuje tylko jeśli ramki nie są na krawędziach 16-pikselowych bloków.
W końcu, przypuśćmy że mamy makroblok wewnątrz obrazu i obiekt dostaje się do niego z okolic krawędzi. Kodowanie typu MPEG nie potrafi powiedzieć "skopiuj część która jeest wewnątrz obraka, ale nie czarne obramowanie." Dlatego obramowanie też zostanie skopiowane i trzeba będzie zużyć sporo bitów żeby zakodować fragment obrazu który powinien tam być.
Jeśli obraz sięga do krawędzi zakodowanego obszaru, MPEG ma specjalne optymalizacje do wielokrotnego kopiowania ostatniego rzędu pikseli jeśli wektor ruchu przychodzi z poza zakodoanego obszaru. Staje się to bezużyteczne gry obraz ma czarne obramowanie. W odróżnieniu od problemów 1 i 2 tutaj nic nie pomoże ustawienie obramowania w odpowiednim miejscu.
Mimo tego, że obramowanie jest całkowicie czarne i nigdy się nie zmienia, zawsze jest pewien narzut związany z większą ilością makrobloków.
Ze wszystkich tych powodów zalecane jest całkowite wycięcie czarnych obramowań. Dodatkowo, jeśli przy krawędziach jest obszar zakłóceń/zniekształceń, obcięcie go również poprawi efektywność kodowania. Puryści, którzy chcą możliwie dokładnie zachować oryginał mogą się sprzeciwiać, ale jeśli nie planujesz używać stałego kwantyzatora to jakość uzyskana dzięki skadrowaniu znacząco przewyższy utratę informacji przy brzegach.
Przypomnijmy z poprzedniej części że ostateczna wielkość (wysokość i szerokość) obrazu do kodowania powinna być wielokrotnością 16. Można to osiągnąć kadrowaniem, skalowaniem albo kombinacją obydwu.
Przy kadrowaniu, jest kilka reguł których musimy przestrzegać by uniknąć uszkodzenia filmu. Zwykły format YUV, 4:2:0, przechowuje wartości koloru podpróbkowane, czyli kolor jest próbkowany o połowę rzadziej w każdym kierunku niż jasność. Spójrzmy na diagram, na którym L oznacza punkty próbkowania jasności (luma) a C koloru (chroma).
L | L | L | L | L | L | L | L |
C | C | C | C | ||||
L | L | L | L | L | L | L | L |
L | L | L | L | L | L | L | L |
C | C | C | C | ||||
L | L | L | L | L | L | L | L |
Jak widać, wiersze i kolumny obrazu w sposób naturalny łączą się w pary. Dlatego przesunięcia i wymiary kadrowania muszą być liczbami parzystymi. Jeśli nie są, barwa nie będzie już dobrze dopasowana do jasności. Teoretycznie możliwe jest kadrowanie z nieparzystym przesunięciem, ale wymaga to przepróbkowania kolorów, co jest potencjalnie stratną operacją nie obsługiwaną przez filtr kadrowania.
Dalej, film z przeplotem jest kodowany jak poniżej:
Górne pole | Dolne pole | ||||||||||||||
L | L | L | L | L | L | L | L | ||||||||
C | C | C | C | ||||||||||||
L | L | L | L | L | L | L | L | ||||||||
L | L | L | L | L | L | L | L | ||||||||
C | C | C | C | ||||||||||||
L | L | L | L | L | L | L | L | ||||||||
L | L | L | L | L | L | L | L | ||||||||
C | C | C | C | ||||||||||||
L | L | L | L | L | L | L | L | ||||||||
L | L | L | L | L | L | L | L | ||||||||
C | C | C | C | ||||||||||||
L | L | L | L | L | L | L | L |
Jak widać, wzór powtarza się dopiero po 4 liniach. Dlatego przy filmie z przeplotem, pionowa współrzędna i wysokość kadrowania muszą być wielokrotnościami 4.
Podstawową rozdzielczością DVD jest 720x480 dla NTSC i 720x576 dla PAL, ale jest też flaga proporcji, która określa czy obraz jest ekranowy (4:3) czy panoramiczny (16:9). Wiele (jeśli nie większość) panoramicznych DVD nie jest dokładnie 16:9 tylko raczej 1,85:1 lub 2,35:1 (cinescope). Oznacza to że będzie czarne obramowanie na filmie, które trzeba usunąć.
MPlayer dostarcza filtr wykrywania kadrowania (-vf cropdetect), który określi prostokąt kadrowania. Uruchom MPlayera z opcją -vf cropdetect a wydrukuje on ustawienia kadrowania potrzebne do usunięcia obramowania. Powinieneś puścić film wystarczająco długo żeby został użyty cały obszar obrazu, inaczej wartości będą niedokładne.
Potem przetestuj otrzymane wartości z użyciem MPlayera, przekazując opcje podane przez cropdetect i dostosowując prostokąt według potrzeb. Filtr rectangle może w tym pomóc, pozwalając na interaktywne ustawienie prostokąta kadrowania na filmie. Pamiętaj, by trzymać się powyższych reguł podzielności, żeby nie przestawić płaszczyzny koloru.
W pewnych przypadkach skalowanie może być niepożądane. Skalowanie w kierunku pionowym jest trudne przy filmie z przeplotem, a jeśli chcesz zachować przeplot, zazwyczaj powinieneś się wstrzymać od skalowania. Jeśl nie chcesz skalować, ale nadal chcesz używać wymiarów będących wielokrotnościami 16 to musisz przekadrować. NIe należy niedokadrowywać, bo obramowania są bardzo szkodliwe przy kodowaniu!
Ponieważ MPEG-4 używa makrobloków 16x16, powinieneś się upewnić, że każdy wymiar kodowanego filmu jest wielokrotnością 16, inaczej degradujemy jakość, zwłaszcza przy niższych bitrate. Można tego dokonać zaokrąglając wysokość i szerokość prostokąta kadrowania do najbliższej wielokrotności 16. Jak powiedziano wcześniej, trzeba zwiększyć przesunięcie pionowe o połowę różnicy między starą a nową wysokością, żeby wynikowy film był brany ze środka klatki. A ze względu na sposób w jaki próbkowane jest DVD, upewnij się że przesunięcie jest parzyste (w zasadzie, stosuj się do reguły, żeby nigdy nie używać nieparzystych wartości przy przycinaniu i skalowaniu obrazu). Jeśli nie czujesz się dobrze odrzucając dodatkowe piksele, może wolisz przeskalować video. Przyjżymy się temu w przykładzie poniżej. Możesz też pozwolić filtrowi cropdetect zrobić to wszystko za Ciebie, jako że ma on opcjonalny parametr round (zaokrąglenie), domyślnie równy 16.
Uważaj też na "poł-czarne" piksele na przegach. Też je wykadruj, albo będziesz na nie marnował bity któ?e przydadzą się gdzie indziej.
Po tym wszystkim prawdopodobnie dostaniesz film który nie ma dokładnie
proporcji 1,85:1 ani 2,35:1 tylko coś podobnego.
Mógłbyś samemu policzyć nowe proporcje, ale MEncoder
ma pocję do libavcodec
nazywaną
autoaspect która zrobi to za Ciebie.
Nie powinieneś przeskalowywać video żeby wyrównać piksele, chyba że chcesz
marnować miejsce na dysku.
Skalowanie powinno być robione przy odtwarzaniu, a odtwarzacz używa informacji
o proporcjach zapisanych w AVI żeby określić prawidłową rozdzielczość.
Niestety, nie wszystkie odtwarzacze uznają te informacje,
dlatego mimo wszystko możesz chcieć przeskalować.
Jeśli nie kodujesz w trybie stałego kwantyzatora, musisz wybrać bitrate. Jest to dość prosta rzecz – to (średnia) ilość bitów jaka będzie używana do zakodowania jednej sekundy filmu. Zazwyczaj bitrate mierzy się w kilobitach (1000 bitów) na sekundę. Wielkość filmu na dysku to bitrate razy długość filmu, plus drobne "dodatki" (patrz na przykład sekcja o kontenerze AVI ). Pozostałe parametry, takie jak skalowanie, kadrowanie itp. nie zmienią wielkości pliku jeśli nie zmienisz też bitrate!
Bitrate nie skaluje się proporcjonalnie do rozdzielczości. To znaczy, film 320x240 w 200 kbit/s nie będzie tej samej jakości co ten sam film w 640x480 i 800 kbit/s! Są ku temu dwie przyczyny:
Wizualna: Łatwiej zauważyć artefakty MPEG jeśli są bardziej powiększone! Artefakty powstają na poziomie bloków (8x8). Ludzkie oko trudniej dostrzega błędy w 4800 małych blokach niż w 1200 dużych (zakładając że skalujesz na pełny ekran).
Teoretyczna: Kiedy zmniejszasz obraz ale nadal używasz tych samych bloków 8x8 do transformacji przestrzeni częstotliwości. masz więcej danych w pasmach wyższych częstotliwości. W pewien sposób każdy piksel ma więcej szczegółów niż poprzednio. Dlatego, mimo że przeskalowany obraz zawiera 1/4 informacji jeśli chodzi o wielkość, to nadal może zawierać większość informacji w przestrzeni częstotliwości (zakładając że wysokie częstotliwości były mało używane w oryginalnym filmie 640x480).
Poprzednie podręczniki zalecały dobranie bitrate i rozdzielczości w sposób bazujący na podejściu "bity na piksel", ale z powyższych powodów zazwyczaj nie jest to prawidłowe. Lepszym przybliżeniem zdaje się skalowanie bitrate proporcjonalnie do pierwiastka kwadratowego z rozdzielczości, czyli film 320x240 i 400 kbit/s powinien być podobny do 640x480 i 800 kbit/s. Nie zostało to jednak zweryfikowane ani teoretycznie ani empirycznie. Dodatkowo, ponieważ filmy są bardzo zróżnicowane jeśli chodzi o szum, szczegóły, ilość ruchu itp. bezsensowne jest podawanie ogólnych zaleceń na bity na przekątą (analogia bitów na piksel używająca pierwiastka).
Omówiliśmy więc problemy z wyborem bitrate i rozdzielczości.
Następne kroki przeprowadzą Cię przez obliczenie rozdzielczości dla Twojego
filmu bez zniekształcania go za bardzo, biorąc pod uwagę kilka typów informacji
o źródłowym filmie.
Najpierw powinieneś policzyć zakodowane proporcje:
ARc = (Wc x (ARa / PRdvd )) / Hc
gdzie:
Hc i Wc to wysokość i szerokość skadrowanego filmu.
ARa do wyświetlane proporcje, zazwyczaj 4/3 lub 16/9.
PRdvd to proporcje na DVD równe 1,25=(720*576) dla DVD PAL i 1,5=(720/480) dla VD NTSC.
Potem możesz policzyć rozdzielczość X i Y, zgodnie z dobranym wskażnikiem
Jakości Kompresji (Compression Quality, CQ):
RozY = INT(Pierw( 1000*Bitrate/25/ARc/CQ )/16) * 16
i
RozX = INT( ResY * ARc / 16) * 16
,
gdzie INT oznacza zaokrąglenie do liczby całkowitej.
Dobrze, ale co to jest CQ? CQ reprezentuje ilość bitów na piksel i klatkę kodowania. Z grubsza biorąc, im większe CQ tym mniejsza szansa na zobaczenie artefaktów kodowania. Jednakże, jeśli masz docelową wielkość filmu (na przykład 1 lub 2 płyty CD), masz ograniczoną ilość bitów do zużycia; dlatego musisz znaleźć równowagę między poziomem kompresji i jakością.
CQ zależy od bitrate, efektywności kodeka video i rozdzielczości filmu.
Żeby podnieść CQ zazwyczej zmniejszysz film, ponieważ bitrate jest funkcją docelowej wielkości i długości filmu, które są stałe.
Przy użyciu kodeków MPEG-4 ASP, takich jak
Xvid
i
libavcodec
, CQ niższe niż 0,18
zazwyczaj daje kiepski obraz, ponieważ nie ma dość bitów by zakodować
informacje z każdego makrobloku.
(MPEG4, jak wiele innych kodeków, grupuje piksele w bloki żeby
skompresować obraz. Jeśli nie ma dość bitów widać krawędzie tych bloków.)
Dlatego też mądrze jest wybrać CQ w zakresie 0,20 do 0,22 na film jednopłytkowy
i 0,26-0,28 na dwupłytkowy przy standardowych opcjach kodowania.
Bardziej zaawansowane opcje kodowania, takie jak te podane tutaj dla
libavcodec
i
Xvid
powinny umożliwić otrzymanie takiej samej jakości z CQ w zakresie 0,18 do 0,20
na 1 CD i 0,24 do 0,26 na 2 CD.
Z kodekami MPEG-4 AVC, takimi jak
x264
, możesz używać CQ w zakresie
0,14 do 0,16 przy standardowych opcjach
a powinno się też udać zejść do 0,10 do 0,12 z
zaawansowanymi opcjami kodowania x264
.
Pamiętajmy, że CQ jest tylko przydatnym odnośnikiem, zależnym od kodowanego filmu. CQ równe ,018 może wyglądać dobrze przy Bergmanie, w przeciwieństwie do filmu takiego jak Martix, który zaawiera wiele bardzo ruchliwych scen. Z drugiej strony, bezsensowne jest podnoszenie CQ powyżej 0,30 jako że marnuje się bity bez zauważalnej poprawy jakości. Pamiętajmy też że, jak było wspomniane wcześniej, filmy w niższej rozdzielczości potrzebują większego CQ (w porównaniu do na przykład rozdzielczości DVD) żeby dobrze wyglądać.
Bardzo ważne do robienia dobrych kodowań jest nauczenie się posługiwania systemem filtrów MEncodera. Całe przetwarzanie video jest wykonywane przez filtry – kadrowanie, skalowanie, dopasowywanie kolorów, usuwanie szumu, telecine, odwrócone telecine, usuwanie bloków żeby wymienić choć część. Poza dużą ilością obsługiwanych formatów wejściowych to właśnie zakres dostępnych filtrów jest jedną z głównych przewag MEncodera nad podobnymi programami.
Filtry są ładowane do łańcucha przy pomocy opcji -vf:
-vf filtr1=opcje,filtr2=opcje,...
Większość filtrów przyjmuje kilka parametrów numerycznych oddzielanych dwukropkami, ale dokładna składnia zależy od filtru więc szczegóły odnośnie filtrów, które chcesz zastosować, znajdziesz na stronie man.
Filtry działają na filmie w kolejnoścy w jakiej zostały załadowane. Na przykład następujący łańcuch:
-vf crop=688:464:12:4,scale=640:464
najpierw skadruje fragment 688x464 filmu z lewym górnym rogiem na pozycji (12,4) a potem zmniejszy rozdzielczość wyniku do 640x464.
Niektóre filtry trzeba ładować na początku lub blisko początku łańcucha, ponieważ korzystają one z informacji którą następne filtry mogą zgubić lub unieważnić. Sztandarowym przykłądem jest pp (postprocessing, tylko gdy wykonuje operacje usuwania bloków lub pierścieni), spp (inny postprocessor do usuwania artefaktów MPEG), pullup (odwrócone telecine) i softpulldown (konwertuje miękkie telecine na twarde).
W ogólności chcesz przeprowadzać jak najmniej filtrowania żeby film pozostał możliwie bliski oryginałowi. Kadrowanie często jest niezbęne (jak opisano powyżej) ale staraj się uniknąć skalowania. Chociaż czasami zmniejszenie rozdzielczości jest lepszym wyjściem niż użycie wyższego kwantyzatora, chcemy uniknąć obu: pamiętajmy, że od początku zdecydowaliśmy się wybrać jakość kosztem wielkości.
Nie należy też dostosowywać gammy, kontrastu, jasności itp. Co wygląda dobrze na Twoim ekranie może nie być tak dobre na innych. Takie dostrojenia powinny być wykonywane tylko przy odtwarzaniu.
Jedną rzeczą którą możesz chcieć zrobić, jest przepuszczenie filmu przez bardzo lekkie usuwanie szumów, takie jak -vf hqdn3d=2:1:2. Znów, to kwestia lepszego zastosowania bitów: po co marnować je na zakodowanie szumu skoro można dodać ten szum przy odtwarzaniu? Zwiększenie parametrów dla hqdn3d jeszcze bardziej poprawi kompresowalność, ale jeśli przesadzisz to zauważalnie zniekształcisz obraz. Wartości sugerowane powyżej (2:1:2) są dość konserwatywne; nie bój się eksperymentować z wyższymi wartościami i samemu oceniać wyniki.
Prawie wszystkie filmy są kręcone przy 24 fps. Ponieważ NTSC ma 30000/1001 fps potrzebna jest pewna przeróbka żeby film 24 fps mógł być wyświetlany z prawidłową szybkością NTSC. Ten proces nazywa się 3:2 pulldown, często zwany też telecine (ponieważ jest używany przy konwersji z kina do telewizji) i, w uproszczeniu, jest to spowolnienie filmu do 24000/1001 fps i powtórzenie co czwartej klatki.
Filmy DVD PAL, odtwarzanie przy 25 fps, nie wymagają żadnego specjalnego traktowania. (Technicznie rzecz ujmując, PAL może być poddany telecine, nazywanemu 2:2 pulldown, ale w praktyce nie jest to problemem.) Po prostu film 24 fps jest odtwarzany przy 25 fps. W wyniku tego film jest odtwarzany odrobinkę szybciej, ale jeśli nie masz nieziemskich zmysłów to tego nie zauważysz. Większość DVD PAL ma skorygowaną wysokość dźwięku, więc kiedy są odtwarzane przy 25 fps dźwięk będzie brzmiał poprawnie, mimo tego że ścieżka dźwiekowa (jak i cały film) jest o 4% krótsza niż DVD NTSC.
Ponieważ film na DVD PAL nie został zmieniony, nie ma powodu za bardzo przejmować się framerate. Oryginał ma 25 fps i Twój rip też będzie miał 25 fps. Jednak jeśli ripujesz film z DVD NTSC możesz być zmuszony do zastosowania odwrotnego telecine.
Dla filmów nagrywanych przy 24 fps obraz na DVD NTSC jest albo poddany telecine na 30000/1001 albo jest progresywny przy 24000/1001 i przeznaczony do poddania telecine w locie przez odtwarzacz DVD. Z drugiej strony seriale telewizyjne zazwyczaj mają tylko przeplot, nie są poddane telecine. Nie jest to reguła: Niektóre seriale (na przykład Buffy Łowca Wampirów) mają przeplot, a inne są mieszanką progresywnego i przeplotu (Angel, 24).
Jest wysoce zalecane żebyś przeczytał sekcję How to deal with telecine and interlacing in NTSC DVDs żeby dowiedzieć się jak sobie radzić z różnymi możliwościami.
Jednak jeśli zazwyczaj tylko ripujesz filmy, prawdopodobnie masz doczynienia z filmem 24 fps progresywnym lub poddanym telecine, a w takim przypadku możesz użyć filtra pullup podając parametr -vf pullup,softskip.
If the movie you want to encode is interlaced (NTSC video or PAL video), you will need to choose whether you want to deinterlace or not. While deinterlacing will make your movie usable on progressive scan displays such a computer monitors and projectors, it comes at a cost: The fieldrate of 50 or 60000/1001 fields per second is halved to 25 or 30000/1001 frames per second, and roughly half of the information in your movie will be lost during scenes with significant motion.
Therefore, if you are encoding for high quality archival purposes, it is recommended not to deinterlace. You can always deinterlace the movie at playback time when displaying it on progressive scan devices. The power of currently available computers forces players to use a deinterlacing filter, which results in a slight degradation in image quality. But future players will be able to mimic the interlaced display of a TV, deinterlacing to full fieldrate and interpolating 50 or 60000/1001 entire frames per second from the interlaced video.
Special care must be taken when working with interlaced video:
Crop height and y-offset must be multiples of 4.
Any vertical scaling must be performed in interlaced mode.
Postprocessing and denoising filters may not work as expected unless you take special care to operate them a field at a time, and they may damage the video if used incorrectly.
With these things in mind, here is our first example:
mencoder capture.avi
-mc 0 -oac lavc -ovc lavc -lavcopts \
vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224
Note the ilme and ildct options.
MEncoder's audio/video synchronization
algorithms were designed with the intention of recovering files with
broken sync.
However, in some cases they can cause unnecessary skipping and duplication of
frames, and possibly slight A/V desync, when used with proper input
(of course, A/V sync issues apply only if you process or copy the
audio track while transcoding the video, which is strongly encouraged).
Therefore, you may have to switch to basic A/V sync with
the -mc 0 option, or put this in your
~/.mplayer/mencoder
config file, as long as
you are only working with good sources (DVD, TV capture, high quality
MPEG-4 rips, etc) and not broken ASF/RM/MOV files.
If you want to further guard against strange frame skips and duplication, you can use both -mc 0 and -noskip. This will prevent all A/V sync, and copy frames one-to-one, so you cannot use it if you will be using any filters that unpredictably add or drop frames, or if your input file has variable framerate! Therefore, using -noskip is not in general recommended.
The so-called "three-pass" audio encoding which MEncoder supports has been reported to cause A/V desync. This will definitely happen if it is used in conjunction with certain filters, therefore, it is now recommended not to use three-pass audio mode. This feature is only left for compatibility purposes and for expert users who understand when it is safe to use and when it is not. If you have never heard of three-pass mode before, forget that we even mentioned it!
There have also been reports of A/V desync when encoding from stdin with MEncoder. Do not do this! Always use a file or CD/DVD/etc device as input.
Which video codec is best to choose depends on several factors, like size, quality, streamability, usability and popularity, some of which widely depend on personal taste and technical constraints.
Compression efficiency:
It is quite easy to understand that most newer-generation codecs are
made to increase quality and compression.
Therefore, the authors of this guide and many other people suggest that
you cannot go wrong
[1]
when choosing MPEG-4 AVC codecs like
x264
instead of MPEG-4 ASP codecs
such as libavcodec
MPEG-4 or
Xvid
.
(Advanced codec developers may be interested in reading Michael
Niedermayer's opinion on
"why MPEG4-ASP sucks".)
Likewise, you should get better quality using MPEG-4 ASP than you
would with MPEG-2 codecs.
However, newer codecs which are in heavy development can suffer from bugs which have not yet been noticed and which can ruin an encode. This is simply the tradeoff for using bleeding-edge technology.
What is more, beginning to use a new codec requires that you spend some time becoming familiar with its options, so that you know what to adjust to achieve a desired picture quality.
Hardware compatibility:
It usually takes a long time for standalone video players to begin to
include support for the latest video codecs.
As a result, most only support MPEG-1 (like VCD, XVCD and KVCD), MPEG-2
(like DVD, SVCD and KVCD) and MPEG-4 ASP (like DivX,
libavcodec
's LMP4 and
Xvid
)
(Beware: Usually, not all MPEG-4 ASP features are supported).
Please refer to the technical specs of your player (if they are available),
or google around for more information.
Best quality per encoding time:
Codecs that have been around for some time (such as
libavcodec
MPEG-4 and
Xvid
) are usually heavily
optimized with all kinds of smart algorithms and SIMD assembly code.
That is why they tend to yield the best quality per encoding time ratio.
However, they may have some very advanced options that, if enabled,
will make the encode really slow for marginal gains.
If you are after blazing speed you should stick around the default settings of the video codec (although you should still try the other options which are mentioned in other sections of this guide).
You may also consider choosing a codec which can do multi-threaded
processing, though this is only useful for users of machines with
several CPUs.
libavcodec
MPEG-4 does
allow that, but speed gains are limited, and there is a slight
negative effect on picture quality.
Xvid
's multi-threaded encoding,
activated by the threads option, can be used to
boost encoding speed — by about 40-60% in typical cases —
with little if any picture degradation.
x264
also allows multi-threaded
encoding, which currently speeds up encoding by 94% per CPU core while
lowering PSNR between 0.005dB and 0.01dB on a typical setup.
Personal taste:
This is where it gets almost irrational: For the same reason that some
hung on to DivX 3 for years when newer codecs were already doing wonders,
some folks will prefer Xvid
or libavcodec
MPEG-4 over
x264
.
You should make your own judgement; do not take advice from people who swear by one codec. Take a few sample clips from raw sources and compare different encoding options and codecs to find one that suits you best. The best codec is the one you master, and the one that looks best to your eyes on your display [2]!
Please refer to the section selecting codecs and container formats to get a list of supported codecs.
Audio is a much simpler problem to solve: if you care about quality, just leave it as is. Even AC-3 5.1 streams are at most 448Kbit/s, and they are worth every bit. You might be tempted to transcode the audio to high quality Vorbis, but just because you do not have an A/V receiver for AC-3 pass-through today does not mean you will not have one tomorrow. Future-proof your DVD rips by preserving the AC-3 stream. You can keep the AC-3 stream either by copying it directly into the video stream during the encoding. You can also extract the AC-3 stream in order to mux it into containers such as NUT or Matroska.
mplayersource_file.vob
-aid 129 -dumpaudio -dumpfilesound.ac3
will dump into the file sound.ac3
the
audio track number 129 from the file
source_file.vob
(NB: DVD VOB files
usually use a different audio numbering,
which means that the VOB audio track 129 is the 2nd audio track of the file).
But sometimes you truly have no choice but to further compress the sound so that more bits can be spent on the video. Most people choose to compress audio with either MP3 or Vorbis audio codecs. While the latter is a very space-efficient codec, MP3 is better supported by hardware players, although this trend is changing.
Do not use -nosound when encoding a file with audio, even if you will be encoding and muxing audio separately later. Though it may work in ideal cases, using -nosound is likely to hide some problems in your encoding command line setting. In other words, having a soundtrack during your encode assures you that, provided you do not see messages such as „Too many audio packets in the buffer”, you will be able to get proper sync.
You need to have MEncoder process the sound. You can for example copy the original soundtrack during the encode with -oac copy or convert it to a "light" 4 kHz mono WAV PCM with -oac pcm -channels 1 -srate 4000. Otherwise, in some cases, it will generate a video file that will not sync with the audio. Such cases are when the number of video frames in the source file does not match up to the total length of audio frames or whenever there are discontinuities/splices where there are missing or extra audio frames. The correct way to handle this kind of problem is to insert silence or cut audio at these points. However MPlayer cannot do that, so if you demux the AC-3 audio and encode it with a separate app (or dump it to PCM with MPlayer), the splices will be left incorrect and the only way to correct them is to drop/duplicate video frames at the splice. As long as MEncoder sees the audio when it is encoding the video, it can do this dropping/duping (which is usually OK since it takes place at full black/scene change), but if MEncoder cannot see the audio, it will just process all frames as-is and they will not fit the final audio stream when you for example merge your audio and video track into a Matroska file.
First of all, you will have to convert the DVD sound into a WAV file that the audio codec can use as input. For example:
mplayersource_file.vob
-ao pcm:file=destination_sound.wav
\ -vc dummy -aid 1 -vo null
will dump the second audio track from the file
source_file.vob
into the file
destination_sound.wav
.
You may want to normalize the sound before encoding, as DVD audio tracks
are commonly recorded at low volumes.
You can use the tool normalize for instance,
which is available in most distributions.
If you are using Windows, a tool such as BeSweet
can do the same job.
You will compress in either Vorbis or MP3.
For example:
oggenc -q1 destination_sound.wav
will encode destination_sound.wav
with
the encoding quality 1, which is roughly equivalent to 80Kb/s, and
is the minimum quality at which you should encode if you care about
quality.
Please note that MEncoder currently cannot
mux Vorbis audio tracks
into the output file because it only supports AVI and MPEG
containers as an output, each of which may lead to audio/video
playback synchronization problems with some players when the AVI file
contain VBR audio streams such as Vorbis.
Do not worry, this document will show you how you can do that with third
party programs.
Now that you have encoded your video, you will most likely want to mux it with one or more audio tracks into a movie container, such as AVI, MPEG, Matroska or NUT. MEncoder is currently only able to natively output audio and video into MPEG and AVI container formats. for example:
mencoder -oac copy -ovc copy -ooutput_movie.avi
\ -audiofileinput_audio.mp2
input_video.avi
This would merge the video file input_video.avi
and the audio file input_audio.mp2
into the AVI file output_movie.avi
.
This command works with MPEG-1 layer I, II and III (more commonly known
as MP3) audio, WAV and a few other audio formats too.
MEncoder features experimental support for
libavformat
, which is a
library from the FFmpeg project that supports muxing and demuxing
a variety of containers.
For example:
mencoder -oac copy -ovc copy -ooutput_movie.asf
-audiofileinput_audio.mp2
\input_video.avi
-of lavf -lavfopts format=asf
This will do the same thing as the previous example, except that
the output container will be ASF.
Please note that this support is highly experimental (but getting
better every day), and will only work if you compiled
MPlayer with the support for
libavformat
enabled (which
means that a pre-packaged binary version will not work in most cases).
You may experience some serious A/V sync problems while trying to mux your video and some audio tracks, where no matter how you adjust the audio delay, you will never get proper sync. That may happen when you use some video filters that will drop or duplicate some frames, like the inverse telecine filters. It is strongly encouraged to append the harddup video filter at the end of the filter chain to avoid this kind of problem.
Without harddup, if MEncoder wants to duplicate a frame, it relies on the muxer to put a mark on the container so that the last frame will be displayed again to maintain sync while writing no actual frame. With harddup, MEncoder will instead just push the last frame displayed again into the filter chain. This means that the encoder receives the exact same frame twice, and compresses it. This will result in a slightly bigger file, but will not cause problems when demuxing or remuxing into other container formats.
You may also have no choice but to use harddup with
container formats that are not too tightly linked with
MEncoder such as the ones supported through
libavformat
, which may not
support frame duplication at the container level.
Although it is the most widely-supported container format after MPEG-1, AVI also has some major drawbacks. Perhaps the most obvious is the overhead. For each chunk of the AVI file, 24 bytes are wasted on headers and index. This translates into a little over 5 MB per hour, or 1-2.5% overhead for a 700 MB movie. This may not seem like much, but it could mean the difference between being able to use 700 kbit/sec video or 714 kbit/sec, and every bit of quality counts.
In addition this gross inefficiency, AVI also has the following major limitations:
Only fixed-fps content can be stored. This is particularly limiting if the original material you want to encode is mixed content, for example a mix of NTSC video and film material. Actually there are hacks that can be used to store mixed-framerate content in AVI, but they increase the (already huge) overhead fivefold or more and so are not practical.
Audio in AVI files must be either constant-bitrate (CBR) or constant-framesize (i.e. all frames decode to the same number of samples). Unfortunately, the most efficient codec, Vorbis, does not meet either of these requirements. Therefore, if you plan to store your movie in AVI, you will have to use a less efficient codec such as MP3 or AC-3.
Having said all that, MEncoder does not currently support variable-fps output or Vorbis encoding. Therefore, you may not see these as limitations if MEncoder is the only tool you will be using to produce your encodes. However, it is possible to use MEncoder only for video encoding, and then use external tools to encode audio and mux it into another container format.
Matroska is a free, open standard container format, aiming to offer a lot of advanced features, which older containers like AVI cannot handle. For example, Matroska supports variable bitrate audio content (VBR), variable framerates (VFR), chapters, file attachments, error detection code (EDC) and modern A/V Codecs like "Advanced Audio Coding" (AAC), "Vorbis" or "MPEG-4 AVC" (H.264), next to nothing handled by AVI.
The tools required to create Matroska files are collectively called mkvtoolnix, and are available for most Unix platforms as well as Windows. Because Matroska is an open standard you may find other tools that suit you better, but since mkvtoolnix is the most common, and is supported by the Matroska team itself, we will only cover its usage.
Probably the easiest way to get started with Matroska is to use MMG, the graphical frontend shipped with mkvtoolnix, and follow the guide to mkvmerge GUI (mmg)
You may also mux audio and video files using the command line:
mkvmerge -ooutput.mkv
input_video.avi
input_audio1.mp3
input_audio2.ac3
This would merge the video file input_video.avi
and the two audio files input_audio1.mp3
and input_audio2.ac3
into the Matroska
file output.mkv
.
Matroska, as mentioned earlier, is able to do much more than that, like
multiple audio tracks (including fine-tuning of audio/video
synchronization), chapters, subtitles, splitting, etc...
Please refer to the documentation of those applications for
more details.
What is telecine? If you do not understand much of what is written in this document, read the Wikipedia entry on telecine. It is an understandable and reasonably comprehensive description of what telecine is.
A note about the numbers. Many documents, including the article linked above, refer to the fields per second value of NTSC video as 59.94 and the corresponding frames per second values as 29.97 (for telecined and interlaced) and 23.976 (for progressive). For simplicity, some documents even round these numbers to 60, 30, and 24.
Strictly speaking, all those numbers are approximations. Black and white NTSC video was exactly 60 fields per second, but 60000/1001 was later chosen to accommodate color data while remaining compatible with contemporary black and white televisions. Digital NTSC video (such as on a DVD) is also 60000/1001 fields per second. From this, interlaced and telecined video are derived to be 30000/1001 frames per second; progressive video is 24000/1001 frames per second.
Older versions of the MEncoder documentation and many archived mailing list posts refer to 59.94, 29.97, and 23.976. All MEncoder documentation has been updated to use the fractional values, and you should use them too.
-ofps 23.976 is incorrect. -ofps 24000/1001 should be used instead.
How telecine is used. All video intended to be displayed on an NTSC television set must be 60000/1001 fields per second. Made-for-TV movies and shows are often filmed directly at 60000/1001 fields per second, but the majority of cinema is filmed at 24 or 24000/1001 frames per second. When cinematic movie DVDs are mastered, the video is then converted for television using a process called telecine.
On a DVD, the video is never actually stored as 60000/1001 fields per second. For video that was originally 60000/1001, each pair of fields is combined to form a frame, resulting in 30000/1001 frames per second. Hardware DVD players then read a flag embedded in the video stream to determine whether the odd- or even-numbered lines should form the first field.
Usually, 24000/1001 frames per second content stays as it is when encoded for a DVD, and the DVD player must perform telecining on-the-fly. Sometimes, however, the video is telecined before being stored on the DVD; even though it was originally 24000/1001 frames per second, it becomes 60000/1001 fields per second. When it is stored on the DVD, pairs of fields are combined to form 30000/1001 frames per second.
When looking at individual frames formed from 60000/1001 fields per second video, telecined or otherwise, interlacing is clearly visible wherever there is any motion, because one field (say, the even-numbered lines) represents a moment in time 1/(60000/1001) seconds later than the other. Playing interlaced video on a computer looks ugly both because the monitor is higher resolution and because the video is shown frame-after-frame instead of field-after-field.
Notes:
This section only applies to NTSC DVDs, and not PAL.
The example MEncoder lines throughout the
document are not intended for
actual use. They are simply the bare minimum required to encode the
pertaining video category. How to make good DVD rips or fine-tune
libavcodec
for maximal
quality is not within the scope of this section; refer to other
sections within the MEncoder encoding
guide.
There are a couple footnotes specific to this guide, linked like this: [1]
Progressive video was originally filmed at 24000/1001 fps, and stored on the DVD without alteration.
When you play a progressive DVD in MPlayer, MPlayer will print the following line as soon as the movie begins to play:
demux_mpg: 24000/1001 fps progressive NTSC content detected, switching framerate.
From this point forward, demux_mpg should never say it finds "30000/1001 fps NTSC content."
When you watch progressive video, you should never see any interlacing. Beware, however, because sometimes there is a tiny bit of telecine mixed in where you would not expect. I have encountered TV show DVDs that have one second of telecine at every scene change, or at seemingly random places. I once watched a DVD that had a progressive first half, and the second half was telecined. If you want to be really thorough, you can scan the entire movie:
mplayer dvd://1 -nosound -vo null -benchmark
Using -benchmark makes MPlayer play the movie as quickly as it possibly can; still, depending on your hardware, it can take a while. Every time demux_mpg reports a framerate change, the line immediately above will show you the time at which the change occurred.
Sometimes progressive video on DVDs is referred to as "soft-telecine" because it is intended to be telecined by the DVD player.
Telecined video was originally filmed at 24000/1001, but was telecined before it was written to the DVD.
MPlayer does not (ever) report any framerate changes when it plays telecined video.
Watching a telecined video, you will see interlacing artifacts that seem to "blink": they repeatedly appear and disappear. You can look closely at this by
mplayer dvd://1
Seek to a part with motion.
Use the . key to step forward one frame at a time.
Look at the pattern of interlaced-looking and progressive-looking frames. If the pattern you see is PPPII,PPPII,PPPII,... then the video is telecined. If you see some other pattern, then the video may have been telecined using some non-standard method; MEncoder cannot losslessly convert non-standard telecine to progressive. If you do not see any pattern at all, then it is most likely interlaced.
Sometimes telecined video on DVDs is referred to as "hard-telecine". Since hard-telecine is already 60000/1001 fields per second, the DVD player plays the video without any manipulation.
Another way to tell if your source is telecined or not is to play
the source with the -vf pullup and -v
command line options to see how pullup matches frames.
If the source is telecined, you should see on the console a 3:2 pattern
with 0+.1.+2
and 0++1
alternating.
This technique has the advantage that you do not need to watch the
source to identify it, which could be useful if you wish to automate
the encoding procedure, or to carry out said procedure remotely via
a slow connection.
Interlaced video was originally filmed at 60000/1001 fields per second, and stored on the DVD as 30000/1001 frames per second. The interlacing effect (often called "combing") is a result of combining pairs of fields into frames. Each field is supposed to be 1/(60000/1001) seconds apart, and when they are displayed simultaneously the difference is apparent.
As with telecined video, MPlayer should not ever report any framerate changes when playing interlaced content.
When you view an interlaced video closely by frame-stepping with the . key, you will see that every single frame is interlaced.
All of a "mixed progressive and telecine" video was originally 24000/1001 frames per second, but some parts of it ended up being telecined.
When MPlayer plays this category, it will (often repeatedly) switch back and forth between "30000/1001 fps NTSC" and "24000/1001 fps progressive NTSC". Watch the bottom of MPlayer's output to see these messages.
You should check the "30000/1001 fps NTSC" sections to make sure they are actually telecine, and not just interlaced.
In "mixed progressive and interlaced" content, progressive and interlaced video have been spliced together.
This category looks just like "mixed progressive and telecine", until you examine the 30000/1001 fps sections and see that they do not have the telecine pattern.
As I mentioned in the beginning, example MEncoder lines below are not meant to actually be used; they only demonstrate the minimum parameters to properly encode each category.
Progressive video requires no special filtering to encode. The only parameter you need to be sure to use is -ofps 24000/1001. Otherwise, MEncoder will try to encode at 30000/1001 fps and will duplicate frames.
mencoder dvd://1 -oac copy -ovc lavc -ofps 24000/1001
It is often the case, however, that a video that looks progressive actually has very short parts of telecine mixed in. Unless you are sure, it is safest to treat the video as mixed progressive and telecine. The performance loss is small [3].
Telecine can be reversed to retrieve the original 24000/1001 content, using a process called inverse-telecine. MPlayer contains several filters to accomplish this; the best filter, pullup, is described in the mixed progressive and telecine section.
For most practical cases it is not possible to retrieve a complete progressive video from interlaced content. The only way to do so without losing half of the vertical resolution is to double the framerate and try to "guess" what ought to make up the corresponding lines for each field (this has drawbacks - see method 3).
Encode the video in interlaced form. Normally, interlacing wreaks
havoc with the encoder's ability to compress well, but
libavcodec
has two
parameters specifically for dealing with storing interlaced video a
bit better: ildct and ilme. Also,
using mbd=2 is strongly recommended
[2] because it
will encode macroblocks as non-interlaced in places where there is
no motion. Note that -ofps is NOT needed here.
mencoder dvd://1 -oac copy -ovc lavc -lavcopts ildct:ilme:mbd=2
Use a deinterlacing filter before encoding. There are several of these filters available to choose from, each with its own advantages and disadvantages. Consult mplayer -pphelp and mplayer -vf help to see what is available (grep for "deint"), read Michael Niedermayer's Deinterlacing filters comparison, and search the MPlayer mailing lists to find many discussions about the various filters. Again, the framerate is not changing, so no -ofps. Also, deinterlacing should be done after cropping [1] and before scaling.
mencoder dvd://1 -oac copy -vf yadif -ovc lavc
Unfortunately, this option is buggy with MEncoder; it ought to work well with MEncoder G2, but that is not here yet. You might experience crashes. Anyway, the purpose of -vf tfields is to create a full frame out of each field, which makes the framerate 60000/1001. The advantage of this approach is that no data is ever lost; however, since each frame comes from only one field, the missing lines have to be interpolated somehow. There are no very good methods of generating the missing data, and so the result will look a bit similar to when using some deinterlacing filters. Generating the missing lines creates other issues, as well, simply because the amount of data doubles. So, higher encoding bitrates are required to maintain quality, and more CPU power is used for both encoding and decoding. tfields has several different options for how to create the missing lines of each frame. If you use this method, then Reference the manual, and chose whichever option looks best for your material. Note that when using tfields you have to specify both -fps and -ofps to be twice the framerate of your original source.
mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc \ -fps 60000/1001 -ofps 60000/1001
If you plan on downscaling dramatically, you can extract and encode only one of the two fields. Of course, you will lose half the vertical resolution, but if you plan on downscaling to at most 1/2 of the original, the loss will not matter much. The result will be a progressive 30000/1001 frames per second file. The procedure is to use -vf field, then crop [1] and scale appropriately. Remember that you will have to adjust the scale to compensate for the vertical resolution being halved.
mencoder dvd://1 -oac copy -vf field=0 -ovc lavc
In order to turn mixed progressive and telecine video into entirely progressive video, the telecined parts have to be inverse-telecined. There are three ways to accomplish this, described below. Note that you should always inverse-telecine before any rescaling; unless you really know what you are doing, inverse-telecine before cropping, too [1]. -ofps 24000/1001 is needed here because the output video will be 24000/1001 frames per second.
-vf pullup is designed to inverse-telecine telecined material while leaving progressive data alone. In order to work properly, pullup must be followed by the softskip filter or else MEncoder will crash. pullup is, however, the cleanest and most accurate method available for encoding both telecine and "mixed progressive and telecine".
mencoder dvd://1 -oac copy -vf pullup,softskip -ovc lavc -ofps 24000/1001
-vf filmdint is similar to -vf pullup: both filters attempt to match a pair of fields to form a complete frame. filmdint will deinterlace individual fields that it cannot match, however, whereas pullup will simply drop them. Also, the two filters have separate detection code, and filmdint may tend to match fields a bit less often. Which filter works better may depend on the input video and personal taste; feel free to experiment with fine-tuning the filters' options if you encounter problems with either one (see the man page for details). For most well-mastered input video, however, both filters work quite well, so either one is a safe choice to start with.
mencoder dvd://1 -oac copy -vf filmdint -ovc lavc -ofps 24000/1001
An older method is to, rather than inverse-telecine the telecined parts, telecine the non-telecined parts and then inverse-telecine the whole video. Sound confusing? softpulldown is a filter that goes through a video and makes the entire file telecined. If we follow softpulldown with either detc or ivtc, the final result will be entirely progressive. -ofps 24000/1001 is needed.
mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
There are two options for dealing with this category, each of which is a compromise. You should decide based on the duration/location of each type.
Treat it as progressive. The interlaced parts will look interlaced, and some of the interlaced fields will have to be dropped, resulting in a bit of uneven jumpiness. You can use a postprocessing filter if you want to, but it may slightly degrade the progressive parts.
This option should definitely not be used if you want to eventually display the video on an interlaced device (with a TV card, for example). If you have interlaced frames in a 24000/1001 frames per second video, they will be telecined along with the progressive frames. Half of the interlaced "frames" will be displayed for three fields' duration (3/(60000/1001) seconds), resulting in a flicking "jump back in time" effect that looks quite bad. If you even attempt this, you must use a deinterlacing filter like lb or l5.
It may also be a bad idea for progressive display, too. It will drop pairs of consecutive interlaced fields, resulting in a discontinuity that can be more visible than with the second method, which shows some progressive frames twice. 30000/1001 frames per second interlaced video is already a bit choppy because it really should be shown at 60000/1001 fields per second, so the duplicate frames do not stand out as much.
Either way, it is best to consider your content and how you intend to display it. If your video is 90% progressive and you never intend to show it on a TV, you should favor a progressive approach. If it is only half progressive, you probably want to encode it as if it is all interlaced.
Treat it as interlaced. Some frames of the progressive parts will need to be duplicated, resulting in uneven jumpiness. Again, deinterlacing filters may slightly degrade the progressive parts.
About cropping: Video data on DVDs are stored in a format called YUV 4:2:0. In YUV video, luma ("brightness") and chroma ("color") are stored separately. Because the human eye is somewhat less sensitive to color than it is to brightness, in a YUV 4:2:0 picture there is only one chroma pixel for every four luma pixels. In a progressive picture, each square of four luma pixels (two on each side) has one common chroma pixel. You must crop progressive YUV 4:2:0 to even resolutions, and use even offsets. For example, crop=716:380:2:26 is OK but crop=716:380:3:26 is not.
When you are dealing with interlaced YUV 4:2:0, the situation is a bit more complicated. Instead of every four luma pixels in the frame sharing a chroma pixel, every four luma pixels in each field share a chroma pixel. When fields are interlaced to form a frame, each scanline is one pixel high. Now, instead of all four luma pixels being in a square, there are two pixels side-by-side, and the other two pixels are side-by-side two scanlines down. The two luma pixels in the intermediate scanline are from the other field, and so share a different chroma pixel with two luma pixels two scanlines away. All this confusion makes it necessary to have vertical crop dimensions and offsets be multiples of four. Horizontal can stay even.
For telecined video, I recommend that cropping take place after inverse telecining. Once the video is progressive you only need to crop by even numbers. If you really want to gain the slight speedup that cropping first may offer, you must crop vertically by multiples of four or else the inverse-telecine filter will not have proper data.
For interlaced (not telecined) video, you must always crop vertically by multiples of four unless you use -vf field before cropping.
About encoding parameters and quality:
Just because I recommend mbd=2 here does not mean it
should not be used elsewhere. Along with trell,
mbd=2 is one of the two
libavcodec
options that
increases quality the most, and you should always use at least those
two unless the drop in encoding speed is prohibitive (e.g. realtime
encoding). There are many other options to
libavcodec
that increase
encoding quality (and decrease encoding speed) but that is beyond
the scope of this document.
About the performance of pullup: It is safe to use pullup (along with softskip ) on progressive video, and is usually a good idea unless the source has been definitively verified to be entirely progressive. The performance loss is small for most cases. On a bare-minimum encode, pullup causes MEncoder to be 50% slower. Adding sound processing and advanced lavcopts overshadows that difference, bringing the performance decrease of using pullup down to 2%.
libavcodec
provides simple encoding to a lot of interesting video and audio formats.
You can encode to the following codecs (more or less up to date):
Video codec name | Description |
---|---|
mjpeg | Motion JPEG |
ljpeg | lossless JPEG |
jpegls | JPEG LS |
targa | Targa image |
gif | GIF image |
bmp | BMP image |
png | PNG image |
h261 | H.261 |
h263 | H.263 |
h263p | H.263+ |
mpeg4 | ISO standard MPEG-4 (DivX, Xvid compatible) |
msmpeg4 | pre-standard MPEG-4 variant by MS, v3 (AKA DivX3) |
msmpeg4v2 | pre-standard MPEG-4 by MS, v2 (used in old ASF files) |
wmv1 | Windows Media Video, version 1 (AKA WMV7) |
wmv2 | Windows Media Video, version 2 (AKA WMV8) |
rv10 | RealVideo 1.0 |
rv20 | RealVideo 2.0 |
mpeg1video | MPEG-1 video |
mpeg2video | MPEG-2 video |
huffyuv | lossless compression |
ffvhuff | FFmpeg modified huffyuv lossless |
asv1 | ASUS Video v1 |
asv2 | ASUS Video v2 |
ffv1 | FFmpeg's lossless video codec |
svq1 | Sorenson video 1 |
flv | Sorenson H.263 used in Flash Video |
flashsv | Flash Screen Video |
dvvideo | Sony Digital Video |
snow | FFmpeg's experimental wavelet-based codec |
zmbv | Zip Motion Blocks Video |
dnxhd | AVID DNxHD |
The first column contains the codec names that should be passed after the
vcodec
config,
like: -lavcopts vcodec=msmpeg4
An example with MJPEG compression:
mencoder dvd://2 -o title2.avi
-ovc lavc -lavcopts vcodec=mjpeg -oac copy
Audio codec name | Description |
---|---|
ac3 | Dolby Digital (AC-3) |
adpcm_* | Adaptive PCM formats - see supplementary table |
flac | Free Lossless Audio Codec (FLAC) |
g726 | G.726 ADPCM |
libamr_nb | 3GPP Adaptive Multi-Rate (AMR) narrow-band |
libamr_wb | 3GPP Adaptive Multi-Rate (AMR) wide-band |
libfaac | Advanced Audio Coding (AAC) - using FAAC |
libgsm | ETSI GSM 06.10 full rate |
libgsm_ms | Microsoft GSM |
libmp3lame | MPEG-1 audio layer 3 (MP3) - using LAME |
mp2 | MPEG-1 audio layer 2 (MP2) |
pcm_* | PCM formats - see supplementary table |
roq_dpcm | Id Software RoQ DPCM |
sonic | experimental FFmpeg lossy codec |
sonicls | experimental FFmpeg lossless codec |
vorbis | Vorbis |
wmav1 | Windows Media Audio v1 |
wmav2 | Windows Media Audio v2 |
The first column contains the codec names that should be passed after the
acodec
option, like: -lavcopts acodec=ac3
An example with AC-3 compression:
mencoder dvd://2 -o title2.avi
-oac lavc -lavcopts acodec=ac3 -ovc copy
Contrary to libavcodec
's video
codecs, its audio codecs do not make a wise usage of the bits they are
given as they lack some minimal psychoacoustic model (if at all)
which most other codec implementations feature.
However, note that all these audio codecs are very fast and work
out-of-the-box everywhere MEncoder has been
compiled with libavcodec
(which
is the case most of time), and do not depend on external libraries.
PCM/ADPCM codec name | Description |
---|---|
pcm_s32le | signed 32-bit little-endian |
pcm_s32be | signed 32-bit big-endian |
pcm_u32le | unsigned 32-bit little-endian |
pcm_u32be | unsigned 32-bit big-endian |
pcm_s24le | signed 24-bit little-endian |
pcm_s24be | signed 24-bit big-endian |
pcm_u24le | unsigned 24-bit little-endian |
pcm_u24be | unsigned 24-bit big-endian |
pcm_s16le | signed 16-bit little-endian |
pcm_s16be | signed 16-bit big-endian |
pcm_u16le | unsigned 16-bit little-endian |
pcm_u16be | unsigned 16-bit big-endian |
pcm_s8 | signed 8-bit |
pcm_u8 | unsigned 8-bit |
pcm_alaw | G.711 A-LAW |
pcm_mulaw | G.711 μ-LAW |
pcm_s24daud | signed 24-bit D-Cinema Audio format |
pcm_zork | Activision Zork Nemesis |
adpcm_ima_qt | Apple QuickTime |
adpcm_ima_wav | Microsoft/IBM WAVE |
adpcm_ima_dk3 | Duck DK3 |
adpcm_ima_dk4 | Duck DK4 |
adpcm_ima_ws | Westwood Studios |
adpcm_ima_smjpeg | SDL Motion JPEG |
adpcm_ms | Microsoft |
adpcm_4xm | 4X Technologies |
adpcm_xa | Phillips Yellow Book CD-ROM eXtended Architecture |
adpcm_ea | Electronic Arts |
adpcm_ct | Creative 16->4-bit |
adpcm_swf | Adobe Shockwave Flash |
adpcm_yamaha | Yamaha |
adpcm_sbpro_4 | Creative VOC SoundBlaster Pro 8->4-bit |
adpcm_sbpro_3 | Creative VOC SoundBlaster Pro 8->2.6-bit |
adpcm_sbpro_2 | Creative VOC SoundBlaster Pro 8->2-bit |
adpcm_thp | Nintendo GameCube FMV THP |
adpcm_adx | Sega/CRI ADX |
Ideally, you would probably want to be able to just tell the encoder to switch into "high quality" mode and move on. That would probably be nice, but unfortunately hard to implement as different encoding options yield different quality results depending on the source material. That is because compression depends on the visual properties of the video in question. For example, Anime and live action have very different properties and thus require different options to obtain optimum encoding. The good news is that some options should never be left out, like mbd=2, trell, and v4mv. See below for a detailed description of common encoding options.
Options to adjust:
vmax_b_frames: 1 or 2 is good, depending on
the movie.
Note that if you need to have your encode be decodable by DivX5, you
need to activate closed GOP support, using
libavcodec
's cgop
option, but you need to deactivate scene detection, which
is not a good idea as it will hurt encode efficiency a bit.
vb_strategy=1: helps in high-motion scenes. On some videos, vmax_b_frames may hurt quality, but vmax_b_frames=2 along with vb_strategy=1 helps.
dia: motion search range. Bigger is better and slower. Negative values are a completely different scale. Good values are -1 for a fast encode, or 2-4 for slower.
predia: motion search pre-pass. Not as important as dia. Good values are 1 (default) to 4. Requires preme=2 to really be useful.
cmp, subcmp, precmp: Comparison function for motion estimation. Experiment with values of 0 (default), 2 (hadamard), 3 (dct), and 6 (rate distortion). 0 is fastest, and sufficient for precmp. For cmp and subcmp, 2 is good for Anime, and 3 is good for live action. 6 may or may not be slightly better, but is slow.
last_pred: Number of motion predictors to take from the previous frame. 1-3 or so help at little speed cost. Higher values are slow for no extra gain.
cbp, mv0: Controls the selection of macroblocks. Small speed cost for small quality gain.
qprd: adaptive quantization based on the macroblock's complexity. May help or hurt depending on the video and other options. This can cause artifacts unless you set vqmax to some reasonably small value (6 is good, maybe as low as 4); vqmin=1 should also help.
qns: very slow, especially when combined with qprd. This option will make the encoder minimize noise due to compression artifacts instead of making the encoded video strictly match the source. Do not use this unless you have already tweaked everything else as far as it will go and the results still are not good enough.
vqcomp: Tweak ratecontrol. What values are good depends on the movie. You can safely leave this alone if you want. Reducing vqcomp puts more bits on low-complexity scenes, increasing it puts them on high-complexity scenes (default: 0.5, range: 0-1. recommended range: 0.5-0.7).
vlelim, vcelim: Sets the single coefficient elimination threshold for luminance and chroma planes. These are encoded separately in all MPEG-like algorithms. The idea behind these options is to use some good heuristics to determine when the change in a block is less than the threshold you specify, and in such a case, to just encode the block as "no change". This saves bits and perhaps speeds up encoding. vlelim=-4 and vcelim=9 seem to be good for live movies, but seem not to help with Anime; when encoding animation, you should probably leave them unchanged.
qpel: Quarter pixel motion estimation. MPEG-4 uses half pixel precision for its motion search by default, therefore this option comes with an overhead as more information will be stored in the encoded file. The compression gain/loss depends on the movie, but it is usually not very effective on Anime. qpel always incurs a significant cost in CPU decode time (+25% in practice).
psnr: does not affect the actual encoding, but writes a log file giving the type/size/quality of each frame, and prints a summary of PSNR (Peak Signal to Noise Ratio) at the end.
Options not recommended to play with:
vme: The default is best.
lumi_mask, dark_mask: Psychovisual adaptive quantization. You do not want to play with those options if you care about quality. Reasonable values may be effective in your case, but be warned this is very subjective.
scplx_mask: Tries to prevent blocky artifacts, but postprocessing is better.
The following settings are examples of different encoding option combinations that affect the speed vs quality tradeoff at the same target bitrate.
All the encoding settings were tested on a 720x448 @30000/1001 fps video sample, the target bitrate was 900kbps, and the machine was an AMD-64 3400+ at 2400 MHz in 64 bits mode. Each encoding setting features the measured encoding speed (in frames per second) and the PSNR loss (in dB) compared to the "very high quality" setting. Please understand that depending on your source, your machine type and development advancements, you may get very different results.
Description | Encoding options | speed (in fps) | Relative PSNR loss (in dB) |
---|---|---|---|
Very high quality | vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2 | 6fps | 0dB |
High quality | vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo | 15fps | -0.5dB |
Fast | vcodec=mpeg4:mbd=2:trell:v4mv:turbo | 42fps | -0.74dB |
Realtime | vcodec=mpeg4:mbd=2:turbo | 54fps | -1.21dB |
With this feature of
libavcodec
you are able to set custom inter (I-frames/keyframes) and intra
(P-frames/predicted frames) matrices. It is supported by many of the codecs:
mpeg1video
and mpeg2video
are reported as working.
A typical usage of this feature is to set the matrices preferred by the KVCD specifications.
The KVCD "Notch" Quantization Matrix:
Intra:
8 9 12 22 26 27 29 34 9 10 14 26 27 29 34 37 12 14 18 27 29 34 37 38 22 26 27 31 36 37 38 40 26 27 29 36 39 38 40 48 27 29 34 37 38 40 48 58 29 34 37 38 40 48 58 69 34 37 38 40 48 58 69 79
Inter:
16 18 20 22 24 26 28 30 18 20 22 24 26 28 30 32 20 22 24 26 28 30 32 34 22 24 26 30 32 32 34 36 24 26 28 32 34 34 36 38 26 28 30 32 34 36 38 40 28 30 32 34 36 38 42 42 30 32 34 36 38 40 42 44
Usage:
mencoderinput.avi
-ooutput.avi
-oac copy -ovc lavc \ -lavcopts inter_matrix=...:intra_matrix=...
mencoder input.avi
-ovc lavc -lavcopts \
vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,\
12,14,18,27,29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,\
29,34,37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79\
:inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,\
28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,\
36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44 -oac copy -o svcd.mpg
So, you have just bought your shiny new copy of Harry Potter and the Chamber of Secrets (widescreen edition, of course), and you want to rip this DVD so that you can add it to your Home Theatre PC. This is a region 1 DVD, so it is NTSC. The example below will still apply to PAL, except you will omit -ofps 24000/1001 (because the output framerate is the same as the input framerate), and of course the crop dimensions will be different.
After running mplayer dvd://1, we follow the process detailed in the section How to deal with telecine and interlacing in NTSC DVDs and discover that it is 24000/1001 fps progressive video, which means that we need not use an inverse telecine filter, such as pullup or filmdint.
Next, we want to determine the appropriate crop rectangle, so we use the cropdetect filter:
mplayer dvd://1 -vf cropdetect
Make sure you seek to a fully filled frame (such as a bright scene, past the opening credits and logos), and you will see in MPlayer's console output:
crop area: X: 0..719 Y: 57..419 (-vf crop=720:362:0:58)
We then play the movie back with this filter to test its correctness:
mplayer dvd://1 -vf crop=720:362:0:58
And we see that it looks perfectly fine. Next, we ensure the width and height are a multiple of 16. The width is fine, however the height is not. Since we did not fail 7th grade math, we know that the nearest multiple of 16 lower than 362 is 352.
We could just use crop=720:352:0:58, but it would be nice to take a little off the top and a little off the bottom so that we retain the center. We have shrunk the height by 10 pixels, but we do not want to increase the y-offset by 5-pixels since that is an odd number and will adversely affect quality. Instead, we will increase the y-offset by 4 pixels:
mplayer dvd://1 -vf crop=720:352:0:62
Another reason to shave pixels from both the top and the bottom is that we ensure we have eliminated any half-black pixels if they exist. Note that if your video is telecined, make sure the pullup filter (or whichever inverse telecine filter you decide to use) appears in the filter chain before you crop. If it is interlaced, deinterlace before cropping. (If you choose to preserve the interlaced video, then make sure your vertical crop offset is a multiple of 4.)
If you are really concerned about losing those 10 pixels, you might prefer instead to scale the dimensions down to the nearest multiple of 16. The filter chain would look like:
-vf crop=720:362:0:58,scale=720:352
Scaling the video down like this will mean that some small amount of detail is lost, though it probably will not be perceptible. Scaling up will result in lower quality (unless you increase the bitrate). Cropping discards those pixels altogether. It is a tradeoff that you will want to consider for each circumstance. For example, if the DVD video was made for television, you might want to avoid vertical scaling, since the line sampling corresponds to the way the content was originally recorded.
On inspection, we see that our movie has a fair bit of action and high amounts of detail, so we pick 2400Kbit for our bitrate.
We are now ready to do the two pass encode. Pass one:
mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi
-ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1 \
-vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2
And pass two is the same, except that we specify vpass=2:
mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi
-ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=2 \
-vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2
The options v4mv:mbd=2:trell will greatly increase the
quality at the expense of encoding time. There is little reason to leave
these options out when the primary goal is quality. The options
cmp=3:subcmp=3 select a comparison function that
yields higher quality than the defaults. You might try experimenting with
this parameter (refer to the man page for the possible values) as
different functions can have a large impact on quality depending on the
source material. For example, if you find
libavcodec
produces too much
blocky artifacts, you could try selecting the experimental NSSE as
comparison function via *cmp=10.
For this movie, the resulting AVI will be 138 minutes long and nearly 3GB. And because you said that file size does not matter, this is a perfectly acceptable size. However, if you had wanted it smaller, you could try a lower bitrate. Increasing bitrates have diminishing returns, so while we might clearly see an improvement from 1800Kbit to 2000Kbit, it might not be so noticeable above 2000Kbit. Feel free to experiment until you are happy.
Because we passed the source video through a denoise filter, you may want to add some of it back during playback. This, along with the spp post-processing filter, drastically improves the perception of quality and helps eliminate blocky artifacts in the video. With MPlayer's autoq option, you can vary the amount of post-processing done by the spp filter depending on available CPU. Also, at this point, you may want to apply gamma and/or color correction to best suit your display. For example:
mplayer Harry_Potter_2.avi
-vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3
Xvid
is a free library for
encoding MPEG-4 ASP video streams.
Before starting to encode, you need to
set up MEncoder to support it.
This guide mainly aims at featuring the same kind of information as x264's encoding guide. Therefore, please begin by reading the first part of that guide.
Please begin by reviewing the
Xvid
section of
MPlayer's man page.
This section is intended to be a supplement to the man page.
The Xvid default settings are already a good tradeoff between speed and quality, therefore you can safely stick to them if the following section puzzles you.
vhq This setting affects the macroblock decision algorithm, where the higher the setting, the wiser the decision. The default setting may be safely used for every encode, while higher settings always help PSNR but are significantly slower. Please note that a better PSNR does not necessarily mean that the picture will look better, but tells you that it is closer to the original. Turning it off will noticeably speed up encoding; if speed is critical for you, the tradeoff may be worth it.
bvhq This does the same job as vhq, but does it on B-frames. It has a negligible impact on speed, and slightly improves quality (around +0.1dB PSNR).
max_bframes A higher number of consecutive allowed B-frames usually improves compressibility, although it may also lead to more blocking artifacts. The default setting is a good tradeoff between compressibility and quality, but you may increase it up to 3 if you are bitrate-starved. You may also decrease it to 1 or 0 if you are aiming at perfect quality, though in that case you should make sure your target bitrate is high enough to ensure that the encoder does not have to increase quantizers to reach it.
bf_threshold This controls the B-frame sensitivity of the encoder, where a higher value leads to more B-frames being used (and vice versa). This setting is to be used together with max_bframes; if you are bitrate-starved, you should increase both max_bframes and bf_threshold, while you may increase max_bframes and reduce bf_threshold so that the encoder may use more B-frames in places that only really need them. A low number of max_bframes and a high value of bf_threshold is probably not a wise choice as it will force the encoder to put B-frames in places that would not benefit from them, therefore reducing visual quality. However, if you need to be compatible with standalone players that only support old DivX profiles (which only supports up to 1 consecutive B-frame), this would be your only way to increase compressibility through using B-frames.
trellis Optimizes the quantization process to get an optimal tradeoff between PSNR and bitrate, which allows significant bit saving. These bits will in return be spent elsewhere on the video, raising overall visual quality. You should always leave it on as its impact on quality is huge. Even if you are looking for speed, do not disable it until you have turned down vhq and all other more CPU-hungry options to the minimum.
hq_ac Activates a better coefficient cost estimation method, which slightly reduces file size by around 0.15 to 0.19% (which corresponds to less than 0.01dB PSNR increase), while having a negligible impact on speed. It is therefore recommended to always leave it on.
cartoon Designed to better encode cartoon content, and has no impact on speed as it just tunes the mode decision heuristics for this type of content.
me_quality This setting is to control the precision of the motion estimation. The higher me_quality, the more precise the estimation of the original motion will be, and the better the resulting clip will capture the original motion.
The default setting is best in all cases; thus it is not recommended to turn it down unless you are really looking for speed, as all the bits saved by a good motion estimation would be spent elsewhere, raising overall quality. Therefore, do not go any lower than 5, and even that only as a last resort.
chroma_me Improves motion estimation by also taking the chroma (color) information into account, whereas me_quality alone only uses luma (grayscale). This slows down encoding by 5-10% but improves visual quality quite a bit by reducing blocking effects and reduces file size by around 1.3%. If you are looking for speed, you should disable this option before starting to consider reducing me_quality.
chroma_opt Is intended to increase chroma image quality around pure white/black edges, rather than improving compression. This can help to reduce the "red stairs" effect.
lumi_mask Tries to give less bitrate to part of the picture that the human eye cannot see very well, which should allow the encoder to spend the saved bits on more important parts of the picture. The quality of the encode yielded by this option highly depends on personal preferences and on the type and monitor settings used to watch it (typically, it will not look as good if it is bright or if it is a TFT monitor).
qpel Raise the number of candidate motion vectors by increasing the precision of the motion estimation from halfpel to quarterpel. The idea is to find better motion vectors which will in return reduce bitrate (hence increasing quality). However, motion vectors with quarterpel precision require a few extra bits to code, but the candidate vectors do not always give (much) better results. Quite often, the codec still spends bits on the extra precision, but little or no extra quality is gained in return. Unfortunately, there is no way to foresee the possible gains of qpel, so you need to actually encode with and without it to know for sure.
qpel can be almost double encoding time, and requires as much as 25% more processing power to decode. It is not supported by all standalone players.
gmc
Tries to save bits on panning scenes by using a single motion
vector for the whole frame.
This almost always raises PSNR, but significantly slows down
encoding (as well as decoding).
Therefore, you should only use it when you have turned
vhq to the maximum.
Xvid
's GMC is more
sophisticated than DivX's, but is only supported by few
standalone players.
Xvid supports encoding profiles through the profile option, which are used to impose restrictions on the properties of the Xvid video stream such that it will be playable on anything which supports the chosen profile. The restrictions relate to resolutions, bitrates and certain MPEG-4 features. The following table shows what each profile supports.
Simple | Advanced Simple | DivX | ||||||||||||||
Profile name | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | Handheld | Portable NTSC | Portable PAL | Home Theater NTSC | Home Theater PAL | HDTV |
Width [pixels] | 176 | 176 | 352 | 352 | 176 | 176 | 352 | 352 | 352 | 720 | 176 | 352 | 352 | 720 | 720 | 1280 |
Height [pixels] | 144 | 144 | 288 | 288 | 144 | 144 | 288 | 288 | 576 | 576 | 144 | 240 | 288 | 480 | 576 | 720 |
Frame rate [fps] | 15 | 15 | 15 | 15 | 30 | 30 | 15 | 30 | 30 | 30 | 15 | 30 | 25 | 30 | 25 | 30 |
Max average bitrate [kbps] | 64 | 64 | 128 | 384 | 128 | 128 | 384 | 768 | 3000 | 8000 | 537.6 | 4854 | 4854 | 4854 | 4854 | 9708.4 |
Peak average bitrate over 3 secs [kbps] | 800 | 8000 | 8000 | 8000 | 8000 | 16000 | ||||||||||
Max. B-frames | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 2 | ||||||
MPEG quantization | X | X | X | X | X | X | ||||||||||
Adaptive quantization | X | X | X | X | X | X | X | X | X | X | X | X | ||||
Interlaced encoding | X | X | X | X | X | X | X | X | X | |||||||
Quarterpixel | X | X | X | X | X | X | ||||||||||
Global motion compensation | X | X | X | X | X | X |
The following settings are examples of different encoding option combinations that affect the speed vs quality tradeoff at the same target bitrate.
All the encoding settings were tested on a 720x448 @30000/1001 fps video sample, the target bitrate was 900kbps, and the machine was an AMD-64 3400+ at 2400 MHz in 64 bits mode. Each encoding setting features the measured encoding speed (in frames per second) and the PSNR loss (in dB) compared to the "very high quality" setting. Please understand that depending on your source, your machine type and development advancements, you may get very different results.
Description | Encoding options | speed (in fps) | Relative PSNR loss (in dB) |
---|---|---|---|
Very high quality | chroma_opt:vhq=4:bvhq=1:quant_type=mpeg | 16fps | 0dB |
High quality | vhq=2:bvhq=1:chroma_opt:quant_type=mpeg | 18fps | -0.1dB |
Fast | turbo:vhq=0 | 28fps | -0.69dB |
Realtime | turbo:nochroma_me:notrellis:max_bframes=0:vhq=0 | 38fps | -1.48dB |
x264
is a free library for
encoding H.264/AVC video streams.
Before starting to encode, you need to
set up MEncoder to support it.
Please begin by reviewing the
x264
section of
MPlayer's man page.
This section is intended to be a supplement to the man page.
Here you will find quick hints about which options are most
likely to interest most people. The man page is more terse,
but also more exhaustive, and it sometimes offers much better
technical detail.
This guide considers two major categories of encoding options:
Options which mainly trade off encoding time vs. quality
Options which may be useful for fulfilling various personal preferences and special requirements
Ultimately, only you can decide which options are best for your purposes. The decision for the first class of options is the simplest: you only have to decide whether you think the quality differences justify the speed differences. For the second class of options, preferences may be far more subjective, and more factors may be involved. Note that some of the "personal preferences and special requirements" options can still have large impacts on speed or quality, but that is not what they are primarily useful for. A couple of the "personal preference" options may even cause changes that look better to some people, but look worse to others.
Before continuing, you need to understand that this guide uses only one quality metric: global PSNR. For a brief explanation of what PSNR is, see the Wikipedia article on PSNR. Global PSNR is the last PSNR number reported when you include the psnr option in x264encopts. Any time you read a claim about PSNR, one of the assumptions behind the claim is that equal bitrates are used.
Nearly all of this guide's comments assume you are using two pass. When comparing options, there are two major reasons for using two pass encoding. First, using two pass often gains around 1dB PSNR, which is a very big difference. Secondly, testing options by doing direct quality comparisons with one pass encodes introduces a major confounding factor: bitrate often varies significantly with each encode. It is not always easy to tell whether quality changes are due mainly to changed options, or if they mostly reflect essentially random differences in the achieved bitrate.
subq: Of the options which allow you to trade off speed for quality, subq and frameref (see below) are usually by far the most important. If you are interested in tweaking either speed or quality, these are the first options you should consider. On the speed dimension, the frameref and subq options interact with each other fairly strongly. Experience shows that, with one reference frame, subq=5 (the default setting) takes about 35% more time than subq=1. With 6 reference frames, the penalty grows to over 60%. subq's effect on PSNR seems fairly constant regardless of the number of reference frames. Typically, subq=5 achieves 0.2-0.5 dB higher global PSNR in comparison subq=1. This is usually enough to be visible.
subq=6 is slower and yields better quality at a reasonable cost. In comparison to subq=5, it usually gains 0.1-0.4 dB global PSNR with speed costs varying from 25%-100%. Unlike other levels of subq, the behavior of subq=6 does not depend much on frameref and me. Instead, the effectiveness of subq=6 depends mostly upon the number of B-frames used. In normal usage, this means subq=6 has a large impact on both speed and quality in complex, high motion scenes, but it may not have much effect in low-motion scenes. Note that it is still recommended to always set bframes to something other than zero (see below).
subq=7 is the slowest, highest quality mode. In comparison to subq=6, it usually gains 0.01-0.05 dB global PSNR with speed costs varying from 15%-33%. Since the tradeoff encoding time vs. quality is quite low, you should only use it if you are after every bit saving and if encoding time is not an issue.
frameref: frameref is set to 1 by default, but this should not be taken to imply that it is reasonable to set it to 1. Merely raising frameref to 2 gains around 0.15dB PSNR with a 5-10% speed penalty; this seems like a good tradeoff. frameref=3 gains around 0.25dB PSNR over frameref=1, which should be a visible difference. frameref=3 is around 15% slower than frameref=1. Unfortunately, diminishing returns set in rapidly. frameref=6 can be expected to gain only 0.05-0.1 dB over frameref=3 at an additional 15% speed penalty. Above frameref=6, the quality gains are usually very small (although you should keep in mind throughout this whole discussion that it can vary quite a lot depending on your source). In a fairly typical case, frameref=12 will improve global PSNR by a tiny 0.02dB over frameref=6, at a speed cost of 15%-20%. At such high frameref values, the only really good thing that can be said is that increasing it even further will almost certainly never harm PSNR, but the additional quality benefits are barely even measurable, let alone perceptible.
Raising frameref to unnecessarily high values can and usually does hurt coding efficiency if you turn CABAC off. With CABAC on (the default behavior), the possibility of setting frameref "too high" currently seems too remote to even worry about, and in the future, optimizations may remove the possibility altogether.
If you care about speed, a reasonable compromise is to use low subq and frameref values on the first pass, and then raise them on the second pass. Typically, this has a negligible negative effect on the final quality: You will probably lose well under 0.1dB PSNR, which should be much too small of a difference to see. However, different values of frameref can occasionally affect frame type decision. Most likely, these are rare outlying cases, but if you want to be pretty sure, consider whether your video has either fullscreen repetitive flashing patterns or very large temporary occlusions which might force an I-frame. Adjust the first-pass frameref so it is large enough to contain the duration of the flashing cycle (or occlusion). For example, if the scene flashes back and forth between two images over a duration of three frames, set the first pass frameref to 3 or higher. This issue is probably extremely rare in live action video material, but it does sometimes come up in video game captures.
me: This option is for choosing the motion estimation search method. Altering this option provides a straightforward quality-vs-speed tradeoff. me=dia is only a few percent faster than the default search, at a cost of under 0.1dB global PSNR. The default setting (me=hex) is a reasonable tradeoff between speed and quality. me=umh gains a little under 0.1dB global PSNR, with a speed penalty that varies depending on frameref. At high values of frameref (e.g. 12 or so), me=umh is about 40% slower than the default me=hex. With frameref=3, the speed penalty incurred drops to 25%-30%.
me=esa uses an exhaustive search that is too slow for practical use.
partitions=all: This option enables the use of 8x4, 4x8 and 4x4 subpartitions in predicted macroblocks (in addition to the default partitions). Enabling it results in a fairly consistent 10%-15% loss of speed. This option is rather useless in source containing only low motion, however in some high-motion source, particularly source with lots of small moving objects, gains of about 0.1dB can be expected.
bframes: If you are used to encoding with other codecs, you may have found that B-frames are not always useful. In H.264, this has changed: there are new techniques and block types that are possible in B-frames. Usually, even a naive B-frame choice algorithm can have a significant PSNR benefit. It is interesting to note that using B-frames usually speeds up the second pass somewhat, and may also speed up a single pass encode if adaptive B-frame decision is turned off.
With adaptive B-frame decision turned off (x264encopts's nob_adapt), the optimal value for this setting is usually no more than bframes=1, or else high-motion scenes can suffer. With adaptive B-frame decision on (the default behavior), it is safe to use higher values; the encoder will reduce the use of B-frames in scenes where they would hurt compression. The encoder rarely chooses to use more than 3 or 4 B-frames; setting this option any higher will have little effect.
b_adapt: Note: This is on by default.
With this option enabled, the encoder will use a reasonably fast decision process to reduce the number of B-frames used in scenes that might not benefit from them as much. You can use b_bias to tweak how B-frame-happy the encoder is. The speed penalty of adaptive B-frames is currently rather modest, but so is the potential quality gain. It usually does not hurt, however. Note that this only affects speed and frame type decision on the first pass. b_adapt and b_bias have no effect on subsequent passes.
b_pyramid: You might as well enable this option if you are using >=2 B-frames; as the man page says, you get a little quality improvement at no speed cost. Note that these videos cannot be read by libavcodec-based decoders older than about March 5, 2005.
weight_b: In typical cases, there is not much gain with this option. However, in crossfades or fade-to-black scenes, weighted prediction gives rather large bitrate savings. In MPEG-4 ASP, a fade-to-black is usually best coded as a series of expensive I-frames; using weighted prediction in B-frames makes it possible to turn at least some of these into much smaller B-frames. Encoding time cost is minimal, as no extra decisions need to be made. Also, contrary to what some people seem to guess, the decoder CPU requirements are not much affected by weighted prediction, all else being equal.
Unfortunately, the current adaptive B-frame decision algorithm has a strong tendency to avoid B-frames during fades. Until this changes, it may be a good idea to add nob_adapt to your x264encopts, if you expect fades to have a large effect in your particular video clip.
threads:
This option allows to spawn threads to encode in parallel on multiple CPUs.
You can manually select the number of threads to be created or, better, set
threads=auto and let
x264
detect how many CPUs are
available and pick an appropriate number of threads.
If you have a multi-processor machine, you should really consider using it
as it can to increase encoding speed linearly with the number of CPU cores
(about 94% per CPU core), with very little quality reduction (about 0.005dB
for dual processor, about 0.01dB for a quad processor machine).
Two pass encoding: Above, it was suggested to always use two pass encoding, but there are still reasons for not using it. For instance, if you are capturing live TV and encoding in realtime, you are forced to use single-pass. Also, one pass is obviously faster than two passes; if you use the exact same set of options on both passes, two pass encoding is almost twice as slow.
Still, there are very good reasons for using two pass encoding. For one thing, single pass ratecontrol is not psychic, and it often makes unreasonable choices because it cannot see the big picture. For example, suppose you have a two minute long video consisting of two distinct halves. The first half is a very high-motion scene lasting 60 seconds which, in isolation, requires about 2500kbps in order to look decent. Immediately following it is a much less demanding 60-second scene that looks good at 300kbps. Suppose you ask for 1400kbps on the theory that this is enough to accommodate both scenes. Single pass ratecontrol will make a couple of "mistakes" in such a case. First of all, it will target 1400kbps in both segments. The first segment may end up heavily overquantized, causing it to look unacceptably and unreasonably blocky. The second segment will be heavily underquantized; it may look perfect, but the bitrate cost of that perfection will be completely unreasonable. What is even harder to avoid is the problem at the transition between the two scenes. The first seconds of the low motion half will be hugely over-quantized, because the ratecontrol is still expecting the kind of bitrate requirements it met in the first half of the video. This "error period" of heavily over-quantized low motion will look jarringly bad, and will actually use less than the 300kbps it would have taken to make it look decent. There are ways to mitigate the pitfalls of single-pass encoding, but they may tend to increase bitrate misprediction.
Multipass ratecontrol can offer huge advantages over a single pass. Using the statistics gathered from the first pass encode, the encoder can estimate, with reasonable accuracy, the "cost" (in bits) of encoding any given frame, at any given quantizer. This allows for a much more rational, better planned allocation of bits between the expensive (high-motion) and cheap (low-motion) scenes. See qcomp below for some ideas on how to tweak this allocation to your liking.
Moreover, two passes need not take twice as long as one pass. You can tweak the options in the first pass for higher speed and lower quality. If you choose your options well, you can get a very fast first pass. The resulting quality in the second pass will be slightly lower because size prediction is less accurate, but the quality difference is normally much too small to be visible. Try, for example, adding subq=1:frameref=1 to the first pass x264encopts. Then, on the second pass, use slower, higher-quality options: subq=6:frameref=15:partitions=all:me=umh
Three pass encoding? x264 offers the ability to make an arbitrary number of consecutive passes. If you specify pass=1 on the first pass, then use pass=3 on a subsequent pass, the subsequent pass will both read the statistics from the previous pass, and write its own statistics. An additional pass following this one will have a very good base from which to make highly accurate predictions of frame sizes at a chosen quantizer. In practice, the overall quality gain from this is usually close to zero, and quite possibly a third pass will result in slightly worse global PSNR than the pass before it. In typical usage, three passes help if you get either bad bitrate prediction or bad looking scene transitions when using only two passes. This is somewhat likely to happen on extremely short clips. There are also a few special cases in which three (or more) passes are handy for advanced users, but for brevity, this guide omits discussing those special cases.
qcomp: qcomp trades off the number of bits allocated to "expensive" high-motion versus "cheap" low-motion frames. At one extreme, qcomp=0 aims for true constant bitrate. Typically this would make high-motion scenes look completely awful, while low-motion scenes would probably look absolutely perfect, but would also use many times more bitrate than they would need in order to look merely excellent. At the other extreme, qcomp=1 achieves nearly constant quantization parameter (QP). Constant QP does not look bad, but most people think it is more reasonable to shave some bitrate off of the extremely expensive scenes (where the loss of quality is not as noticeable) and reallocate it to the scenes that are easier to encode at excellent quality. qcomp is set to 0.6 by default, which may be slightly low for many peoples' taste (0.7-0.8 are also commonly used).
keyint: keyint is solely for trading off file seekability against coding efficiency. By default, keyint is set to 250. In 25fps material, this guarantees the ability to seek to within 10 seconds precision. If you think it would be important and useful to be able to seek within 5 seconds of precision, set keyint=125; this will hurt quality/bitrate slightly. If you care only about quality and not about seekability, you can set it to much higher values (understanding that there are diminishing returns which may become vanishingly low, or even zero). The video stream will still have seekable points as long as there are some scene changes.
deblock: This topic is going to be a bit controversial.
H.264 defines a simple deblocking procedure on I-blocks that uses pre-set strengths and thresholds depending on the QP of the block in question. By default, high QP blocks are filtered heavily, and low QP blocks are not deblocked at all. The pre-set strengths defined by the standard are well-chosen and the odds are very good that they are PSNR-optimal for whatever video you are trying to encode. The deblock allow you to specify offsets to the preset deblocking thresholds.
Many people seem to think it is a good idea to lower the deblocking filter strength by large amounts (say, -3). This is however almost never a good idea, and in most cases, people who are doing this do not understand very well how deblocking works by default.
The first and most important thing to know about the in-loop deblocking filter is that the default thresholds are almost always PSNR-optimal. In the rare cases that they are not optimal, the ideal offset is plus or minus 1. Adjusting deblocking parameters by a larger amount is almost guaranteed to hurt PSNR. Strengthening the filter will smear more details; weakening the filter will increase the appearance of blockiness.
It is definitely a bad idea to lower the deblocking thresholds if your source is mainly low in spacial complexity (i.e., not a lot of detail or noise). The in-loop filter does a rather excellent job of concealing the artifacts that occur. If the source is high in spacial complexity, however, artifacts are less noticeable. This is because the ringing tends to look like detail or noise. Human visual perception easily notices when detail is removed, but it does not so easily notice when the noise is wrongly represented. When it comes to subjective quality, noise and detail are somewhat interchangeable. By lowering the deblocking filter strength, you are most likely increasing error by adding ringing artifacts, but the eye does not notice because it confuses the artifacts with detail.
This still does not justify lowering the deblocking filter strength, however. You can generally get better quality noise from postprocessing. If your H.264 encodes look too blurry or smeared, try playing with -vf noise when you play your encoded movie. -vf noise=8a:4a should conceal most mild artifacts. It will almost certainly look better than the results you would have gotten just by fiddling with the deblocking filter.
The following settings are examples of different encoding option combinations that affect the speed vs quality tradeoff at the same target bitrate.
All the encoding settings were tested on a 720x448 @30000/1001 fps video sample, the target bitrate was 900kbps, and the machine was an AMD-64 3400+ at 2400 MHz in 64 bits mode. Each encoding setting features the measured encoding speed (in frames per second) and the PSNR loss (in dB) compared to the "very high quality" setting. Please understand that depending on your source, your machine type and development advancements, you may get very different results.
Description | Encoding options | speed (in fps) | Relative PSNR loss (in dB) |
---|---|---|---|
Very high quality | subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b | 6fps | 0dB |
High quality | subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b | 13fps | -0.89dB |
Fast | subq=4:bframes=2:b_pyramid=normal:weight_b | 17fps | -1.48dB |
Video for Windows provides simple encoding by means of binary video codecs. You can encode with the following codecs (if you have more, please tell us!)
Note that support for this is very experimental and some codecs may not work correctly. Some codecs will only work in certain colorspaces, try -vf format=bgr24 and -vf format=yuy2 if a codec fails or gives wrong output.
Video codec file name | Description (FourCC) | md5sum | Comment |
---|---|---|---|
aslcodec_vfw.dll | Alparysoft lossless codec vfw (ASLC) | 608af234a6ea4d90cdc7246af5f3f29a | |
avimszh.dll | AVImszh (MSZH) | 253118fe1eedea04a95ed6e5f4c28878 | needs -vf format |
avizlib.dll | AVIzlib (ZLIB) | 2f1cc76bbcf6d77d40d0e23392fa8eda | |
divx.dll | DivX4Windows-VFW | acf35b2fc004a89c829531555d73f1e6 | |
huffyuv.dll | HuffYUV (lossless) (HFYU) | b74695b50230be4a6ef2c4293a58ac3b | |
iccvid.dll | Cinepak Video (cvid) | cb3b7ee47ba7dbb3d23d34e274895133 | |
icmw_32.dll | Motion Wavelets (MWV1) | c9618a8fc73ce219ba918e3e09e227f2 | |
jp2avi.dll | ImagePower MJPEG2000 (IPJ2) | d860a11766da0d0ea064672c6833768b | -vf flip |
m3jp2k32.dll | Morgan MJPEG2000 (MJ2C) | f3c174edcbaef7cb947d6357cdfde7ff | |
m3jpeg32.dll | Morgan Motion JPEG Codec (MJPEG) | 1cd13fff5960aa2aae43790242c323b1 | |
mpg4c32.dll | Microsoft MPEG-4 v1/v2 | b5791ea23f33010d37ab8314681f1256 | |
tsccvid.dll | TechSmith Camtasia Screen Codec (TSCC) | 8230d8560c41d444f249802a2700d1d5 | shareware error on windows |
vp31vfw.dll | On2 Open Source VP3 Codec (VP31) | 845f3590ea489e2e45e876ab107ee7d2 | |
vp4vfw.dll | On2 VP4 Personal Codec (VP40) | fc5480a482ccc594c2898dcc4188b58f | |
vp6vfw.dll | On2 VP6 Personal Codec (VP60) | 04d635a364243013898fd09484f913fb | |
vp7vfw.dll | On2 VP7 Personal Codec (VP70) | cb4cc3d4ea7c94a35f1d81c3d750bc8d | -ffourcc VP70 |
ViVD2.dll | SoftMedia ViVD V2 codec VfW (GXVE) | a7b4bf5cac630bb9262c3f80d8a773a1 | |
msulvc06.DLL | MSU Lossless codec (MSUD) | 294bf9288f2f127bb86f00bfcc9ccdda | Decodable by Window Media Player, not MPlayer (yet). |
camcodec.dll | CamStudio lossless video codec (CSCD) | 0efe97ce08bb0e40162ab15ef3b45615 | sf.net/projects/camstudio |
The first column contains the codec names that should be passed after the
codec
parameter,
like: -xvfwopts codec=divx.dll
The FourCC code used by each codec is given in the parentheses.
An example to convert an ISO DVD trailer to a VP6 flash video file using compdata bitrate settings:
mencoder -dvd-devicezeiram.iso
dvd://7 -otrailer.flv
\ -ovc vfw -xvfwopts codec=vp6vfw.dll:compdata=onepass.mcf -oac mp3lame \ -lameopts cbr:br=64 -af lavcresample=22050 -vf yadif,scale=320:240,flip \ -of lavf
To encode with the Video for Windows codecs, you will need to set bitrate and other options. This is known to work on x86 on both *NIX and Windows.
First you must build the vfw2menc program. It is located in the TOOLS subdirectory of the MPlayer source tree. To build on Linux, this can be done using Wine:
winegcc vfw2menc.c -o vfw2menc -lwinmm -lole32
To build on Windows in MinGW or Cygwin use:
gcc vfw2menc.c -o vfw2menc.exe -lwinmm -lole32
To build on MSVC you will need getopt. Getopt can be found in the original vfw2menc archive available at: The MPlayer on win32 project.
Below is an example with the VP6 codec.
vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
This will open the VP6 codec dialog window.
Repeat this step for the second pass
and use -s secondpass.mcf
.
Windows users can use -xvfwopts codec=vp6vfw.dll:compdata=dialog to have the codec dialog display before encoding starts.
There are several reasons why producing QuickTime-compatible files can be desirable.
You want any computer illiterate to be able to watch your encode on any major platform (Windows, Mac OS X, Unices …).
QuickTime is able to take advantage of more hardware and software acceleration features of Mac OS X than platform-independent players like MPlayer or VLC. That means that your encodes have a chance to be played smoothly by older G4-powered machines.
QuickTime 7 supports the next-generation codec H.264, which yields significantly better picture quality than previous codec generations (MPEG-2, MPEG-4 …).
QuickTime 7 supports H.264 video and AAC audio, but it does not support them muxed in the AVI container format. However, you can use MEncoder to encode the video and audio, and then use an external program such as mp4creator (part of the MPEG4IP suite) to remux the video and audio tracks into an MP4 container.
QuickTime's support for H.264 is limited, so you will need to drop some advanced features. If you encode your video with features that QuickTime 7 does not support, QuickTime-based players will show you a pretty white screen instead of your expected video.
B-frames: QuickTime 7 supports a maximum of 1 B-frame, i.e. -x264encopts bframes=1. This means that b_pyramid and weight_b will have no effect, since they require bframes to be greater than 1.
Macroblocks: QuickTime 7 does not support 8x8 DCT macroblocks. This option (8x8dct) is off by default, so just be sure not to explicitly enable it. This also means that the i8x8 option will have no effect, since it requires 8x8dct.
Aspect ratio: QuickTime 7 does not support SAR (sample aspect ratio) information in MPEG-4 files; it assumes that SAR=1. Read the section on scaling for a workaround.
Suppose you want to rip your freshly bought copy of "The Chronicles of Narnia". Your DVD is region 1, which means it is NTSC. The example below would still apply to PAL, except you would omit -ofps 24000/1001 and use slightly different crop and scale dimensions.
After running mplayer dvd://1, you follow the process detailed in the section How to deal with telecine and interlacing in NTSC DVDs and discover that it is 24000/1001 fps progressive video. This simplifies the process somewhat, since you do not need to use an inverse telecine filter such as pullup or a deinterlacing filter such as yadif.
Next, you need to crop out the black bars from the top and bottom of the video, as detailed in this previous section.
The next step is truly heartbreaking. QuickTime 7 does not support MPEG-4 videos with a sample aspect ratio other than 1, so you will need to upscale (which wastes a lot of disk space) or downscale (which loses some details of the source) the video to square pixels. Either way you do it, this is highly inefficient, but simply cannot be avoided if you want your video to be playable by QuickTime 7. MEncoder can apply the appropriate upscaling or downscaling by specifying respectively -vf scale=-10:-1 or -vf scale=-1:-10. This will scale your video to the correct width for the cropped height, rounded to the closest multiple of 16 for optimal compression. Remember that if you are cropping, you should crop first, then scale:
-vf crop=720:352:0:62,scale=-10:-1
Because you will be remuxing into a different container, you should always use the harddup option to ensure that duplicated frames are actually duplicated in the video output. Without this option, MEncoder will simply put a marker in the video stream that a frame was duplicated, and rely on the client software to show the same frame twice. Unfortunately, this "soft duplication" does not survive remuxing, so the audio would slowly lose sync with the video.
The final filter chain looks like this:
-vf crop=720:352:0:62,scale=-10:-1,harddup
As always, the selection of bitrate is a matter of the technical properties of the source, as explained here, as well as a matter of taste. This movie has a fair bit of action and lots of detail, but H.264 video looks good at much lower bitrates than XviD or other MPEG-4 codecs. After much experimentation, the author of this guide chose to encode this movie at 900kbps, and thought that it looked very good. You may decrease bitrate if you need to save more space, or increase it if you need to improve quality.
You are now ready to encode the video. Since you care about
quality, of course you will be doing a two-pass encode. To shave off
some encoding time, you can specify the turbo option
on the first pass; this reduces subq and
frameref to 1. To save some disk space, you can
use the ss option to strip off the first few seconds
of the video. (I found that this particular movie has 32 seconds of
credits and logos.) bframes can be 0 or 1.
The other options are documented in Encoding with
the x264
codec and
the man page.
mencoder dvd://1 -o /dev/null -ss 32 -ovc x264 \ -x264encopts pass=1:turbo:bitrate=900:bframes=1:\ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \ -vf crop=720:352:0:62,scale=-10:-1,harddup \ -oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \ -ofps 24000/1001
If you have a multi-processor machine, don't miss the opportunity to
dramatically speed-up encoding by enabling
x264
's multi-threading mode
by adding threads=auto to your x264encopts
command-line.
The second pass is the same, except that you specify the output file and set pass=2.
mencoder dvd://1 -o narnia.avi -ss 32 -ovc x264 \ -x264encopts pass=2:turbo:bitrate=900:frameref=5:bframes=1:\ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \ -vf crop=720:352:0:62,scale=-10:-1,harddup \ -oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \ -ofps 24000/1001
The resulting AVI should play perfectly in MPlayer, but of course QuickTime can not play it because it does not support H.264 muxed in AVI. So the next step is to remux the video into an MP4 container.
There are several ways to remux AVI files to MP4. You can use mp4creator, which is part of the MPEG4IP suite.
First, demux the AVI into separate audio and video streams using MPlayer.
mplayer narnia.avi -dumpaudio -dumpfile narnia.aac mplayer narnia.avi -dumpvideo -dumpfile narnia.h264
The file names are important; mp4creator
requires that AAC audio streams be named .aac
and H.264 video streams be named .h264
.
Now use mp4creator to create a new MP4 file out of the audio and video streams.
mp4creator -create=narnia.aac narnia.mp4 mp4creator -create=narnia.h264 -rate=23.976 narnia.mp4
Unlike the encoding step, you must specify the framerate as a decimal (such as 23.976), not a fraction (such as 24000/1001).
This narnia.mp4
file should now be playable
with any QuickTime 7 application, such as
QuickTime Player or
iTunes. If you are planning to view the
video in a web browser with the QuickTime
plugin, you should also hint the movie so that the
QuickTime plugin can start playing it
while it is still downloading. mp4creator
can create these hint tracks:
mp4creator -hint=1 narnia.mp4 mp4creator -hint=2 narnia.mp4 mp4creator -optimize narnia.mp4
You can check the final result to ensure that the hint tracks were created successfully:
mp4creator -list narnia.mp4
You should see a list of tracks: 1 audio, 1 video, and 2 hint tracks.
Track Type Info 1 audio MPEG-4 AAC LC, 8548.714 secs, 190 kbps, 48000 Hz 2 video H264 [email protected], 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps 3 hint Payload mpeg4-generic for track 1 4 hint Payload H264 for track 2
If you want to add tags to your video that show up in iTunes, you can use AtomicParsley.
AtomicParsley narnia.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite
The --metaEnema option removes any existing metadata (mp4creator inserts its name in the "encoding tool" tag), and --freefree reclaims the space from the deleted metadata. The --stik option sets the type of video (such as Movie or TV Show), which iTunes uses to group related video files. The --overWrite option overwrites the original file; without it, AtomicParsley creates a new auto-named file in the same directory and leaves the original file untouched.
MEncoder is capable of creating VCD, SCVD
and DVD format MPEG files using the
libavcodec
library.
These files can then be used in conjunction with
vcdimager
or
dvdauthor
to create discs that will play on a standard set-top player.
The DVD, SVCD, and VCD formats are subject to heavy constraints. Only a small selection of encoded picture sizes and aspect ratios are available. If your movie does not already meet these requirements, you may have to scale, crop or add black borders to the picture to make it compliant.
Format | Resolution | V. Codec | V. Bitrate | Sample Rate | A. Codec | A. Bitrate | FPS | Aspect |
---|---|---|---|---|---|---|---|---|
NTSC DVD | 720x480, 704x480, 352x480, 352x240 | MPEG-2 | 9800 kbps | 48000 Hz | AC-3,PCM | 1536 kbps (max) | 30000/1001, 24000/1001 | 4:3, 16:9 (only for 720x480) |
NTSC DVD | 352x240[a] | MPEG-1 | 1856 kbps | 48000 Hz | AC-3,PCM | 1536 kbps (max) | 30000/1001, 24000/1001 | 4:3, 16:9 |
NTSC SVCD | 480x480 | MPEG-2 | 2600 kbps | 44100 Hz | MP2 | 384 kbps (max) | 30000/1001 | 4:3 |
NTSC VCD | 352x240 | MPEG-1 | 1150 kbps | 44100 Hz | MP2 | 224 kbps | 24000/1001, 30000/1001 | 4:3 |
PAL DVD | 720x576, 704x576, 352x576, 352x288 | MPEG-2 | 9800 kbps | 48000 Hz | MP2,AC-3,PCM | 1536 kbps (max) | 25 | 4:3, 16:9 (only for 720x576) |
PAL DVD | 352x288[a] | MPEG-1 | 1856 kbps | 48000 Hz | MP2,AC-3,PCM | 1536 kbps (max) | 25 | 4:3, 16:9 |
PAL SVCD | 480x576 | MPEG-2 | 2600 kbps | 44100 Hz | MP2 | 384 kbps (max) | 25 | 4:3 |
PAL VCD | 352x288 | MPEG-1 | 1152 kbps | 44100 Hz | MP2 | 224 kbps | 25 | 4:3 |
[a] These resolutions are rarely used for DVDs because they are fairly low quality. |
If your movie has 2.35:1 aspect (most recent action movies), you will have to add black borders or crop the movie down to 16:9 to make a DVD or VCD. If you add black borders, try to align them at 16-pixel boundaries in order to minimize the impact on encoding performance. Thankfully DVD has sufficiently excessive bitrate that you do not have to worry too much about encoding efficiency, but SVCD and VCD are highly bitrate-starved and require effort to obtain acceptable quality.
DVD, VCD, and SVCD also constrain you to relatively low GOP (Group of Pictures) sizes. For 30 fps material the largest allowed GOP size is 18. For 25 or 24 fps, the maximum is 15. The GOP size is set using the keyint option.
VCD video is required to be CBR at 1152 kbps. This highly limiting constraint also comes along with an extremely low vbv buffer size of 327 kilobits. SVCD allows varying video bitrates up to 2500 kbps, and a somewhat less restrictive vbv buffer size of 917 kilobits is allowed. DVD video bitrates may range anywhere up to 9800 kbps (though typical bitrates are about half that), and the vbv buffer size is 1835 kilobits.
MEncoder has options to control the output format. Using these options we can instruct it to create the correct type of file.
The options for VCD and SVCD are called xvcd and xsvcd, because they are extended formats. They are not strictly compliant, mainly because the output does not contain scan offsets. If you need to generate an SVCD image, you should pass the output file to vcdimager.
VCD:
-of mpeg -mpegopts format=xvcd
SVCD:
-of mpeg -mpegopts format=xsvcd
DVD (with timestamps on every frame, if possible):
-of mpeg -mpegopts format=dvd:tsaf
DVD with NTSC Pullup:
-of mpeg -mpegopts format=dvd:tsaf:telecine -ofps 24000/1001
This allows 24000/1001 fps progressive content to be encoded at 30000/1001 fps whilst maintaining DVD-compliance.
The aspect argument of -lavcopts is used to encode the aspect ratio of the file. During playback the aspect ratio is used to restore the video to the correct size.
16:9 or "Widescreen"
-lavcopts aspect=16/9
4:3 or "Fullscreen"
-lavcopts aspect=4/3
2.35:1 or "Cinemascope" NTSC
-vf scale=720:368,expand=720:480 -lavcopts aspect=16/9
To calculate the correct scaling size, use the expanded NTSC width of 854/2.35 = 368
2.35:1 or "Cinemascope" PAL
-vf scale=720:432,expand=720:576 -lavcopts aspect=16/9
To calculate the correct scaling size, use the expanded PAL width of 1024/2.35 = 432
In order to maintain audio/video synchronization throughout the encode, MEncoder has to drop or duplicate frames. This works rather well when muxing into an AVI file, but is almost guaranteed to fail to maintain A/V sync with other muxers such as MPEG. This is why it is necessary to append the harddup video filter at the end of the filter chain to avoid this kind of problem. You can find more technical information about harddup in the section Improving muxing and A/V sync reliability or in the manual page.
If the audio sample rate in the original file is not the same as required by the target format, sample rate conversion is required. This is achieved using the -srate option and the -af lavcresample audio filter together.
DVD:
-srate 48000 -af lavcresample=48000
VCD and SVCD:
-srate 44100 -af lavcresample=44100
libavcodec
can be used to
create VCD/SVCD/DVD compliant video by using the appropriate options.
This is a list of fields in -lavcopts that you may be required to change in order to make a complaint movie for VCD, SVCD, or DVD:
acodec: mp2 for VCD, SVCD, or PAL DVD; ac3 is most commonly used for DVD. PCM audio may also be used for DVD, but this is mostly a big waste of space. Note that MP3 audio is not compliant for any of these formats, but players often have no problem playing it anyway.
abitrate: 224 for VCD; up to 384 for SVCD; up to 1536 for DVD, but commonly used values range from 192 kbps for stereo to 384 kbps for 5.1 channel sound.
vcodec: mpeg1video for VCD; mpeg2video for SVCD; mpeg2video is usually used for DVD but you may also use mpeg1video for CIF resolutions.
keyint: Used to set the GOP size. 18 for 30fps material, or 15 for 25/24 fps material. Commercial producers seem to prefer keyframe intervals of 12. It is possible to make this much larger and still retain compatibility with most players. A keyint of 25 should never cause any problems.
vrc_buf_size: 327 for VCD, 917 for SVCD, and 1835 for DVD.
vrc_minrate: 1152, for VCD. May be left alone for SVCD and DVD.
vrc_maxrate: 1152 for VCD; 2500 for SVCD; 9800 for DVD. For SVCD and DVD, you might wish to use lower values depending on your own personal preferences and requirements.
vbitrate: 1152 for VCD; up to 2500 for SVCD; up to 9800 for DVD. For the latter two formats, vbitrate should be set based on personal preference. For instance, if you insist on fitting 20 or so hours on a DVD, you could use vbitrate=400. The resulting video quality would probably be quite bad. If you are trying to squeeze out the maximum possible quality on a DVD, use vbitrate=9800, but be warned that this could constrain you to less than an hour of video on a single-layer DVD.
vstrict: vstrict=0 should be used to create DVDs. Without this option, MEncoder creates a stream that cannot be correctly decoded by some standalone DVD players.
This is a typical minimum set of -lavcopts for encoding video:
VCD:
-lavcopts vcodec=mpeg1video:vrc_buf_size=327:vrc_minrate=1152:\ vrc_maxrate=1152:vbitrate=1152:keyint=15:acodec=mp2
SVCD:
-lavcopts vcodec=mpeg2video:vrc_buf_size=917:vrc_maxrate=2500:vbitrate=1800:\ keyint=15:acodec=mp2
DVD:
-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\ keyint=15:vstrict=0:acodec=ac3
For higher quality encoding, you may also wish to add quality-enhancing options to lavcopts, such as trell, mbd=2, and others. Note that qpel and v4mv, while often useful with MPEG-4, are not usable with MPEG-1 or MPEG-2. Also, if you are trying to make a very high quality DVD encode, it may be useful to add dc=10 to lavcopts. Doing so may help reduce the appearance of blocks in flat-colored areas. Putting it all together, this is an example of a set of lavcopts for a higher quality DVD:
-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=8000:\ keyint=15:trell:mbd=2:precmp=2:subcmp=2:cmp=2:dia=-10:predia=-10:cbp:mv0:\ vqmin=1:lmin=1:dc=10:vstrict=0
VCD and SVCD support MPEG-1 layer II audio, using one of
toolame
,
twolame
,
or libavcodec
's MP2 encoder.
The libavcodec MP2 is far from being as good as the other two libraries,
however it should always be available to use.
VCD only supports constant bitrate audio (CBR) whereas SVCD supports
variable bitrate (VBR), too.
Be careful when using VBR because some bad standalone players might not
support it too well.
For DVD audio, libavcodec
's
AC-3 codec is used.
This section shows some complete commands for creating VCD/SVCD/DVD compliant videos.
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \ -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 \ -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\ keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 25 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \ -vf scale=720:480,harddup -srate 48000 -af lavcresample=48000 \ -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\ keyint=18:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 30000/1001 \ -omovie.mpg
movie.avi
If the source already has AC-3 audio, use -oac copy instead of re-encoding it.
mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \ -vf scale=720:576,harddup -ofps 25 \ -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\ keyint=15:vstrict=0:aspect=16/9 -omovie.mpg
movie.avi
If the source already has AC-3 audio, and is NTSC @ 24000/1001 fps:
mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf:telecine \ -vf scale=720:480,harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:\ vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:aspect=16/9 -ofps 24000/1001 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd -vf \ scale=480:576,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ vcodec=mpeg2video:mbd=2:keyint=15:vrc_buf_size=917:vrc_minrate=600:\ vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd -vf \ scale=480:480,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ vcodec=mpeg2video:mbd=2:keyint=18:vrc_buf_size=917:vrc_minrate=600:\ vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224:aspect=16/9 -ofps 30000/1001 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \ scale=352:288,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ vcodec=mpeg1video:keyint=15:vrc_buf_size=327:vrc_minrate=1152:\ vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \ scale=352:240,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ vcodec=mpeg1video:keyint=18:vrc_buf_size=327:vrc_minrate=1152:\ vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224:aspect=16/9 -ofps 30000/1001 \ -omovie.mpg
movie.avi
[1] Be careful, however: Decoding DVD-resolution MPEG-4 AVC videos requires a fast machine (i.e. a Pentium 4 over 1.5GHz or a Pentium M over 1GHz).
[2] The same encode may not look the same on someone else's monitor or when played back by a different decoder, so future-proof your encodes by playing them back on different setups.
8.1. Rozwój | |
Pyt.: | Jak mam stworzyć poprawną łatkę do MPlayera? |
Odp.: | Przygotowaliśmy krótki dokument opisujący wszystkie potrzebne szczegóły. Kieruj się zawartymi w nim wskazówkami. |
Pyt.: | Jak mogę przetłumaczyć MPlayera na nowy język? |
Odp.: | Przeczytaj HOWTO tłumaczenia, powinno wszystko wyjaśnić. Dalszą pomoc uzyskasz na liście dyskusyjnej MPlayer-translations. |
Pyt.: | Jak mogę wesprzeć rozwój MPlayera? |
Odp.: | Jesteśmy bardziej niż szczęśliwi, gdy ofiarowujecie nam sprzęt i oprogramowanie w formie darowizn. Pomagają one nam ciągle ulepszać MPlayera. |
Pyt.: | Jak mogę zostać deweloperem MPlayera? |
Odp.: | Programiści i dokumentatorzy zawsze są mile widziani. Na początek przeczytaj dokumentację techniczną żeby złapać ogólny zarys. Następnie powinieneś zapisać się na listę dyskusyjną MPlayer-dev-eng i zacząć pisać. Jeżeli chcesz pomóc przy dokumentacji, zapisz się na listę dyskusyjną MPlayer-docs. |
Pyt.: | Czemu nie używacie autoconf/automake? |
Odp.: | Mamy modularny, ręcznie napisany system budowania. Sprawuje się on całkiem nieźle, więc po co zmieniać? Poza tym nie lubimy narzędzi auto* tak jak i inni ludzie. |
8.2. Kompilacja i instalacja | |
| |
Pyt.: |
Kompilacja nie udaje się z powodu błędu i gcc
wyskakuje z tajemniczą wiadomością zawierającą zwrot
|
Odp.: | Natknąłeś się na błąd w gcc. Proszę zgłoś go zespołowi gcc ale nie nam. Z jakichś przyczyn MPlayer często wywołuje błędy kompilatora. Jednak nie możemy ich naprawić i nie dodajemy do naszych źródeł obejść błędów kompilatora. Żeby uniknąć problemu albo trzymaj się wersji kompilatora o której wiadomo że jest stabilna i pewna, albo często aktualizuj. |
Pyt.: | Czy istnieją binarne (RPM/Debian) paczki z MPlayerem? |
Odp.: | Więcej informacji na ten temat znajdziesz w sekcjach Debian oraz RPM. |
Pyt.: | Jak mogę zbudować 32 bitowego MPlayera na 64 bitowym Athlonie? |
Odp.: | Zastosuj następujące opcje konfiguracyjne. ./configure --target=i386-linux --cc="gcc -m32" --as="as --32" --with-extralibdir=/usr/lib
|
Pyt.: | Konfiguracja kończy się takim komunikatem i MPlayer nie chce się skompilować! Your gcc does not support even i386 for '-march' and '-mcpu' (Twój gcc nie obsługuje nawet i386 dla '-march' oraz '-mcpu') |
Odp.: | Twój gcc nie jest poprawnie zainstalowany. Sprawdź szczegóły w config.log. |
Pyt.: |
Mam Matroksa G200/G400/G450/G550, jak skompilować/używać sterownika
|
Odp.: | Przeczytaj sekcję mga_vid. |
Pyt.: | Podczas 'make', MPlayer narzeka na brakujące biblioteki X11. Nie rozumiem, mam zainstalowane X11!? |
Odp.: | ...ale nie masz zainstalowanej paczki X11 development lub jest ona źle zainstalowana. Nazywa się ona XFree86-devel* w Red Hacie, xlibs-dev w Debianie Woody i libx11-dev w Debianie Sarge. Sprawdź także czy istnieją dowiązania symboliczne do /usr/X11 oraz /usr/include/X11 (problem może wystąpić w systemach Mandrake). |
Pyt.: | Kompilowanie pod Mac OS 10.3 prowadzi do kilku błędów konsolidacji (linkowania) |
Odp.: | Błąd konsolidacji, który się pojawia, wygląda najprawdopodobniej tak: ld: Undefined symbols: _LLCStyleInfoCheckForOpenTypeTables referenced from QuartzCore expected to be defined in ApplicationServices _LLCStyleInfoGetUserRunFeatures referenced from QuartzCore expected to be defined in ApplicationServices Problem ten wynika z faktu, że deweloperzy Apple używają MacOS 10.4 do kompilowania swojego oprogramowania i dostarczają binaria użytkownikom 10.3 poprzez Uaktualnienia Oprogramowania. Niezdefiniowane symbole obecne są pod Mac OS 10.4, ale nie pod 10.3. Jednym z rozwiązań jest powrót do QuickTime w wersji 7.0.1. Oto lepsze rozwiązanie. Zdobądź starszą wersję szkieletów (frameworks; jest lepsze tłumaczenie? - przyp. tłum.). Otrzymasz skompresowany plik zawierający QuickTime 7.0.1 Framework i 10.3.9 QuartzCore Framework. Rozpakuj pliki gdzieś poza swoim katalogiem systemowym. (nie instaluj szkieletów do swojego /System/Library/Frameworks! Ta starsza kopia jest przeznaczona tylko do ominięcia błędów konsolidacji!) gunzip < CompatFrameworks.tgz | tar xvf -
W pliku config.mak, dodaj
W rezultacie binarka MPlayer będzie
w rzeczywistości używać zainstalowanego w twoim systemie szkieletu poprzez
dynamiczne dowiązania, rozwiązywane przy uruchamianiu.
(Możesz to sprawdzić używając |
8.3. Pytania ogólne | |
| |
Pyt.: | Czy są jakieś listy dyskusyjne o MPlayerze? |
Odp.: | Tak. Spójrz na sekcję listy dyskusyjne na naszej stronie domowej. |
Pyt.: | Znalazłem paskudny błąd przy próbie odtworzenia mojego ulubionego filmu! Kogo powinienem poinformować? |
Odp.: | Przeczytaj proszę wskazówki do zgłoszeń błędów i kieruj się zawartymi tam instrukcjami. |
Pyt.: | Mam problemy z odtwarzaniem plików przy użyciu kodeka ... Czy mogę ich używać? |
Odp.: | Sprawdź status kodeków, jeżeli nie zawiera on Twojego kodeka przeczytaj HOWTO importowania kodeków Win32 i skontaktuj się z nami. |
Pyt.: | Gdy zaczynam odtwarzanie wyświetla się następujący komunikat lecz wszystko wydaje się być wporządku. Linux RTC init: ioctl (rtc_pie_on): Permission denied
|
Odp.: | Potrzebujesz uprawnień roota lub specjalnie ustawionego jądra, aby używać nowego kodu synchronizacji czasu. Aby uzyskać szczegóły, spójrz do sekcji RTC w dokumentacji. |
Pyt.: | Jak mogę zrobić zrzut ekranu? |
Odp.: | Musisz skorzystać ze sterownika wyjścia video, który nie używa nakładki video. Pod X11 wystarczy użyć -vo x11, pod Windows działa -vo directx:noaccel
Możesz też uruchomić MPlayera z filtrem video
|
Pyt.: | Co oznaczają te liczby w wierszu stanu? |
Odp.: | Przykład: A: 2.1 V: 2.2 A-V: -0.167 ct: 0.042 57/57 41% 0% 2.6% 0 4 49% 1.00x
Większość z nich obecna jest w celu debuggingu, aby się ich pozbyć użyj opcji -quiet. Możesz zauważyć, że dla niektóych plików użycie procesora przez video_out wynosi zero (0%). Spowodowane to jest tym, że jest ono wywoływane bezpośrednio przez kodek i nie może być zmierzone osobno. Jeżeli chcesz znać szybkość video_out, to porównaj różnicę przy odtwarzaniu z -vo null i normalnie przez Ciebie używanym sterownikiem wyjścia video. |
Pyt.: | Dostaję komunikaty błędów o nie znalezionym pliku /usr/local/lib/codecs/ ... |
Odp.: | Ściągnij i zainstaluj binarne kodeki z naszej strony kodeków |
Pyt.: | Jak zmusić MPlayera do zapamiętania opcji użytych dla określonego pliku, np film.avi? |
Odp.: | Stwórz plik o nazwie film.avi.conf i umieść w nim porządane opcje a następnie zapisz go w katalogu ~/.mplayer albo w tym samym katalogu co film. |
Pyt.: | Napisy są bardzo ładne, najpiękniejsze jakie widziałem, ale spowalniają odtwarzanie! Wiem, że to jest niezwykłe... |
Odp.: |
Po odpaleniu ./configure, wyedytuj
config.h i zamień |
Pyt.: | Nie mogę się dostać do menu GUI. Klikam prawym przyciskiem myszy lecz nie mogę dostać się do żadnych elementów menu! |
Odp.: | Czy używasz FVWM? Spróbuj tego:
|
Pyt.: | Jak uruchomić MPlayera w tle? |
Odp.: | Użyj: mplayer
|
8.4. Problemy z odtwarzaniem | |
| |
Pyt.: | Nie mogę zidentyfikować powodu dziwnego problemu z odtwarzaniem. |
Odp.: | Czy masz jakiś zawieruszony plik codecs.conf w ~/.mplayer/, /etc/, /usr/local/etc/ lub podobnym miejscu? Usuń go, stary plik codecs.conf może powodować tajemnicze problemy i jest przeznaczony tylko dla deweloperów pracujących nad obsługą kodeków. Przesłania on wbudowane ustawienia MPlayera dotyczące kodeków, co spowoduje chaos jeśli w nowszych wersjach zostaną wprowadzone niekompatybilne zmiany. Jeśli nie jest używany przez ekspertów jest to przepis na katastrofę w postaci pozornie losowych i trudnych do zlokalizowania awarii i problemów z odtwarzaniem. Jeśli nadal masz go gdzieś w swoim systemie powinieneś go teraz usunąć. |
Pyt.: | W jaki sposób sprawić by napisy pojawiały się na czarnym pasku pod filmem? |
Odp.: |
Użyj filtru video mplayer -vf expand=0:-100:0:0 -slang pl dvd://1
|
Pyt.: | Jak mogę określić ścieżkę audio/napisów z pliku OGM, Matroska, NUT lub DVD? |
Odp.: | Musisz użyć -aid (ID audio) lub -alang (język audio), -sid (ID napisów) lub -slang (język napisów), na przykład: mplayer -alang eng -slang eng Aby zobaczyć jakie są dostępne: mplayer -vo null -ao null -frames 0 -v
|
Pyt.: | Próbuję odtworzyć jakiś strumień z internetu, ale nie udaje mi się. |
Odp.: | Spróbuj otworzyć strumień korzystając z opcji -playlist. |
Pyt.: | Ściągnąłem film z sieci P2P i nie chce się odtworzyć! |
Odp.: | Prawdopodobnie plik jest uszkodzony lub jest to fałszywka. Jeżeli dostałeś go od znajomego i on mówi, że u niego działa, to spróbuj porównać skróty md5sum (md5sum hashes). |
Pyt.: | Mam problem z wyświetlaniem napisów. Pomocy! |
Odp.: |
Upewnij się, że poprawnie zainstalowałeś czcionki. Wykonaj jeszcze raz
krok po kroku instrukcje z części
czcionki i OSD z rozdziału o instalacji.
Jeżeli używasz czcionek TrueType, upewnij się, że masz zainstalowaną
bibliotekę |
Pyt.: | Dlaczego MPlayer nie działa w Fedora Core? |
Odp.: | Prelink, exec-shield i aplikacje używająca windowsowych DLLi (takie jak MPlayer) nie współdziałają ze sobą dobrze w Fedorze. Problem powoduje exec-shield, który ustawia losowy adres, pod który będą ładowane biblioteki systemowe. Dzieje się to podczas prelinkowania (raz na dwa tygodnie) MPlayer próbuje załadować windowsowy DLL pod określony adres (0x400000). Jeżeli znajduje się tam już ważna biblioteka systemowa, MPlayer się wykrzaczy. (Typowym objawem jest błąd naruszenia ochrony pamięci (segfault) przy próbie odtwarzania plików Windows Media 9.) Jeżeli napotkasz taki problem, masz dwa wyjścia:
|
Pyt.: | MPlayer przerywa działanie z komunikatem MPlayer interrupted by signal 4 in module: decode_video (MPlayer przerwany przez sygnał 4 w module: decode_video). |
Odp.: | Nie używaj MPlayera na CPU innym niż ten, na któym był skompilowany lub przekompiluj go z detekcją CPU podczas uruchamiania (./configure --enable-runtime-cpudetection). |
Pyt.: | Gry próbuję przechwycić obraz z mojego tunera kolory są dziwne. Działa OK pod innymi aplikacjami. |
Odp.: | Twoja karta prawdopodobni zgłasza obsługę penych przestrzeni kolorów, w rzeczywistości ich nie obsługując. Spróbuj z YUV2 zamiast domyślnego YV12 (spójrz do sekcji TV). |
Pyt.: | Otrzymuję bardzo dziwne wartości procentowe (dużo za duże) podczas odtwarzania plików na moim notebooku. |
Odp.: | Jest to efekt działania systemu zarządzania / oszczędzania energii w Twoim notebooku (BIOS, a nie kernel). Podłącz wtyczkę od zasilacza przed włączeniem notebooka. Możesz także zobaczyć czy pomoże cpufreq (interfejs SpeedStep dla Linuksa). |
Pyt.: | Audio/video całowicie wychodzi z synchronizacji gdy uruchamiam MPlayera jako root na moim notebooku. Działa OK gdy robię to jako zwykły użytkownik. |
Odp.: | To także jest efekt zarządzania energią (patrz wyżej). Podłącz wtyczkę od zasilacza przed włączeniem notebooka lub użyj opcji nortc. |
Pyt.: | Podczas odtwarzania filmu nagle się tnie i wyświetlany jest następujący komunikat: Badly interleaved AVI file detected - switching to -ni mode... (Plik AVI ze złym przeplotem - przełączam się w tryb -ni) |
Odp.: | Pliki ze złym przeplotem i -cache nie współdziałają dobrze. Spróbuj -nocache |
8.5. Problemy ze sterownikiem video/audio (vo/ao) | |
| |
Pyt.: | Gdy przechodzę w tryb pełnoekranowy wyświetlana jest czarna ramka okalająca obraz. Obraz nie jest w ogóle skalowany. |
Odp.: |
Twój sterownik wyjścia video nie obsługuje sprzętowego skalowania,
a ponieważ programowe skalowanie może być niewiarygodnie powolne,
MPlayer nie włącza go automatycznie.
Prawdopodobnie używasz sterownika wyjśca |
Pyt.: | Właśnie zainstalowałem MPlayera. W momencie gdy chcę otworzyć plik video wyskakuje błąd: Error opening/initializing the selected video_out (-vo) device. (Błąd przy otwarciu/inicjalizacji wybranego urządzenia video_out (-vo).) Jak mogę rozwiązać mój problem? |
Odp.: | Po prostu zmień urządzenie wyjścia video. Aby uzyskać listę dostępnych sterowników wyjścia video wydaj następujące polecenie: mplayer -vo help Gdy juz wybierzesz odpowiedni sterownik wyjścia video, dodaj go do swojego pliku konfiguracyjnego. Dodaj
vo = do ~/.mplayer/config i/lub
vo_driver = do ~/.mplayer/gui.conf. |
Pyt.: | Mam problemy z [Twój manager okien] i pełnoekranowymi trybami xv/xmga/sdl/x11... |
Odp.: | Przeczytaj wskazówki do zgłaszania błędów i wyślij nam poprawne zgłoszenie błędu. Popróbuj też poeksperymentować z opcją -fstype. |
Pyt.: | Dźwięk gubi synchronizację przy odtwarzaniu pliku AVI. |
Odp.: | Wypróbuj opcje -bps oraz -nobps. Jeżeli nic się nie poprawiło, przeczytaj wskazówki do zgłaszania błędów i wgraj plik na FTP. |
Pyt.: | Mój komputer odtwarza zbyt wolno pliki AVI MS DivX w rozdzielczości ~ 640x300 i z dźwiękiem mp3 stereo. Gdy użyję opcji -nosound, wszystko jest OK (lecz bez dźwięku). |
Odp.: | Twój komputer jest zbyt wolny lub sterownik karty dźwiękowej jest zepsuty. Skonsultuj się z dokumentacją, aby zobaczyć, czy możesz poprawić wydajność. |
Pyt.: | Jak użyć dmix z MPlayerem? |
Odp.: | Po ustawieniu asoundrc użyj -ao alsa:device=dmix. |
Pyt.: | Podczas odtwarzania filmu nie ma dźwięku i dostaję komunikat podobny do tego: AO: [oss] 44100Hz 2ch Signed 16-bit (Little-Endian) audio_setup: Can't open audio device /dev/dsp: Device or resource busy couldn't open/init audio device -> NOSOUND Audio: no sound!!! Start playing...
|
Odp.: | Czy masz uruchomione KDE lub GNOME z demonem dźwięku aRts lub ESD? Spróbuj wyłączyć demona dźwięku lub użyj opcji -ao arts lub -ao esd, aby MPlayer używał aRts lub ESD. Możliwe jest też że masz uruchomione ALSA bez emulacji OSD, spróbuj załadować moduły jądra ALSA OSS lub dodaj -ao alsa do wiersza poleceń żeby bezpośrednio używać sterownika wyjścia dźwięku ALSA. |
Pyt.: | Gdy uruchamiam MPlayera pod KDE, pojawia się czarny ekran i nic się nie dzieje. Po około minucie zaczyna się odtwarzanie filmu. |
Odp.: | aRts - demon dźwięku KDE - blokuje urządzenie dźwiękowe. Albo czekaj aż rozpocznie się odtwarzanie lub wyłącz demona arts w centrum sterowania. Jeżeli chcesz używać dźwięku aRts, określ wyjście audio przez nasz natywny sterownik dźwięku aRts (-ao arts). Jeżeli próba się nie powiedzie lub sterownik nie jest wkompilowany, spróbuj użyć SDL (-ao sdl) i upewnij się, że Twoje SDL poradzi sobie z dźwiękiem aRts. Inną możliwością jest uruchomienie MPlayera z artsdsp. |
Pyt.: | Mam problemy z synchronizacją A/V. Niektóre moje AVI są odtwarzane dobrze, a niektóre z podwójną szybkością. |
Odp.: |
Masz wadliwą kartę/sterownik dźwięku. Najwyraźniej jest ustawiona na stałe na
44100Hz i próbujesz odtwarzać plik z dźwiękiem 22050Hz. Wypróbuj filtr zmiany
częstotliwości próbkowania audio (filtr |
Pyt.: | Podczas odtwarzania filmu pojawia się brak synchronizacji video-audio i/lub MPlayer wywala się z następującym komunikatem: DEMUXER: Too many (945 in 8390980 bytes) video packets in the buffer! (DEMUXER: Za dużo (945 w 8390980 bajtach) pakietów video w buforze!) |
Odp.: | Może istnieć kilka powodów.
|
Pyt.: | Jak pozbyć się braku synchronizacji audio/video przy przewijaniu strumieni RealMedia? |
Odp.: | Może pomóc -mc 0.1 |
8.6. Odtwarzanie DVD | |
| |
Pyt.: | Co z nawigacją/menu DVD? |
Odp.: | MPlayer nie obsługuje menu DVD ze względu na poważne ograniczenia konstrukcyjne, które uniemożliwiają poprawną obsługę stałych obrazów i treści interaktywnej. Jeżeli chcesz mieć fajne menu, będziesz musiał użyć innego odtwarzacza, takiego jak xine, vlc lub Ogle. Jeżeli chcesz nawigacji DVD w MPlayerze, to będziesz musiał sam ją zaimplementować. Bierz jednak pod uwagę, że jest to poważne przedsięwzięcie. |
Pyt.: | Nie mogę obejrzeć żadnego nowego DVD od Sony Pictures/BMG. |
Odp.: | Jest to normalne; zostałeś oszukany i przedano Ci świadomie wadliwą płytę. Jedyną metodą odtworzenia tych DVD jest ominięcie wadliwych bloków na dysku przy użyciu DVDnav zamiast mpdvdkit2. Możesz to zrobić kompilując MPlayera z obsługą DVDnav a potem zamieniając dvd:// na dvdnav:// w wierszu poleceń. Jak na razie DVDnav i mpdvdkit2 wzajemnie się wykluczają, więc musisz podać opcję --disable-mpdvdkit2 skryptowi konfiguracyjnemu. |
Pyt.: | Co z napisami? Czy MPlayer może je wyświetlać? |
Odp.: | Tak. Spójrz do rozdziału DVD. |
Pyt.: | Jak mogę ustawić kod regionu w moim napędzie DVD? Nie mam Windowsów! |
Odp.: | Użyj narzędzia regionset. |
Pyt.: | Nie mogę odtworzyć DVD, MPlayer się zawiesza bądź wyrzuca błędy "Encrypted VOB file!" (Zaszyfrowany plik VOB!). |
Odp.: | Kod deszyfrowania CSS nie działa z niektórymi odtwarzaczami DVD dopóki nie ustawisz odpowiednio kodu regionu. Przeczytaj odpowiedź na poprzednie pytanie. |
Pyt.: | Czy muszę mieć uprawnienia (lub setuid) użytkownika root, aby móc odtwarzać DVD? |
Odp.: | Nie. Jednakże musisz mieć poprawne prawa ustawione dla wpisu urządzenia DVD (w /dev/). |
Pyt.: | Czy jest możliwe odtwarzanie/kodowanie tylko wybranych rozdziałów? |
Odp.: | Tak, spróbuj użyć opcji -chapter. |
Pyt.: | Odtwarzanie DVD jest bardzo wolne! |
Odp.: | Użyj opcji -cache (opisana na stronie man) i spróbuj włączyć DMA dla napędu DVD, używając narzędzia hdparm (opisane w rozdziale CD). |
Pyt.: | Skopiowałem DVD używając vobcopy. Jak mogę je odtworzyć/zakodować z dysku twardego? |
Odp.: | Użyj opcji -dvd-device aby odwołać się do katalogu zawierającego pliki:
mplayer dvd://1 -dvd-device
|
8.7. Prośby o wprowadzenie nowych możliwości | |
Pyt.: | Jeżeli MPlayer jest zatrzymany i próbuję przewijać lub nacisnę jakikolwiek klawisz, MPlayer z powrotem wraca do odtwarzania. Chciałbym móc przwijać zatrzymany film. |
Odp.: | Zaimplementowanie tego bez utraty synchronizacji A/V jest bardzo podchwytliwe. Wszelkie próby do tej pory zakończyły się porażką. Łatki mile widziane. |
Pyt.: | Chciałbym przewijać o +/- 1 klatkę zamiast 10 sekund. |
Odp.: | Możesz przejść w przód o jedną klatkę przez naciśnięcie .. Film zostanie zatrzymany (po szczegóły zajrzyj do strony man). Wątpliwe jest, żeby przechodzenie w tył zostało zaimplementowane w najbliższym czasie. |
8.8. Kodowanie | |
| |
Pyt.: | Jak mogę kodować? |
Odp.: | Przeczytaj sekcję MEncoder |
Pyt.: | Jak zrzucić całą pozycję DVD do pliku? |
Odp.: | Gdy już wybierzesz pozycję i upewnisz się, że jest poprawnie odtwarzana przez MPlayera, użyj opcji -dumpstream. Na przykład:
mplayer dvd://5 -dumpstream -dumpfile
zrzuci piątą pozycję DVD do pliku |
Pyt.: | Jak mogę tworzyć automatycznie (S)VCD? |
Odp.: | Wypróbuj skrypt mencvcd.sh z podkatalogu TOOLS. Korzystając z niego, możesz kodować DVD lub inne filmy do formatu VCD lub SVCD, a nawet wypalać bezpośrednio na CD. |
Pyt.: | Jak mogę stworzyć (S)VCD? |
Odp.: | Nowsze wersje MEncodera potrafią bezpośrednio generować pliki MPEG-2, które mogą być użyte jako podstawa do stworzenia VCD lub SVCD i prawdopodobnie są od ręki odtwarzalne na wszelkich platformach (na przykład aby podzielić się nagraniem z kamery cyfrowej z Twoimi nieobytymi z komputerem przyjaciółmi). Aby zdobyć więcej informacji przeczytaj sekcję Używanie MEncodera do tworzenia plików zgodnych z VCD/SVCD/DVD. |
Pyt.: | Jak mogę połączyć dwa pliki video? |
Odp.: | Przy odrobinie szczęścia zbiory MPEG można połączyć (zkonkatenować). Do zbiorów AVI możesz używać obsługi wielu zbiorów MEncodera w następujący sposób: mencoder -ovc copy -oac copy -o Zadziała to tylko jeśli zbiory mają tę samą rozdzielczość i używają tego samego kodeka. Możesz też spróbować avidemux i avimerge (część zestawu narzędzi transcode). |
Pyt.: | Jak mogę naprawić pliki AVI z popsutym indeksem lub złym przeplotem? |
Odp.: | Aby unknąć używania -idx aby móc przewijać w plikach AVI z zepsutym indeksem lub -ni do odtwarzania plików AVI ze złym przeplotem, użyj polecenia mencoder -idx aby skopiować strumienie audio i video do nowego pliku, równocześnie odtwarzając indeks i poprawnie przeplatając dane. Oczywiście to nie może naprawić ewentualnych błędów w strumieniach audio i/lub video. |
Pyt.: | Jak mogę naprawić proporcje pliku AVI? |
Odp.: | Możesz to zrobić dzięki opcji MEncodera -force-avi-aspect, która nadpisuje proporcje zachowane w opcji nagłówka AVI vprp OpenDML. Na przykład: mencoder
|
Pyt.: | Jak mogę zapisać i kodować plik VOB z popsutym początkiem? |
Odp.: | Głównym problemem gdy chcesz kodować popsuty [3] plik VOB jest to, że będzie bardzo ciężko uzyskać wynik z doskonałą synchronizacją A/V. Jednym sposobem ominięcia tego jest obcięcie uszkodzonej części i kodowanie tylko tej dobrej. Najpierw musisz się zorientować gdzie zaczyna się poprawna część: mplayer Potem możesz stworzyć nowy plik, zawierający tylko poprawną część: dd if=
|
Pyt.: | Nie mogę zakodować napisów z DVD do AVI! |
Odp.: | Musisz poprawnie określić opcję -sid. |
Pyt.: | Jak mogę zakodować tylko wybrane rozdziały z DVD? |
Odp.: | Użyj poprawnie opcji -chapter, na przykład: -chapter 5-7. |
Pyt.: | Próbuję pracować z plikami 2GB+ na systemie plików VFAT. Czy to działa? |
Odp.: | Nie, VFAT nie obsługuje plików 2GB+. |
Pyt.: | Co oznaczają te liczby w wierszu stanu w czasie procesu kodowania? |
Odp.: | Przykład: Pos: 264.5s 6612f ( 2%) 7.12fps Trem: 576min 2856mb A-V:0.065 [2126:192]
|
Pyt.: | Dlaczego zalecany bitrate wypisywany przez MEncodera jest ujemny? |
Odp.: | Ponieważ bitrate (ilość bitów na sekundę) z którym zakodowałeś audio jest za duże, aby film się zmieścił na jakimkolwiek CD. Sprawdź czy libmp3lame jest zainstalowana poprawnie. |
Pyt.: | Nie mogę zakodować pliku ASF do AVI/DivX, ponieważ ma on 1000 fps. |
Odp.: | Ponieważ ASF używa zmiennego framerate (ilość ramek na sekundę), a AVI używa ustalonej wartości, musisz ustawić ją ręcznie używając opcji -ofps. |
Pyt.: | Jak mogę wstawić napisy do pliku wynikowego? |
Odp.: | Po prostu przekaż opcję -sub <nazwa_pliku> (lub odpowiednio -sid) do MEncodera. |
Pyt.: | Jak zakodować wyłącznie dźwięk z teledysku? |
Odp.: | Nie jest to możliwe bezpośrednio lecz możesz sprówować następującego sposobu (zwróć uwagę na znak & na końcu polecenia mplayer): mkfifo Ten sposób pozwala na użycie dowolnego kodera, nie tylko LAME. Po prostu zamień lame w powyższym poleceniu na swój ulubiony koder audio. |
Pyt.: | Dlaczego zewnętrzne odtwarzacze nieodtwarzają filmów MPEG-4 zakodowanych MEncoderem w wersji nowszej niż 1.0pre7? |
Odp.: |
mencoder
Zauważ, że to ustawi FourCC na XVID, a nie na DIVX. Jest to zalecane, ze
względu na to, że kod FourCC DIVX oznacza DivX4, który jest bardzo prostym
kodekiem MPEG-4, a DX50 i XVID oba oznaczają pełne MPEG-4 (ASP). Dlatego
gdy ustawisz FourCC na DIVX, pewne programy lub sprzętowe odtwarzacze mogą
się dławić na niektórych zaawansowanych funkcjach, które obsługuje
|
Pyt.: | Jak mogę kodować plik zawierający tylko dźwięk? |
Odp.: | Użyj aconvert.sh z podkatalogu TOOLS w drzewie źródeł MPlayera. |
Pyt.: | Jak mogę odtwarzać napisy wbudowane w AVI? |
Odp.: | Użyj avisubdump.c z podkatalogu TOOLS lub przeczytaj ten dokument o wydobywaniu/demultipleksowaniu napisów wbudowanych w pliki AVI OpenDML |
Pyt.: | MPlayer nie... |
Odp.: | Przejrzyj podkatalog TOOLS. Znajduje się tam kolekcja losowych skryptów i hacków. Dokumentację znajdziesz w TOOLS/README. |
[3] W pewnym stopniu, niektóre formy zabezpieczenia przed kopiowaniem używane na DVD mogą zostać uznane za uszkodzenie zawartości.
Dobre raporty błędów stanowią bardzo istotny wkład w rozwój każdego projektu. Jednak tak jak pisanie dobrych programów wymaga sporo pracy, tak dobre zgłoszenia problemów wymagają trochę wysiłku. Prosimy wziąć pod uwagę to, że większość deweloperów jest bardzo zajęta i odbiera nieprzyzwoitą wręcz ilość listów. Wsparcie ze strony użytkownika jest naprawdę ważne w procesie rozwoju MPlayera. Należy jednak pamiętać, że trzeba dostarczyć wszystkie informacje o które poprosimy i postępować dokładnie według instrukcji zawartej w tym dokumencie.
Jeśli znalazłeś lukę, którą można wykorzystać, i chcesz zrobić dobry uczynek i pozwolić nam ją naprawić zanim ją ujawnisz, chętnie przyjmiemy zgłoszenie bezpieczeństwa pod adresem [email protected]. Proszę pisać w języku angielskim i dodać [SECURITY] albo [ADVISORY] w temacie. Upewnij się że Twoje zgłoszenie zawiera całkowity i dokładny opis błędu. Jeśli wyślesz też poprawkę będziemy bardzo szczęśliwi. Proszę, nie opóźniaj zgłoszenia żeby stworzyć exploit wykorzystujący lukę, możesz go wysłać w następnym liście.
Jeżeli uważasz, że posiadasz wystarczające umiejętności, namawiamy Cię do samodzielnego poprawiania błędów. A może już to zrobiłeś? Przeczytaj ten krótki dokument, żeby dowiedzieć się w jaki sposób dodać swoją łatę do źródeł MPlayera. Jeżeli będziesz miał jakieś pytania, pomogą Ci ludzie z listy MPlayer-dev-eng (tylko w języku angielskim -przyp. tłumacza).
Czasami zdarza się problem typu "wcześniej działało, a teraz przestało...". Tutaj znajduje się, opisana krok po kroku, procedura, której celem jest próba znalezienia źródła problemu. Nie jest ona przeznaczona dla przeciętnego użytkownika.
Najpierw należy pobrać źródła MPlayera z SVN. Więcej szczegółów na ten temat znajduje się w sekcji o Subversion strony pobierania.
W rezultacie w katalogu mplayer/ znajdzie się obraz drzewa Subversion, po stronie klienta. Teraz zaktualizuj ten obraz do daty, która Cię interesuje:
cd mplayer/ svn update -r {"2004-08-23"}
Format daty to RRRR-MM-DD GG:MM:SS. Używając takiego formatu daty masz pewność, że będziesz w stanie wyciągać łatki zgodnie z datą, gdy zostały dodane, dokładnie tak jak w przypadku archiwum listy MPlayer-cvslog.
Następnie postępuj tak jak w przypadku normalnej aktualizacji:
./configure make
Jeżeli czytasz ten dokument, a nie jesteś programistą, najszybszym sposobem na dotarcie do miejsca w którym pojawi się problem jest użycie binarnego wyszukiwania — tzn. szukania daty pojawienia się problemu poprzez dzielenie interwału czasowego na pół przy każdym kolejnym wyszukiwaniu. Przykładowo, jeżeli problem wystąpił w 2003, spróbuj najpierw szukać problemu w wydaniu z połowy roku. Jeżeli będzie obecny, cofnij się do pierwszego kwietnia; jeżeli nie, przejdź do pierwszego października itd.
Jeżeli masz dużo wolnego miejsca na twardym dysku (pełna kompilacja zajmuje aktualnie 100 MB albo około 300-350 MB jeżeli uaktywnione jest debuggowanie), skopiuj najstarszą działającą wersję zanim dokonasz aktualizacji; oszczędzi to sporo czasu, jeżeli zajdzie potrzeba powrotu do starszej wersji. (Zazwyczaj konieczne jest uruchomienie 'make distclean' przed rekompilacją wcześniejszej wersji, więc jeżeli nie zrobisz kopii zapasowej oryginalnego drzewa, będziesz musiał wszystko rekompilować, jeśli będziesz chciał wrócić do aktualnej wersji.)
Kiedy znajdziesz dzień w którym pojawił się problem, kontynuuj szukanie używając archiwum mplayer-cvslog (uporządkowane wg daty) i bardziej precyzyjnych aktualizacji svn obejmujących godziny, minuty i sekundy:
svn update -r {"2004-08-23 15:17:25"}
To pomoże ci łatwo znaleźć łatkę, która jest winowajcą.
Jeżeli znajdziesz łatkę, która jest źródłem problemu, to znaczy, że już prawie osiągnąłeś sukces; wyślij informację o niej na MPlayer Bugzilla lub zapisz się na listę MPlayer-users i tam wyślij raport. Istnieje szansa, że autor łatki zasugeruje w jaki sposób rozwiązać problem. Możesz też wpatrywać się w łatkę tak długo, aż nie będzie mogła wytrzymać i wyjawi ci lokalizację błędu:-).
Po pierwsze sprawdź najnowszą wersję SVN MPlayera, ponieważ dany błąd może być już w niej naprawiony. Rozwój MPlayera przebiega naprawdę szybko, większość problemów występujących w oficjalnych wydaniach jest zgłaszana w ciągu kilku dni albo nawet godzin. Dlatego też prosimy używać tylko wersji z Subversion do zgłaszania błędów. Dotyczy to głównie pakietów binarnych MPlayera. Instrukcje dotyczące Subversion znajdują się na dole tej strony lub w pliku README. Jeżeli problem dalej występuje prosimy sprawdzić listę znanych błędów i resztę dokumentacji. Jeżeli problem nie jest znany lub rozwiązany przez naszą dokumentację prosimy zgłosić błąd.
Nie należy wysyłać zgłoszeń do deweloperów. MPlayer jest dziełem dużej grupy, więc więcej osób może być zainteresowanych tym problemem. Czasami inni użytkownicy spotkali się już z danym problemem i wiedzą, jak go rozwiązać, nawet jeżeli jest to błąd w kodzie MPlayera.
Prosimy opisywać problem tak dokładnie, jak to tylko możliwe. Należy sprawdzić w jakich dokładnie okolicznościach pojawia się błąd. Czy występuje on tylko w określonych sytuacjach? Czy ma związek z konkretnym plikiem lub typem plików? Czy dotyczy tylko danego kodeka, czy też jest niezależny od kodeków? Czy możesz go powtórzyć z każdym wyjściem video? Im więcej informacji dostarczysz, tym większe są szanse na rozwiązanie zgłoszonego problemu. Nie należy również zapominać o dołączeniu wartościowych informacji wymienionych poniżej. W przeciwnym wypadku nie będziemy w stanie prawidłowo zdiagnozować zgłoszonego problemu.
Doskonałym i dobrze napisanym przewodnikiem dotyczącym zadawania pytań jest dokument "Jak mądrze zadawać pytania" napisany przez Erica S. Raymonda (Polskie tłumaczenie tego dokumentu można znaleźć tutaj -przyp. tłum.). Istnieje także inny dokumentem tego typu zatytułowany Jak efektywnie zgłaszać błędy stworzony przez Simona Tathama (Polskie tłumaczenie tego dokumentu można znaleźć tutaj -przyp. tłum.). Jeśli będziesz postępował zgodnie z tymi przewodnikami, powinieneś uzyskać pomoc. Prosimy jednak pamiętać, że śledzimy listę jako ochotnicy, poświęcając nasz wolny czas. Jesteśmy bardzo zajęci i nie potrafimy zagwarantować, że pomożemy rozwiązać zgłoszony problem, ani nawet tego, że odpowiemy na Twoje zgłoszenie.
Zapisz się na listę MPlayer-users: http://lists.mplayerhq.hu/mailman/listinfo/mplayer-users i wyślij swoje zgłoszenie błędu na mailto:[email protected], gdzie będzie można je omówić.
Jeżeli wolisz, możesz zamiast tego skorzystać z naszej nowej Bugzilli (systemu zgłaszania błędów - przyp. tłum.)
Językiem obowiązującym na tej liście jest angielski. Prosimy trzymać się zasad standardowej netykiety (Polską wersję netykiety można przeczytać np. tutaj - przyp. tłum.) i nie wysyłać listów w HTML-u na żadną z naszych list. W przeciwnym wypadku zostaniesz zignorowany lub wyrzucony z listy. Jeżeli nie wiesz czym jest list w HTML-u albo dlaczego jest on zły, przeczytaj ten świetny dokument (znów tylko po angielsku - przyp. tłum.). Wyjaśnia on wszystkie szczegóły i zawiera instrukcje wyłączania HTML-u. Zauważ również, że nie wysyłamy kopii listów do użytkowników, więc dobrym pomysłem jest zapisanie się na listę w celu uzyskania odpowiedzi.
Może zajść potrzeba dołączenia logu, konfiguracji lub przykładowego pliku w Twoim zgłoszeniu błędu. Jeżeli któryś z nich ma duży rozmiar, lepiej załadować go na nasz serwer HTTP w skompresowanej postaci (gzip i bzip2 są preferowanymi formatami) i załączyć tylko ścieżkę i nazwę pliku do zgłoszenia błędu. Nasza lista ma ustawiony limit rozmiaru każdej wiadomości na 80k. Jeżeli potrzebujesz wysłać coś większego, musisz to skompresować albo załadować na serwer.
Nazwa Twojej dystrybucji Linuksa albo system operacyjny. Np.:
Red Hat 7.1
Slackware 7.0 + pakiety rozwojowe z 7.1 ...
wersja jądra (kernela):
uname -a
wersja biblioteki libc:
ls -l /lib/libc[.-]*
wersja gcc i ld:
gcc -v ld -v
wersja binutils:
as --version
Jeżeli masz problem z trybem pełnoekranowym:
Menadżer okien i wersja
Jeżeli masz problem z XVIDIXem:
głębia barw Xów (colour depth):
xdpyinfo | grep "depth of root"
Jeżeli tylko GUI zawiera błędy:
wersja GTK
wersja GLIB
wersja libpng
Sytuacja w której pojawia się błąd GUI
informacje o procesorze (CPU) (to działa tylko pod Linuksem):
cat /proc/cpuinfo
Producent karty graficznej i model. Np.:
ASUS V3800U chip: nVidia TNT2 Ultra pro 32MB SDRAM
Matrox G400 DH 32MB SGRAM
Typ sterownika video i wersja, np:
wbudowane sterowniki X
nVidia 0.9.623
Utah-GLX CVS 2001-02-17
DRI z X 4.0.3
Typ karty dźwiękowej i sterownik, np:
Creative SBLive! Gold ze sterownikiem OSS z oss.creative.com
Creative SB16 ze sterownikiem OSS z kernela
GUS PnP z emulacją ALSA OSS
Jeżeli masz wątpliwości, załącz wyjście linuksowego polecenia lspci -vv.
Jeżeli ./configure zwraca błąd albo automatyczne wykrywanie czegoś zawiedzie, przeczytaj config.log. Możliwe, że znajdziesz tam odpowiedź, na przykład kilka połączonych wersji tej samej biblioteki w Twoim systemie albo że zapomniałeś zainstalować pakietów rozwojowych (tych z przyrostkiem -dev albo -devel). Jeżeli wydaje Ci się, że istnieje jednak błąd, załącz config.log w twoim raporcie.
Prosimy załączyć wyjście MPlayera w trybie gadatliwym na poziomie pierwszym (opcja -v - przyp. tłum.), ale pamiętając o nie skracaniu wyniku polecenia podczas kopiowania go do Twojego listu. Deweloperzy potrzebują wszystkich informacji do prawidłowego zdiagnozowania problemu. Możesz przekierować wyjście bezpośrednio do pliku w ten sposób:
mplayer -vopcje
nazwa_pliku
> mplayer.log 2>&1
Jeżeli Twój problem jest specyficzny dla jednego albo wielu plików, załaduj winowajcę(ów) na: http://streams.videolan.org/upload/
Załaduj także mały plik tekstowy nazwany tak samo jak Twój plik, ale z rozszerzeniem .txt. Opisz w nim problem, który masz z zawartym plikiem i załącz swój adres email oraz wyjście MPlayera w trybie gadatliwym na poziomie pierwszym. Zazwyczaj pierwsze 1-5 MB pliku jest wystarczające do odtworzenia problemu, ale żeby być pewnym prosimy wykonać:
dd if=twój_plik
of=mały_plik
bs=1024k count=5
To polecenie weźmie pierwsze pięć megabajtów 'twojego_pliku' i zapisze je do 'małego_pliku'. Następnie spróbuj odtworzyć mały plik i jeśli błąd wciąż się pojawia plik ten jest dla nas wystarczający. Prosimy w żadnym wypadku nie wysyłać plików poprzez pocztę elektroniczną! Załaduj je na serwer FTP i wyślij tylko ścieżkę/nazwę pliku. Jeżeli plik jest dostępny w sieci, wyślij dokładny adres pod którym jest on dostępny.
Musisz uruchomić MPlayera wewnątrz gdb i wysłać nam kompletne wyjście, albo jeżeli posiadasz zrzut core (ang. core dump) utworzony w wyniku awarii, wyciągnąć z niego użyteczne informacje. Oto jak to zrobić:
Przekompiluj MPlayera z opcją debugowania kodu:
./configure --enable-debug=3 make
i uruchom MPlayera używając gdb:
gdb ./mplayer
Jesteś teraz wewnątrz gdb. Wpisz:
run -vopcje-mplayera
nazwa_pliku
i odtwórz swoją awarię. Gdy tylko to zrobisz, gdb przeniesie cię z powrotem do wiersza poleceń, gdzie należy wpisać
bt disass $pc-32,$pc+32 info all-registers
Jeżeli utworzyłeś właściwy raport błędu kierując się powyższymi wskazówkami i jesteś pewien że to błąd MPlayera, nie kompilatora albo uszkodzonego pliku, przeczytałeś dokumentację i nie możesz znaleźć rozwiązania, Twoje sterowniki dźwięku są w porządku, możesz chcieć zapisać się na listę MPlayer-advusers (tylko po angielsku - przyp. tłum.) i wysłać tam swoje zgłoszenie błędu, aby uzyskać lepszą i szybszą odpowiedź.
Wiedz, że jeśli zadasz trywialne pytanie albo odpowiedź na nie znajduje się na stronie man, zamiast dostać odpowiedź zostaniesz zignorowany albo obrzucony wyzwiskami. Dlatego też nie obrażaj nas i zapisz się na listę -advusers tylko jeżeli naprawdę wiesz co robisz i czujesz się zaawansowanym użytkownikiem lub deweloperem. Jeżeli spełniasz te kryteria, nie powinno Ci sprawić problemu znalezienie sposobu zapisania się na listę (pamiętaj, że musisz biegle znać j. angielski - przyp. tłum.)
W zasadzie nie ma to żadnego związku z formatem skórki, ale powinieneś wiedzieć, że MPlayer nie ma wbudowanej skórki, w związku z tym co najmniej jedna skórka musi być zainstalowana, abyś miał możliwość korzystania z GUI.
Skórki są szukane w następujących katalogach (w kolejności):
$(DATADIR)/skins/
$(PREFIX)/share/mplayer/skins/
~/.mplayer/skins/
Zauważ, że pierwsza ścieżka może się różnić, w zależności od sposobu w jaki MPlayer został skonfigurowany (zobacz argumenty --prefix oraz --datadir w skrypcie configure).
Każda skórka jest instalowana w swoim własnym katalogu, w jednej z wyżej wymienionych lokacji, na przykład:
$(PREFIX)/share/mplayer/skins/default/
Obrazki muszą być zapisane w formacie PNG (paleta truecolor - 24 lub 32 bpp).
W głównym oknie oraz na panelu odtwarzania (zobacz niżej) możesz użyć obrazków z 'przezroczystością': obszary wypełnione kolorem #FF00FF (magenta) są w pełni przezroczyste dla MPlayera. Oznacza to, że możesz mieć okna o różnych kształtach jeśli Twój X Server ma rozszerzenie XShape.
Skórki są całkowicie konfigurowalne (w odróżnieniu od skórek np. Winampa/XMMS), a więc zależy to wyłącznie od Ciebie, czy stworzysz coś wspaniałego.
W chwili obecnej mamy cztery okna, które można ozdobić: okno główne (main window), okno ekranu (subwindow), panel odtwarzania (playbar), menu skórki (skin menu) (które może być aktywowane prawym przyciskiem myszy).
Okno główne i/lub panel odtwarzania to miejsca, gdzie możesz sterować MPlayerem. Tłem tego okna jest obrazek. Różne elementy mogą (i muszą) być umieszczone w tym oknie: przyciski, potencjometry (suwaki) i etykiety. Dla każdego elementu musisz określić ich pozycję oraz rozmiar.
Przycisk ma trzy stany (wciśnięty, zwolniony, nieaktywny), zatem jego obrazki muszą być podzielone na trzy części w pionie. Zobacz sekcję button, by dowiedzieć się więcej.
Potencjometr (suwak) (wykorzystywany głównie jako pasek przewijania i kontrolka głośności/balansu) może składać się z każdej liczby stanów poprzez podzielenie jego obrazka na wiele części, z których jedna jest pod drugą. Zobacz hpotmeter by dowiedzieć się więcej.
Etykiety są nieco specyficzne: Znaki potrzebne do ich narysowania są pobierane z pliku graficznego, a znaki umieszczone w pliku graficznym są opisane przez plik opisu czcionek. Jest to plik, który za pomocą czystego tekstu określa współrzędne x, y oraz wielkość każdego znaku umieszczonego na obrazku (plik graficzny i jego plik opisu tworzą razem czcionkę). Zobacz dlabel oraz slabel, by dowiedzieć się więcej.
Wszystkie obrazki mogą być całkowicie przezroczyste - tak, jak to opisano w sekcji formaty plików graficznych. Jeżeli X Server nie obsługuje rozszerzenia XShape, to elementy oznaczone jako przezroczyste będą czarne. Jeśli chciałbyś wykorzystać taką możliwość, szerokość obrazka tła głównego okna musi być podzielna przez 8.
Okno ekranu to miejsce, gdzie odtwarzany jest film. Może ono wyświetlać określony obrazek, jeśli żaden film nie jest uruchomiony (to dość nudne mieć puste okno :-)) Uwaga: przezroczystość nie jest tutaj dostępna.
Menu skórki to po prostu jeden ze sposobów na kontrolowanie MPlayera poprzez wpisy w menu. Dwa obrazki są do tego potrzebne: pierwszy z nich jest obrazkiem podstawowym, który pokazuje zwykły stan menu, drugi zaś służy do wyświetlenia zaznaczonych obszarów. Gdy uaktywnisz menu, zostanie pokazany pierwszy obrazek. Jeśli przesuniesz mysz nad któryś z jego wpisów, wówczas zaznaczony element jest kopiowany z drugiego obrazka w miejsce, na które wskazuje kursor myszy (drugi obrazek nigdy nie jest wyświetlany w całości).
Wpis w menu jest określony przez jego pozycję oraz rozmiar na obrazku (zobacz sekcję menu skórki by dowiedzieć się więcej).
Jedna ważna sprawa, która nie została jeszcze powiedziana: MPlayer musi wiedzieć co zrobić w momencie kliknięcia na przyciski, potencjometry i wpisy w menu, aby zadziałały. Zostało to zrobione za pomocą sygnałów (zdarzeń). Dla tych elementów musisz zdefiniować sygnały, które mają być wysłane podczas kliknięcia na nie.
Potrzebujesz następujących plików do stworzenia skórki:
Plik konfiguracyjny o nazwie skin mówi MPlayerowi jak połączyć różne części skórki w jedną całość i co zrobić, gdy kliknie się gdzieś na obszarze okna.
Plik graficzny tła w oknie głównym.
Obrazki dla elementów w głównym oknie (zawierające jeden lub więcej plików opisu czcionek potrzebnych do rysowania etykiet).
Obrazek wyświetlany w oknie ekranu (opcjonalnie)
Dwa obrazki dla menu skórki (potrzebne są tylko wtedy, gdy chcesz stworzyć takie menu).
Za wyjątkiem pliku konfiguracyjnego skórki, możesz nazwać wszystkie pliki tak, jak tego chcesz (ale weź pod uwagę, że pliki opisu czcionek muszą mieć rozszerzenie .fnt ).
Jak zostało powiedziane wcześniej, plik ten jest plikiem konfigurującym skórkę.
Obsługuje różne rodzaje wierszy; komentarze zaczynają wiersz znakiem
';
' (tylko spacje i znaki tabulacji są dopuszczone przed
';
').
Plik podzielony jest na sekcje. Każda sekcja opisuje skórkę dla każdej aplikacji i ma następującą formę:
section = nazwa sekcji
.
.
.
end
Obecnie jest tylko jedna aplikacja, a więc potrzebujesz tylko jedną sekcję 'section' - jej nazwa to movieplayer.
Wewnątrz tej sekcji każde z okien jest opisane przez blok następującej postaci:
window = nazwa okna
.
.
.
end
gdzie nazwa okna
może być jednym z poniższych łańcuchów:
main - dla okna głównego
sub - dla okna ekranu
menu - dla menu skórki
playbar - dla panelu odtwarzania
(Bloki sub i menu są opcjonalne - nie musisz tworzyć menu czy elementów skórki dla okna ekranu)
Wewnątrz bloku 'window' możesz definiować każdy element okna, wpisując linijkę tej postaci:
item = parametr
Gdzie item
jest łańcuchem, kóry identyfikuje typ elementu
GUI, parametr
jest wartością numeryczną lub tekstową (lub
listą takich wartości oddzielonych od siebie znakiem przecinka).
Złożenie powyższych elementów razem tworzy plik, który wygląda mniej więcej tak:
section = movieplayer window = main ; ... elementy okna głównego ... end window = sub ; ... elementy okna ekranu ... end window = menu ; ... elementy menu skórki ... end window = playbar ; ... elementy panelu odtwarzania ... end end
Nazwa pliku graficznego musi zostać podana bez żadnych nazw katalogów - obrazki
są szukane w katalogu skins.
Możesz (ale nie musisz) określić rozszerzenia tego pliku. Jeśli plik taki nie
istnieje, MPlayer
spróbuje wczytać plik <nazwa pliku>.<rozszerzenie>,
gdzie png
oraz PNG
są brane jako
<rozszerzenie> (w tej właśnie kolejności). Pierwszy
pasujący plik będzie użyty.
Na koniec kilka słów na temat pozycjonowania. Okno główne oraz okno ekranu możesz
umieścić w różnych narożnikach ekranu poprzez ustawienie współrzędnych
X
i Y
. 0
to góra lub
lewa strona, -1
to środek, -2
to strona
prawa, lub dół, tak jak przedstawiono na poniższej ilustracji:
(0, 0)----(-1, 0)----(-2, 0) | | | | | | (0,-1)----(-1,-1)----(-2,-1) | | | | | | (0,-2)----(-1,-2)----(-2,-2)
Oto przykład wyjaśniający to lepiej. Przypuśćmy, że masz obrazek nazwany main.png, który został użyty dla okna głównego:
base = main, -1, -1
MPlayer spróbuje wczytać pliki main, main.png, main.PNG.
Poniżej znajduje się lista wpisów, które mogą być użyte w blokach
'window = main
'...'end
'
oraz 'window = playbar
' ... 'end
'.
decoration = enable|disable (włączona|wyłączona)
Włącza lub wyłącza dekorację menedżera okna w oknie głównym. Domyślnie jest wyłączona.
Nie działa to w oknie ekranu, gdyż nie ma takiej potrzeby.
base = obrazek, X, Y
Możesz określić obrazek tła, który będzie używany w oknie głównym.
Okno będzie widoczne na ekranie na współrzędnych X, Y
. Okno
będzie wielkości tego obrazka.
Współrzędne te nie działają na razie dla okna ekranu.
Obszary przezroczystości obrazka (kolor #FF00FF) będą widoczne jako czarne pod X serwerami niemającymi rozszerzenia XShape. Szerokość obrazka musi być podzielna przez 8.
button = obrazek, X, Y, szerokość, wysokość, sygnał
Umieści przycisk o rozmiarze szerokość
*
wysokość
na pozycji X
,
Y
. Określony sygnał
jest generowany
podczas kliknięcia na przycisk. Obrazek ten opisany przez
obrazek
musi składać się z trzech części jedna pod drugą
(stosownie do możliwych stanów przycisku), w ten oto sposób:
+---------------+ | wciśnięty | +---------------+ | zwolniony | +---------------+ | nieaktywny | +---------------+
hpotmeter = przycisk, szer_przycisku, wys_przycisku, faza, liczba_faz, domyślny, X, Y, szerokość, wysokość, sygnał
vpotmeter = przycisk, szer_przycisku, wys_przycisku, fazy, liczba_faz, domyślny, X, Y, szerokość, wysokość, sygnał
Umieszcza poziomo (hpotmeter) lub pionowo (vpotmeter) suwak o rozmiarze
szerokość
* wysokość
i pozycji
X,Y
. Obrazek może być podzielony na różne części dla różnych
faz suwaka (np. możesz mieć suwak głośności, który w zależności od położenia
zmienia kolor z zielonego (minimum) na czerwony (maksimum)).
hpotmeter
może być przyciskiem umieszczonym poziomo.
Jego parametry to:
przycisk
- obrazek użyty do przycisku
(musi posiadać trzy części jedna pod drugą tak, jak w przypadku
przycisku)
szer_przycisku
,wys_przycisku
- wielkość przycisku
fazy
- obrazek używany do określenie faz
dla hpotmeter. Wartość specjalna NULL
może być użyta,
jeśli nie chcesz żadnego obrazka. Obrazek musi być podzielony w pionie
na fragmenty poszczególnych faz
tak, jak poniżej:
+------------+ | faza #1 | +------------+ | faza #2 | +------------+ ... +------------+ | faza #n | +------------+
liczba_faz
- liczba faz znajdująca się na obrazku z fazami
domyślny
- domyślne ustawienie dla hpotmeter
(zakres od 0
do 100
)
X
,Y
- pozycja dla hpotmeter
szerokość
,wysokość
- szerokość i wysokość dla
hpotmeter
sygnał
- sygnał generowany podczas zmiany wartości hpotmeter
font = plik_czcionek, id_czcionki
Definiuje czcionkę. plik_czcionek
jest nazwą pliku opisu
czcionki z rozszerzeniem .fnt (nie podawaj rozszerzenia w
tym miejscu). id_czcionki
jest używany do wskazywania
konkretnej czcionki (zobacz dlabel
oraz slabel). Można zdefiniować do 25
czcionek.
slabel = X, Y, id_czcionki, "tekst"
Umieszcza statyczną etykietę w pozycji X,Y
.
tekst
jest wyświetlany za pomocą czcionki wskazywanych przez
id_czcionki
. Tekst jest po prostu zwykłym łańcuchem znaków
(zmienne $x
nie działają), któru musi być umieszczony
pomiędzy podwójnym cudzysłowem (znak " nie może być częścią tekstu).
Etykieta wyświetlana jest za pomocą czcionki, na którą wskazuje
id_czcionki
.
dlabel = X, Y, długość, wyrównanie, id_czcionki, "tekst"
Umieszcza dynamiczną etykietę w pozycji X,Y
. Etykieta jest
nazywana dynamiczną, ponieważ jej tekst jest cyklicznie odświeżany. Maksymalną
długość etykiety określa parametr długość
(jej wysokość
określa wysokość czcionki). Jeśli tekst jest szerszy niż zdefiniowana długość,
będzie on przewijany, w przeciwnym wypadku będzie wyrównany w miejscu określonym
przez wartość parametru wyrównanie
: 0
oznacza do prawej, 1
to wyśrodkowanie, 2
to wyrównanie do lewej.
Wyświetlany tekst jest określony przez zmienną tekst
: musi
być zawarty pomiędzy podwójnymi cudzysłowami (znak " nie może być częścią
tekstu). Etykieta wyświetlana jest za pomocą czcionki, na którą wskazuje
parametr id_czcionki
. Możesz użyć następujących zmiennych w
tekście:
Zmienna | Znaczenie |
---|---|
$1 | czas odtwarzania w formacie hh:mm:ss |
$2 | czas odtwarzania w formacie mmmm:ss |
$3 | czas odtwarzania w formacie (godziny) hh |
$4 | czas odtwarzania w formacie (minuty) mm |
$5 | czas odtwarzania w formacie (sekundy) ss |
$6 | długość filmu w formacie hh:mm:ss |
$7 | długość filmu w formacie mmmm:ss |
$8 | długość filmu w formacieh:mm:ss |
$v | format głośności w %xxx.xx |
$V | format głośności xxx.x format |
$U | format głośności xxx format |
$b | format balansu w %xxx.xx |
$B | format balansu xxx.x |
$D | format balansu xxx |
$$ | znak $ |
$a | oznaczenie zgodne z rodzajem typu pliku audio (nic: n ,
mono: m , stereo: t ) |
$t | numer ścieżki (na liście odtwarzania) |
$o | nazwa pliku |
$f | nazwa pliku pisana małymi literami |
$F | nazwa pliku pisana wielkimi literami |
$T | oznaczenie zgodne z rodzajem strumienia (plik: f ,
Video CD: v , DVD: d , URL: u ) |
$p | znak p (gdy film jest odtwarzany i czcionka ma znak p) |
$s | znak s (gdy film jest zatrzymany i czcionka ma znak s) |
$e | znak e (gdy film jest wstrzymany (pauza) i czcionka ma znak e) |
$x | rozdzielczość filmu (szerokość) |
$y | rozdzielczość filmu (wysokość) |
$C | nazwa używanego kodeka |
Zmienne $a, $T, $p, $s
oraz $e
zwracają znaki, które powinny być wyświetlane jako znaki specjalne (na przykład
e jest symbolem pauzy, która z reguły wygląda mniej więcej tak
||). Powinieneś mieć czcionkę dla zwykłych znaków oraz osobną czcionkę dla symboli.
Zobacz sekcję na temat symboli,
by dowiedzieć się więcej.
Poniższe wpisy mogą być użyte w bloku
'window = sub
' . . . 'end
' .
base = obrazek, X, Y, szerokość, wysokość
Wyświetla obrazek w oknie. Okno będzie widoczne na ekranie w miejscu oznaczonym
przez współrzędne X
, Y
(0,0
to lewy górny narożnik). Możesz użyć
-1
dla środka, -2
dla prawej strony
(X
) i dołu (Y
). Okno będzie mieć wielkość
obrazka. szerokość
oraz wysokość
oznaczają
wielkość okna; są one opcjonalne (jeśli nie są określone, okno będzie wielkości
takiej, jak obrazek).
background = R, G, B
Pozwala ustawić kolor tła. Jest to użyteczne jeśli obrazek jest mniejszy niż
okno. R
, G
oraz B
określają składniki kolorów czerwonego, zielonego i niebieskiego (każdy z nich
jest reprezentowany przez liczbę dziesiętną w zakresie od 0 do
255).
Jak wspomniano wcześniej, menu jest wyświetlane przy użyciu dwóch obrazków.
Zwykłe obszary menu są pobierane z obrazka określonego przez element
base
, podczas gdy obszary zaznaczone są pobierane z obrazka
wskazywanego przez element selected
. Musisz zdefiniować
pozycję i rozmiar każdego obszaru menu poprzez element menu.
Poniższe wpisy mogą być użyte w bloku:
'window = menu
'. . .'end
' .
base = obrazek
Obrazek dla zwykłych obszarów menu.
selected = obrazek
Obrazek pokazujący w menu wszystkie zaznaczone obszary.
menu = X, Y, szerokość, wysokość, sygnał
Definiuje pozycję i rozmiar obszarów menu na obrazku przy pomocy
X,Y
. sygnał
to zdarzenie wygenerowane
podczas zwolnienia przycisku myszy nad obszarem.
Jak wspomniano w sekcji na temat fragmentów skórki, czcionka jest definiowana przez obrazek i plik opisujący. Możesz umieścić znaki gdziekolwiek na obrazku, ale miej pewność, żeich pozycja i rozmiar jest dokładnie podana w pliku opisującym.
Plik opisujący czcionkę (o rozszerzeniu .fnt) może posiadać
linie komentarzy zaczynające się znakiem ';
'. Plik musi
zawierać linie w postaci:
image = obrazek
Gdzie
jest nazwą pliku
graficznego, który zawiera czcionkę (nie musisz dopisywać jego rozszerzenia).
obrazek
"char" = X, Y, szerokość, wysokość
X
oraz Y
określają pozycję znaku
char
na obrazku (0,0
to górny lewy narożnik).
szerokość
i wysokość
to rozmiar znaku
w pikselach.
Przykład: definiujemy znaki A, B, C przy użyciu pliku font.png.
; Może być "font" zamiast "font.png". image = font.png ; Trzy znaki wystarczą do tej demonstracji :-) "A" = 0,0, 7,13 "B" = 7,0, 7,13 "C" = 14,0, 7,13
Niektóre znaki mają specjalne znaczenie, gdy są zwracane przez pewne zmienne
używane w dlabel. Znaki te mogą być
wyświetlane jako symbole w ten sposób, że np. podczas odtwarzania strumienia DVD
widoczne jest ładne logo zamiast znaku 'd
'.
Poniższa tablica zawiera znaki używane do wyświetlania symboli (wymagają one oddzielnych czcionek).
Znak | Symbol |
---|---|
p | odtwarzanie |
s | stop |
e | pauza |
n | bez dźwięku |
m | dźwięk mono |
t | dźwięk stereo |
f | strumień z pliku |
v | strumień z Video CD |
d | strumień z DVD |
u | strumień z URL |
Tutaj znajdują się sygnały, które mogą być generowane przez przyciski, suwaki i elementy menu.
Sygnał pusty - nic nie robi (może za wyjątkiem wersji z Subversion:-)).
Kontrola odtwarzania :
Rozpocznij odtwarzanie.
Zatrzymaj odtwarzanie.
Przejdź do poprzedniej pozycji na liście odtwarzania.
Przejdź do następnej pozycji na liście odtwarzania.
Wczytaj plik (poprzez otwarcie okna przeglądarki plików, gdzie możesz wybrać plik).
Tto samo co evLoad
, ale zacznij automatycznie odtwarzać
zaraz po wyborze pliku.
Wczytaj plik dźwiękowy (z przeglądarki plików).
Wczytaj plik z napisami (z przeglądarki plików).
Wyłącz aktualnie używane napisy.
Otwórz/zamknij okno listy odtwarzania.
Spróbuj odczytać płytę ze wskazanego czytnika CD.
Spróbuj odczytać płytę ze wskazanego czytnika DVD.
Wyświetl okienko dialogowe URL.
Przeciwieństwo evPauseSwitchToPlay
. Ten sygnał zaczyna
odtwarzanie oraz wyświetla obrazek dla przycisku
evPauseSwitchToPlay
(aby zaznaczyć, że przycisk ten może być
użyty ponownie do wstrzymania odtwarzania).
Tworzy przełącznik razem z evPlaySwitchToPause
.
Mogą być użyte do utworzenia wspólnego przycisku odtwarzania/pauzy.
Oba sygnały powinny być powiązane z przyciskami wyświetlonymi na tej samej
pozycji w oknie. Sygnał ten wstrzymuje odtwarzanie i wyświetla obrazek dla
przycisku evPlaySwitchToPause
(aby zaznaczyć,
że przycisk ten może być użyty do kontynuowania odtwarzania).
Przewijanie:
Przewiń do tyłu o 10 sekund.
Przewiń do tyłu o 1 minutę.
Przewiń do tyłu o 10 minut.
Przewiń do przodu o 10 sekund.
Przewiń do przodu o 1 minutę.
Przewiń do przodu o 10 minut..
Przewiń do pozycji (może być wykorzystane przez suwak; użyte są względne wartości (0-100%) suwaka).
Kontrola video:
Ustawia okno filmu na połowę rozmiaru.
Ustaw podwójny rozmiar okna z filmem.
Włącz/wyłącz tryb pełnoekranowy.
Ustaw typowy rozmiar okna z filmem.
Kontrola dźwięku:
Zmniejsz głośność
Zwiększ głośność.
Ustaw głośność (może być używane przez suwak; używana jest wartość względna (0-100%)).
Wycisz/przywróć dźwięk.
Ustawi balans (może być używane przez suwak; używana jest wartość względna (0-100%)).
Włącz/wyłącz korektor.
Różne:
Otwórz okno "o programie".
Otwórz okno z ustawieniami.
Otwórz okno przeglądarki skórek.
Minimalizuj okno.
Wyłącz program.
Wygląda na to, że przeczytałeś o tworzeniu skórek dla GUI MPlayera, dałeś z siebie wszystko używając Gimpa i chciałbyś umieścić u nas swoją skórkę? Zapoznaj się z kilkoma wytycznymi, żeby uniknąć najczęstszych pomyłek i stworzyć skórkę wysokiej jakości.
Chcemy aby skórki, które dodajemy do naszego repozytorium, spełniały określone standardy jakości. Istnieje również kilka rzeczy, które możesz zrobić, żeby ułatwić sobie życie.
Jako wzorzec możesz wziąć skórkę Blue
,
od wersji 1.5 spełnia one wszystkie wymienione niżej kryteria.
Do każdej skórki powinien być dołączony plik README zawierający informacje o tobie, czyli autorze, prawach autorskich i licencji i wszystkie inne informacje, które zechcesz dodać. Jeżeli chcesz prowadzić listę zmian, ten plik jest na to dobrym miejscem.
Należy dodać plik VERSION zawierający tylko i wyłącznie wersję skórki zapisaną w jednej linii (np. 1.0)
Poziome i pionowe kontrolki (suwaki do zmiany głośności albo pozycji) powinny mieć gałki prawidłowo wycentrowane na środku suwaka. Powinno się dać przesunąć gałkę na oba końce suwaka, ale nie poza jego obszar.
Elementy skórki powinny mieć prawidłowo zadeklarowane rozmiary w pliku skórki. W przeciwnym wypadku możliwe będzie kliknięcie poza obszarem np. przycisku i jego naciśnięcia lub kliknięcie wewnątrz obszaru przycisku i nie naciśnięcie go.
Plik skin powinien być ładnie sformatowany i nie powinien zawierać tabulacji. Ładnie sformatowany, czyli taki w którym numery są ładnie ustawione w kolumnach.