# MPlayer - Odtwarzacz filmów

## http://www.mplayerhq.hu

Copyright © 2000-2025 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.

# Jak czytać tę dokumentację

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.

# Rozdział 1. Wprowadzenie

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

  ### Ważne

  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.

# Rozdział 2. Instalacja

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.

## 2.1. Wymagane oprogramowanie

- 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.

## 2.2. Możliwości

- 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.

## 2.3. A co z GUI?

GUI wymaga biblioteki GTK+ 2 (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`.

## 2.4. Czcionki i OSD

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.

### 2.4.1. Czcionki TrueType

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.

### 2.4.2. Czcionki bitmapowe

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.

### 2.4.3. Menu OSD

MPlayer ma całkowicie definiowalny Interfejs Menu OSD.

### Uwaga

Menu Ustawienia nie jest jeszcze ZAIMPLEMENTOWANE!

Instalacja

1. skompiluj MPlayera z opcją `--enable-menu` dla skryptu `./configure`

2. upewnij się, że masz zainstalowaną czcionkę OSD

3. skopiuj plik `etc/menu.conf` do Twojego katalogu `.mplayer`

4. skopiuj plik `etc/input.conf` do Twojego katalogu `.mplayer` lub do ogólnosystemowego katalogu z konfiguracją MPlayera (domyślnie: `/usr/local/etc/mplayer`)

5. sprawdź i ewentualnie przerób plik `input.conf`, aby określić funkcje klawiszy (wszystko jest tam opisane).

6. uruchom MPlayera przykładową komendą:

       mplayer -menu plik.avi

7. wciśnij dowolny klawisz, który wcześniej zdefiniowałeś

## 2.5. Codec installation

### 2.5.1. Xvid

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):

1.     cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid login

2.     cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid co xvidcore

3.     cd xvidcore/build/generic

4.     ./bootstrap.sh

5.     ./configure

   Możesz potrzebować dodać jakieś opcje (przejrzyj wyjście polecenia ./configure --help)

6.     make && make install

7. Przekompiluj MPlayera.

### 2.5.2. `x264`

`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.

### 2.5.3. Kodeki AMR

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.

## 2.6. RTC

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.

# Rozdział 3. Sposób użycia

## 3.1. Wiersz poleceń

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 5 film1.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

## 3.2. Napisy i OSD

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

- JACOsub

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:

`-subdelay `sek``

  Opóźnia wyświetlanie napisów o ``sek`` sekund. Może być liczbą ujemną. Wartość jest dodawana do licznika czasu filmu.

`-subfps `ILOŚĆ``

  Określa ilość klatek na sekundę pliku z napisami (liczba rzeczywista).

`-subpos `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 -fps fps_napisów -subfps fps_filmu \
        -sub zbiór_z_napisami atrapa.avi

O napisach DVD przeczytasz w rozdziale DVD.

## 3.3. Sterowanie

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.

### 3.3.1. Konfiguracja sterowania

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

### 3.3.2. Sterowanie poprzez LIRC

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.

### 3.3.3. Tryb sługi

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

## 3.4. Strumieniowanie z sieci i potoków

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 -

### Uwaga

Zalecane jest również włączenie `-cache` przy odtwarzaniu z sieci:

    wget ftp://micorsops.com/cokolwiek.avi -O - | mplayer -cache 8192 -

### 3.4.1. Zapisywanie strumieniowanej zawartości

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:

    mplayer http://217.71.208.37:8006 -dumpstream -dumpfile strumien.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.

## 3.5. Strumienie zdalne

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.

### 3.5.1. Kompilacja serwera

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).

### 3.5.2. Używanie strumieni zdalnych

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.

## 3.6. Napędy CD/DVD

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.

### 3.6.1. Linux

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.

### 3.6.2. FreeBSD

Prędkość:

    cdcontrol [-f urządzenie] speed [prędkość]

DMA:

    sysctl hw.ata.atapi_dma=1

## 3.7. Odtwarzanie DVD

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.

### Uwaga

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.

## 3.8. Odtwarzanie VCD

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`

### Uwaga

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.

## 3.9. Decyzyjne Listy Edycji (Edit Decision Lists - EDL)

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).

### 3.9.1. Używanie pliku EDL

Użyj podczas uruchamiania MPlayera flagi `-edl <nazwa pliku>` z nazwą pliku EDL, który ma być zastosowany do filmu.

### 3.9.2. Tworzenie pliku EDL

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.

## 3.10. Zaawansowane audio

### 3.10.1. Dźwięk przestrzenny/wielokanałowy

#### 3.10.1.1. DVDs

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.

#### 3.10.1.2. Odtwarzanie plików stereo przy użyciu czterech głośników

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.

#### 3.10.1.3. Przekazywanie AC3/DTS

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ł.

#### 3.10.1.4. Przekazywanie dźwięku MPEG

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

#### 3.10.1.5. Dźwięk zakodowany macierzowo

***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:

- http://electronics.howstuffworks.com/surround-sound5.htm

- http://www.extremetech.com/article2/0,1697,1016875,00.asp

#### 3.10.1.6. Emulacja przestrzeni w słuchawkach

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

#### 3.10.1.7. Rozwiązywanie problemów

Jeżeli nie słyszysz żadnych dźwięków, sprawdź ustawienia miksera przy pomocy stosownego programu, takiego jak alsamixer; niejednokrotnie wyjścia audio są domyślnie wyciszone lub ich głośność jest ustawiona na zero.

### 3.10.2. Manipulowanie kanałami

#### 3.10.2.1. Ogólne informacje

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

1. środkowy

stereo

1. lewy

2. prawy

kwadrofonia

1. lewy przedni

2. prawy przedni

3. lewy tylny

4. prawy tylny

surround 4.0

1. lewy przedni

2. prawy przedni

3. środkowy tylny

4. środkowy przedni

surround 5.0

1. lewy przedni

2. prawy przedni

3. lewy tylny

4. prawy tylny

5. środkowy przedni

surround 5.1

1. lewy przedni

2. prawy przedni

3. lewy tylny

4. prawy tylny

5. środkowy przedni

6. 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.

#### 3.10.2.2. Odtwarzanie dźwięku mono przy użyciu dwóch głośników

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

#### 3.10.2.3. Kopiowanie i przesuwanie kanałów

Filtr `channels` potrafi przesunąć dowolny jeden lub wszystkie kanały. Ustawienie wszystkich podopcji filtru `channels` może być skomplikowane i wymaga nieco uwagi.

1. Zdecyduj ile wyjściowych kanałów audio potrzebujesz. Oto pierwsza podopcja.

2. 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

3. 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`.

##### Przykład: jeden kanał w dwóch głośnikach

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:

1. Aby dostarczyć dźwięk do każdego z dwóch głośników, pierwsza opcja musi mieć wartość "2".

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".

3. 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ć.

##### Przykład: lewy kanał w obu głośnikach (skrót)

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.

##### Przykład: kopiowanie kanałów przednich do kanałów tylnych

Kolejną typową operacją jest kopiowanie kanałów przednich i odtwarzanie ich z tylnych głośników zestawu kwadrofonicznego.

1. Potrzebujemy czterech kanałów wyjściowych, więc pierwsza podopcja to "4".

2. 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".

3. 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

#### 3.10.2.4. Miksowanie kanałów

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.

1. 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.

2. 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.

3. 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.

##### Przykład: jeden kanał w dwóch głośnikach

Oto jeszcze jeden przykład, jak odtworzyć lewy kanał w dwóch głośnikach. Postępując zgodnie z krokami opisanymi powyżej:

1. `pan` powinien używać dwóch kanałów wyjściowych, więc pierwsza podopcja to "2".

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".

##### Przykład: lewy kanał w dwóch głośnikach (skrót)

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.

##### Przykład: zmniejszanie liczy kanałów w 6-kanałowym PCM

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`:

1. Liczba kanałów wyjściowych to 2, więc pierwsza podopcja to "2".

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.

##### Przykład: Odtwarzanie audio 5.1 przy pomocy dużych głośników, bez subwoofera

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`:

1. Jako, że `pan` musi analizować wszystkie 6 kanałów, podaj opcję `-channels 6`, aby liba52 zdekodował je wszystkie.

2. Ponieważ `pan` będzie używał pięciu kanałów wyjściowych, pierwsza podopcja to "5".

3. 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

### 3.10.3. Programowa regulacja głośności

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.

## 3.11. Wejście TV

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.

### 3.11.1. Kompilacja

1. 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`).

2. Upewnij się, że Twój tuner działa z innymi programami do obsługi TV pod Linuksem, na przykład XawTV.

### 3.11.2. Wskazówki użytkowania

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.

### 3.11.3. Przykłady

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.

## 3.12. Radio

### 3.12.1. Słuchanie radia

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.

#### 3.12.1.1. Kompilacja

1. Najpierw, musisz przekompilować MPlayera używając `./configure` z opcją `--enable-radio` i (jeśli chcesz móc przechwytywać radio) `--enable-radio-capture`.

2. Upewnij się że Twój tuner działa z innym oprogramowaniem do radia w Linuksie, na przykład z XawTV.

#### 3.12.1.2. Rady przy stosowaniu

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).

#### 3.12.1.3. Przykłady

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

### Uwaga

Jeśli używasz nazw urządzeń ALSA dwukropki muszą być zastąpione znakami równości a przecinki kropkami.

# Rozdział 4. Urządzenia wyjścia video

## 4.1. Ustawianie MTRR

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:

1. z komunikatów startowych X11, na przykład:

       (--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000
       (--) SVGA: Linear framebuffer at 0xD8000000

2. 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)

3. 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ć).

## 4.2. Wyjścia video dla tradycyjnych kart graficznych

### 4.2.1. Xv

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:

1. Masz XFree86 4.0.2 lub nowsze (starsze nie mają XVideo)

2. Twoja karta obsługuje przyśpieszanie sprzętowe (współczesne karty to robią)

3. X ładuje rozszerzenie XVideo, zwykle wygląda to tak:

       (II) Loading extension XVideo

   w `/var/log/XFree86.0.log`

   ### Uwaga

   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.

4. 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.

5. 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

#### 4.2.1.1. Karty 3dfx

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

#### 4.2.1.2. Karty S3

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).

### Uwaga

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.

#### 4.2.1.3. Karty nVidia

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.

#### 4.2.1.4. Karty ATI

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.

#### 4.2.1.5. Karty NeoMagic

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

#### 4.2.1.6. Karty Trident

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.

#### 4.2.1.7. Karty Kyro/PowerVR

Jeżeli chcesz używać Xv z kartą opartą na Kyro (na przykład Hercules Prophet 4000XT), powinieneś ściągnąć sterowniki ze strony PowerVR.

### 4.2.2. DGA

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.

### Zagrożenie bezpieczeństwa

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).

### 4.2.3. SDL

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).

### 4.2.4. SVGAlib

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.

### Uwaga

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

### Uwaga

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.

### 4.2.5. Wyjście bufora ramki (FBdev)

`./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:

`-fb`

  Określa urządzanie bufora ramki, którego użyć (domyślnie: `/dev/fb0`)

`-fbmode`

  Nazwa trybu do użycia (zgodnie z `/etc/fb.modes`)

`-fbmodeconfig`

  Plik konfiguracyjny trybów (domyślnie: `/etc/fb.modes`)

`-monitor-hfreq`, `-monitor-vfreq`, `-monitor-dotclock`

  ważne wartości, patrz `example.conf`

Jeżeli chcesz się przełączyć na określony tryb, użyj

    mplayer -vm -fbmode nazwa_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

### Uwaga

Zmiana trybów FBdev nie działa z buforem ramki VESA, i nie proś o to, ponieważ nie jest to ograniczenie MPlayera.

### 4.2.6. Bufor ramki Matrox (mga_vid)

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.

### Ostrzeżenie

Tylko dla Linuksa! Na systemach nie-Linuksowych (testowane na FreeBSD) używaj zamiast tego VIDIX!

Instalacja

1. Przed użyciem musisz skompilować `mga_vid.o`:

       cd drivers
       make

2. 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

3. 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

4. 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

5. 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

### 4.2.7. Obsługa 3dfx YUV

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

### 4.2.8. Wyjście OpenGL

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

### 4.2.9. AAlib - wyświetlanie w trybie tekstowym

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ń:

`-aaosdcolor=`V``

  zmiana koloru OSD

`-aasubcolor=`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:

`-aadriver`

  Ustawia sugerowany sterownik aa (X11, curses, Linux)

`-aaextended`

  Używa wszystkich 256 znaków.

`-aaeight`

  Używa 8-bitowego ASCII

`-aahelp`

  Wyświetla wszystkie opcje aalib

### Uwaga

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.

### 4.2.10. `libcaca` - Color ASCII Art library (biblioteka kolorowego ASCII-Art)

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:

`CACA_DRIVER`

  Ustawia zalecany sterownik caca, np. ncurses, slang, x11.

`CACA_GEOMETRY (tylko X11)`

  Określa liczbę wierszy i kolumn, np. 128x50.

`CACA_FONT (tylko X11)`

  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`.

### 4.2.11. VESA - wyjście na VESA BIOS

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.

### Ważne

Nie używaj tego sterownika wraz z GCC 2.96! Nie będzie działać!

OPCJE WIERSZA POLECEŃ DLA VESA

`-vo 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

### 4.2.12. X11

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.

### 4.2.13. VIDIX

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:

1. Ś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)

2. 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).

3. Aby utworzyć odpowiednie urządzenia (devices) w katalogu `/dev`, wykonaj jako root

       make device

   w katalogu `svgalib_helper`.

4. Przenieś katalog `svgalib_helper` do `mplayer/main/libdha/svgalib_helper`.

5. 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`.

6. Przekompiluj i zainstaluj libdha

#### 4.2.13.1. Karty ATI

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.

#### 4.2.13.2. Karty Matrox

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

#### 4.2.13.3. Karty Trident

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.

#### 4.2.13.4. Karty 3DLabs

Chociaż istnieje sterownik dla układów 3DLabs GLINT R3 oraz Permedia3, to nikt go nie testował (sprawozdania są mile widziane).

#### 4.2.13.5. Karty nVidia

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

#### 4.2.13.6. Karty SiS

Jest to kod wysoce eksperymentalny, tak jak nvidia_vid.

Przetestowano go na SiS 650/651/740 (najczęściej używane układy w minimalistycznych pecetach "Shuttle XPC" z płytami SiS).

Czekamy na raporty!

### 4.2.14. DirectFB

> "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)

### 4.2.15. DirectFB/Matrox (dfbmga)

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.

### Uwaga

Pierwszą wersją DirectFB, jaką udało nam się uruchomić była 0.9.17 (wadliwa, potrzebuje łatki `surfacemanager` z powyższego URL). Port kodu CRTC2 do mga_vid jest od lat w planach. Mile widziane są łatki.

## 4.3. Dekodery MPEG

### 4.3.1. Wejście i wyjście DVB

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 mpegpes twójplik.roz
    mplayer -ao mpegpes -vo mpegpes -vf expand twó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).

### 4.3.2. DXR2

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

`-vo dxr2`

  Włącz wyjście TV.

`-vo dxr2:x11` lub `-vo dxr2:xv`

  Włącz wyjście nakładki w X11.

`-dxr2 <opcja1:opcja2:...>`

  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.

### 4.3.3. DXR3/Hollywood+

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

`-vo dxr3:prebuf:sync:norm=x:`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`.

`-ao oss:/dev/em8300_ma-`X``

  Ustawia wyjście audio, gdzie `X` jest numerem urządzenia (0 jeżeli pojedyncza karta).

`-af resample=`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`).

`-vf lavc`

  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.

`-vf expand=-1:-1:-1:-1:1`

  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).

`-ac hwac3`

  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.

## 4.4. Inny sprzęt do wizualizacji

### 4.4.1. Zr

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.

### 4.4.2. Blinkenlights

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.

## 4.5. Obsługa wyjścia TV

### 4.5.1. Karty Matrox G400

Pod Linuksem istnieją dwa sposoby uruchomienia wyjścia TV na karcie Matrox G400:

### Ważne

instrukcje dla Matrox G450/G550 znajdują się w następnej sekcji!

XFree86

  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).

Bufor ramki (framebuffer)

  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.

  1. Wejdź do `TVout` i wpisz ./compile.sh. Zainstaluj `TVout/matroxset/matroxset` w jakimś katalogu znajdującym się w zmiennej `PATH`.

  2. Jeżeli nie masz zainstalowanego fbset, umieść `TVout/fbset/fbset` gdzieś w swojej zmiennej `PATH`.

  3. Jeżeli nie masz zainstalowanego con2fb, umieść `TVout/con2fb/con2fb` gdzieś w swojej zmiennej `PATH`.

  4. 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!).

  5. 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.

  6. 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

  7. 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ść...

  8. 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)

### 4.5.2. Karty Matrox G450/G550

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/

### 4.5.3. karty ATI

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.

### 4.5.4. nVidia

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.

### 4.5.5. NeoMagic

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).

# Rozdział 5. Porty

## 5.1. Linux

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.

### 5.1.1. Pakiety Debiana

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.

### 5.1.2. Pakiety RPM

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.

### 5.1.3. ARM

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.

## 5.2. *BSD

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).

### 5.2.1. FreeBSD

Jeżeli Twój procesor ma rozszerzenie SSE, przekompiluj jądro z opcją "`CPU_ENABLE_SSE`" (wymagany FreeBSD-STABLE lub łaty na jądro).

### 5.2.2. OpenBSD

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.

### 5.2.3. Darwin

Zobacz rozdział Mac OS.

## 5.3. Komercyjny Unix

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.

### 5.3.1. Solaris

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).

### 5.3.2. HP-UX

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.)

### 5.3.3. AIX

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

### 5.3.4. QNX

Będziesz musiał ściągnąć bibliotekę SDL dla QNX i zainstalować ją. Wtedy uruchom MPlayera z opcją `-vo sdl:driver=photon` i `-ao sdl:nto`, powinno działać szybko.

Wyjście `-vo x11` będzie nawet wolniejsze niż na Linuksie, ponieważ QNX ma tylko emulację X'ów, która jest bardzo wolna.

## 5.4. Windows

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-device d:

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.

### Uwaga

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.

### 5.4.1. Cygwin

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.

### 5.4.2. MinGW

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.

## 5.5. Mac OS

"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

### 5.5.1. MPlayer OS X GUI

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.

# Rozdział 6. Podstawy używania MEncodera

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.

## 6.1. Wybieranie kodeka i formatu

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:

    mencoder wejście.avi -o wyjś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

## 6.2. Wybieranie źródłowego zbioru lub urządzenia

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.

## 6.3. Kodowanie dwuprzebiegowe MPEG-4 ("DivX")

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

## 6.4. Kodowanie do formatu video Sony PSP

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 -o wyjście.psp

Możesz też ustawić tytuł filmu dzięki `-info name=`TytułFilmu``.

## 6.5. Kodowanie do formatu MPEG

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:

    mencoder wejscie.avi -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video \
        -oac copy inne_opcje -o wyjście.mpg

Tworzenie pliku MPEG-1, który można odtworzyć na systemach z minimalną obsługą multimedialną, taką jak domyślne instalacje Windows:

    mencoder wejscie.avi -of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 \
        -o wyjś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`:

    mencoder wejście.avi -o VCD.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

### Wskazówka:

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.

## 6.6. Przeskalowywanie filmów

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:

    mencoder wejscie.mpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \
        -vf scale=640:480 -o wyjście.avi

## 6.7. Kopiowanie strumieni

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:

    mencoder wejście.nsv -oac copy -fafmttag 0x706D \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o wyjście.avi

## 6.8. Kodowanie z wielu wejściowych plików obrazkowych (JPEG, PNG, TGA itp.)

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:

1. MEncoder dekoduje wejściowy obrazek/obrazki z pomocą biblioteki `libjpeg` (w przypadku dekodowania PNG, skorzysta z `libpng`).

2. 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 -o wyjś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 -o wyjś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 -o wyjś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

### Informacja:

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

## 6.9. Wydobywanie napisów z DVD do pliku VOBsub

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

    rm napisy.idx napisy.sub
    mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
        -vobsubout napisy -vobsuboutindex 0 -sid 2
    mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -vobsubout napisy -vobsuboutindex 1 -sid 5

Przykład 6.6. Kopiowanie francuskich napisów z pliku MPEG

    rm napisy.idx napisy.sub
    mencoder film.mpg -ifo film.ifo -vobsubout napisy -vobsuboutindex 0 \
        -vobsuboutid fr -sid 1 -nosound -ovc copy

## 6.10. Utrzymywanie proporcji obrazu (aspect ratio)

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:

    mencoder przykładowy-svcd.mpg -vf crop=714:548:0:14 -oac copy -ovc lavc \
        -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -o wyjście.avi

# Rozdział 7. Kodowanie przy użyciu MEncodera

## 7.1. Rippowanie DVD do wysokiej jakości pliku MPEG-4 ("DivX")

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.

### 7.1.1. Przygotowanie do kodowania: Identyfikowanie materiału źródłowego i framerate

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.

#### 7.1.1.1. Ustalanie źródłowego framerate

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.

#### 7.1.1.2. Identyfikowanie materiału źródłowego

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ę.

### Podpowiedź:

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.

### 7.1.2. Stały kwantyzator a tryb wieloprzebiegowy

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.

### Uwaga:

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`

### 7.1.3. Ograniczenia efektywnego kodowania

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.

1. 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:

2. 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.

3. 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.

4. 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.

### 7.1.4. Kadrowanie i skalowanie

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ć.

### 7.1.5. Dobieranie rozdzielczości i bitrate

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:

1. 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).

2. 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.

#### 7.1.5.1. Obliczanie 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ć.

### 7.1.6. Filtrowanie

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.

### 7.1.7. Przeplot i telecine

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`.

### 7.1.8. Encoding interlaced video

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:

1. Crop height and y-offset must be multiples of 4.

2. Any vertical scaling must be performed in interlaced mode.

3. 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.

### 7.1.9. Notes on Audio/Video synchronization

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.

### 7.1.10. Choosing the video codec

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.

### 7.1.11. Audio

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.

    mplayer source_file.vob -aid 129 -dumpaudio -dumpfile sound.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:

    mplayer source_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.

### 7.1.12. Muxing

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  -o output_movie.avi \
        -audiofile input_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 -o output_movie.asf -audiofile input_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).

#### 7.1.12.1. Improving muxing and A/V sync reliability

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.

#### 7.1.12.2. Limitations of the AVI container

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:

1. 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.

2. 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.

#### 7.1.12.3. Muxing into the Matroska container

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 -o output.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.

## 7.2. How to deal with telecine and interlacing within NTSC DVDs

### 7.2.1. Introduction

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]

### 7.2.2. How to tell what type of video you have

#### 7.2.2.1. Progressive

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.

#### 7.2.2.2. Telecined

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

1.     mplayer dvd://1

2. Seek to a part with motion.

3. Use the . key to step forward one frame at a time.

4. 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.

#### 7.2.2.3. Interlaced

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.

#### 7.2.2.4. Mixed progressive and telecine

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.

#### 7.2.2.5. Mixed progressive and 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.

### 7.2.3. How to encode each category

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.

#### 7.2.3.1. Progressive

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].

#### 7.2.3.2. Telecined

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.

#### 7.2.3.3. Interlaced

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).

1. 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

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

3. 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

4. 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

#### 7.2.3.4. Mixed progressive and telecine

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

#### 7.2.3.5. Mixed progressive and interlaced

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.

### 7.2.4. Footnotes

1. 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.

2. 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.

3. 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%.

## 7.3. Encoding with the `libavcodec` codec family

`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):

### 7.3.1. `libavcodec`'s video codecs

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

### 7.3.2. `libavcodec`'s audio codecs

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.

#### 7.3.2.1. PCM/ADPCM format supplementary table

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

### 7.3.3. Encoding options of libavcodec

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.

### 7.3.4. Encoding setting examples

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

### 7.3.5. Custom inter/intra matrices

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:

    mencoder input.avi -o output.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

### 7.3.6. Example

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

## 7.4. Encoding with the `Xvid` codec

`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.

### 7.4.1. What options should I use to get the best results?

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.

### 7.4.2. Encoding options of `Xvid`

- 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.

### 7.4.3. Encoding profiles

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 |  |  |  |  |  |

### 7.4.4. Encoding setting examples

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

## 7.5. Encoding with the `x264` codec

`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.

### 7.5.1. Encoding options of x264

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.

#### 7.5.1.1. Introduction

This guide considers two major categories of encoding options:

1. Options which mainly trade off encoding time vs. quality

2. 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.

#### 7.5.1.2. Options which primarily affect speed and quality

- 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.

  ### Note:

  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).

#### 7.5.1.3. Options pertaining to miscellaneous preferences

- 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.

### 7.5.2. Encoding setting examples

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

## 7.6. Encoding with the `Video For Windows` codec family

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.

### 7.6.1. Video for Windows supported codecs

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-device zeiram.iso dvd://7 -o trailer.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

### 7.6.2. Using vfw2menc to create a codec settings file.

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.

## 7.7. Using MEncoder to create QuickTime-compatible files

### 7.7.1. Why would one want to produce QuickTime-compatible Files?

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 …).

### 7.7.2. QuickTime 7 limitations

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.

### 7.7.3. Cropping

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.

### 7.7.4. Scaling

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

### 7.7.5. A/V sync

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

### 7.7.6. Bitrate

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.

### 7.7.7. Encoding example

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.

### 7.7.8. Remuxing as MP4

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 Main@5.1, 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps
    3       hint    Payload mpeg4-generic for track 1
    4       hint    Payload H264 for track 2

### 7.7.9. Adding metadata tags

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.

## 7.8. Using MEncoder to create VCD/SVCD/DVD-compliant files

### 7.8.1. Format Constraints

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.

#### 7.8.1.1. Format Constraints

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.

#### 7.8.1.2. GOP Size Constraints

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.

#### 7.8.1.3. Bitrate Constraints

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.

### 7.8.2. Output Options

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.

#### 7.8.2.1. Aspect Ratio

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

#### 7.8.2.2. Maintaining A/V sync

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.

#### 7.8.2.3. Sample Rate Conversion

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

### 7.8.3. Using libavcodec for VCD/SVCD/DVD Encoding

#### 7.8.3.1. Introduction

`libavcodec` can be used to create VCD/SVCD/DVD compliant video by using the appropriate options.

#### 7.8.3.2. lavcopts

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.

#### 7.8.3.3. Examples

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

#### 7.8.3.4. Advanced Options

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

### 7.8.4. Encoding Audio

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.

#### 7.8.4.1. toolame

For VCD and SVCD:

    -oac toolame -toolameopts br=224

#### 7.8.4.2. twolame

For VCD and SVCD:

    -oac twolame -twolameopts br=224

#### 7.8.4.3. libavcodec

For DVD with 2 channel sound:

    -oac lavc -lavcopts acodec=ac3:abitrate=192

For DVD with 5.1 channel sound:

    -channels 6 -oac lavc -lavcopts acodec=ac3:abitrate=384

For VCD and SVCD:

    -oac lavc -lavcopts acodec=mp2:abitrate=224

### 7.8.5. Putting it all Together

This section shows some complete commands for creating VCD/SVCD/DVD compliant videos.

#### 7.8.5.1. PAL DVD

    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 \
      -o movie.mpg movie.avi

#### 7.8.5.2. NTSC DVD

    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 \
      -o movie.mpg movie.avi

#### 7.8.5.3. PAL AVI Containing AC-3 Audio to DVD

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 -o movie.mpg movie.avi

#### 7.8.5.4. NTSC AVI Containing AC-3 Audio to DVD

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 \
      -o movie.mpg movie.avi

#### 7.8.5.5. PAL SVCD

    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 \
        -o movie.mpg movie.avi

#### 7.8.5.6. NTSC SVCD

    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 \
        -o movie.mpg movie.avi

#### 7.8.5.7. PAL VCD

    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 \
        -o movie.mpg movie.avi

#### 7.8.5.8. NTSC VCD

    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 \
        -o movie.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.

# Rozdział 8. FAQ - Często Zadawane Pytania

8.1. Rozwój
  Pyt.: Jak mam stworzyć poprawną łatkę do MPlayera?
  Pyt.: Jak mogę przetłumaczyć MPlayera na nowy język?
  Pyt.: Jak mogę wesprzeć rozwój MPlayera?
  Pyt.: Jak mogę zostać deweloperem MPlayera?
  Pyt.: Czemu nie używacie autoconf/automake?
8.2. Kompilacja i instalacja
  Pyt.: Kompilacja nie udaje się z powodu błędu i gcc wyskakuje z tajemniczą wiadomością zawierającą zwrot internal compiler error lub unable to find a register to spill.
  Pyt.: Czy istnieją binarne (RPM/Debian) paczki z MPlayerem?
  Pyt.: Jak mogę zbudować 32 bitowego MPlayera na 64 bitowym Athlonie?
  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')
  Pyt.: Mam Matroksa G200/G400/G450/G550, jak skompilować/używać sterownika mga_vid?
  Pyt.: Podczas 'make', MPlayer narzeka na brakujące biblioteki X11. Nie rozumiem, mam zainstalowane X11!?
  Pyt.: Kompilowanie pod Mac OS 10.3 prowadzi do kilku błędów konsolidacji (linkowania)
8.3. Pytania ogólne
  Pyt.: Czy są jakieś listy dyskusyjne o MPlayerze?
  Pyt.: Znalazłem paskudny błąd przy próbie odtworzenia mojego ulubionego filmu! Kogo powinienem poinformować?
  Pyt.: Mam problemy z odtwarzaniem plików przy użyciu kodeka ... Czy mogę ich używać?
  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
  Pyt.: Jak mogę zrobić zrzut ekranu?
  Pyt.: Co oznaczają te liczby w wierszu stanu?
  Pyt.: Dostaję komunikaty błędów o nie znalezionym pliku /usr/local/lib/codecs/ ...
  Pyt.: Jak zmusić MPlayera do zapamiętania opcji użytych dla określonego pliku, np film.avi?
  Pyt.: Napisy są bardzo ładne, najpiękniejsze jakie widziałem, ale spowalniają odtwarzanie! Wiem, że to jest niezwykłe...
  Pyt.: Nie mogę się dostać do menu GUI. Klikam prawym przyciskiem myszy lecz nie mogę dostać się do żadnych elementów menu!
  Pyt.: Jak uruchomić MPlayera w tle?
8.4. Problemy z odtwarzaniem
  Pyt.: Nie mogę zidentyfikować powodu dziwnego problemu z odtwarzaniem.
  Pyt.: W jaki sposób sprawić by napisy pojawiały się na czarnym pasku pod filmem?
  Pyt.: Jak mogę określić ścieżkę audio/napisów z pliku OGM, Matroska, NUT lub DVD?
  Pyt.: Próbuję odtworzyć jakiś strumień z internetu, ale nie udaje mi się.
  Pyt.: Ściągnąłem film z sieci P2P i nie chce się odtworzyć!
  Pyt.: Mam problem z wyświetlaniem napisów. Pomocy!
  Pyt.: Dlaczego MPlayer nie działa w Fedora Core?
  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).
  Pyt.: Gry próbuję przechwycić obraz z mojego tunera kolory są dziwne. Działa OK pod innymi aplikacjami.
  Pyt.: Otrzymuję bardzo dziwne wartości procentowe (dużo za duże) podczas odtwarzania plików na moim notebooku.
  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.
  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)
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.
  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?
  Pyt.: Mam problemy z [Twój manager okien] i pełnoekranowymi trybami xv/xmga/sdl/x11...
  Pyt.: Dźwięk gubi synchronizację przy odtwarzaniu pliku AVI.
  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).
  Pyt.: Jak użyć dmix z MPlayerem?
  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...
  Pyt.: Gdy uruchamiam MPlayera pod KDE, pojawia się czarny ekran i nic się nie dzieje. Po około minucie zaczyna się odtwarzanie filmu.
  Pyt.: Mam problemy z synchronizacją A/V. Niektóre moje AVI są odtwarzane dobrze, a niektóre z podwójną szybkością.
  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!)
  Pyt.: Jak pozbyć się braku synchronizacji audio/video przy przewijaniu strumieni RealMedia?
8.6. Odtwarzanie DVD
  Pyt.: Co z nawigacją/menu DVD?
  Pyt.: Nie mogę obejrzeć żadnego nowego DVD od Sony Pictures/BMG.
  Pyt.: Co z napisami? Czy MPlayer może je wyświetlać?
  Pyt.: Jak mogę ustawić kod regionu w moim napędzie DVD? Nie mam Windowsów!
  Pyt.: Nie mogę odtworzyć DVD, MPlayer się zawiesza bądź wyrzuca błędy "Encrypted VOB file!" (Zaszyfrowany plik VOB!).
  Pyt.: Czy muszę mieć uprawnienia (lub setuid) użytkownika root, aby móc odtwarzać DVD?
  Pyt.: Czy jest możliwe odtwarzanie/kodowanie tylko wybranych rozdziałów?
  Pyt.: Odtwarzanie DVD jest bardzo wolne!
  Pyt.: Skopiowałem DVD używając vobcopy. Jak mogę je odtworzyć/zakodować z dysku twardego?
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.
  Pyt.: Chciałbym przewijać o +/- 1 klatkę zamiast 10 sekund.
8.8. Kodowanie
  Pyt.: Jak mogę kodować?
  Pyt.: Jak zrzucić całą pozycję DVD do pliku?
  Pyt.: Jak mogę tworzyć automatycznie (S)VCD?
  Pyt.: Jak mogę stworzyć (S)VCD?
  Pyt.: Jak mogę połączyć dwa pliki video?
  Pyt.: Jak mogę naprawić pliki AVI z popsutym indeksem lub złym przeplotem?
  Pyt.: Jak mogę naprawić proporcje pliku AVI?
  Pyt.: Jak mogę zapisać i kodować plik VOB z popsutym początkiem?
  Pyt.: Nie mogę zakodować napisów z DVD do AVI!
  Pyt.: Jak mogę zakodować tylko wybrane rozdziały z DVD?
  Pyt.: Próbuję pracować z plikami 2GB+ na systemie plików VFAT. Czy to działa?
  Pyt.: Co oznaczają te liczby w wierszu stanu w czasie procesu kodowania?
  Pyt.: Dlaczego zalecany bitrate wypisywany przez MEncodera jest ujemny?
  Pyt.: Nie mogę zakodować pliku ASF do AVI/DivX, ponieważ ma on 1000 fps.
  Pyt.: Jak mogę wstawić napisy do pliku wynikowego?
  Pyt.: Jak zakodować wyłącznie dźwięk z teledysku?
  Pyt.: Dlaczego zewnętrzne odtwarzacze nieodtwarzają filmów MPEG-4 zakodowanych MEncoderem w wersji nowszej niż 1.0pre7?
  Pyt.: Jak mogę kodować plik zawierający tylko dźwięk?
  Pyt.: Jak mogę odtwarzać napisy wbudowane w AVI?
  Pyt.: MPlayer nie...

### 8.1. Rozwój

Pyt.: Jak mam stworzyć poprawną łatkę do MPlayera?
Pyt.: Jak mogę przetłumaczyć MPlayera na nowy język?
Pyt.: Jak mogę wesprzeć rozwój MPlayera?
Pyt.: Jak mogę zostać deweloperem MPlayera?
Pyt.: Czemu nie używacie autoconf/automake?

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 internal compiler error lub unable to find a register to spill.
Pyt.: Czy istnieją binarne (RPM/Debian) paczki z MPlayerem?
Pyt.: Jak mogę zbudować 32 bitowego MPlayera na 64 bitowym Athlonie?
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')
Pyt.: Mam Matroksa G200/G400/G450/G550, jak skompilować/używać sterownika mga_vid?
Pyt.: Podczas 'make', MPlayer narzeka na brakujące biblioteki X11. Nie rozumiem, mam zainstalowane X11!?
Pyt.: Kompilowanie pod Mac OS 10.3 prowadzi do kilku błędów konsolidacji (linkowania)

Pyt.: | Kompilacja nie udaje się z powodu błędu i gcc wyskakuje z tajemniczą wiadomością zawierającą zwrot `internal compiler error` lub `unable to find a register to spill`.
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 `mga_vid`?
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 `-F/ścieżka/do/rozpakowanego/archiwum` do zmiennej `OPTFLAGS`. Jeżeli używasz X-Code, możesz po prostu zaznaczyć te szkielety, zamiast systemowych.

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 `otool -l`).

### 8.3. Pytania ogólne

Pyt.: Czy są jakieś listy dyskusyjne o MPlayerze?
Pyt.: Znalazłem paskudny błąd przy próbie odtworzenia mojego ulubionego filmu! Kogo powinienem poinformować?
Pyt.: Mam problemy z odtwarzaniem plików przy użyciu kodeka ... Czy mogę ich używać?
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
Pyt.: Jak mogę zrobić zrzut ekranu?
Pyt.: Co oznaczają te liczby w wierszu stanu?
Pyt.: Dostaję komunikaty błędów o nie znalezionym pliku /usr/local/lib/codecs/ ...
Pyt.: Jak zmusić MPlayera do zapamiętania opcji użytych dla określonego pliku, np film.avi?
Pyt.: Napisy są bardzo ładne, najpiękniejsze jakie widziałem, ale spowalniają odtwarzanie! Wiem, że to jest niezwykłe...
Pyt.: Nie mogę się dostać do menu GUI. Klikam prawym przyciskiem myszy lecz nie mogę dostać się do żadnych elementów menu!
Pyt.: Jak uruchomić MPlayera w tle?

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 `screenshot` (`-vf screenshot`). Wtedy wciśnięcie klawisza s spowoduje pobranie zrzutu ekranu.
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

`A: 2.1`

  pozycja audio w sekundach

`V: 2.2`

  pozycja video w sekundach

`A-V: -0.167`

  różnica audio-video w sekundach (opóźnienie)

`ct: 0.042`

  całkowita dokonana korekcja synchronizacji A-V

`57/57`

  ramki odtworzone/zdekodowane (licząc od ostatniego przewijania)

`41%`

  użycie procesora w procentach przez kodek video (przy renderowaniu w kawałkach (slices) i bezpośrednim (DirectRendering) zawiera także video_out

`0%`

  użycie procesora przez video_out

`2.6%`

  użycie procesora w procentach przez kodek audio

`0`

  ramki opuszczone aby zachować synchronizację A-V

`4`

  obecny poziom postprocessingu obrazu (gdy używasz `-autoq`)

`49%`

  obecne wykorzystanie pamięci cache (normale jest około 50%)

`1.00x`

  szybkość odtwarzania jako mnożnik oryginalnej szybkości

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ń `#undef FAST_OSD` na `#define FAST_OSD`. Potem skompiluj ponownie.
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:

1. Start → Settings → Configuration → Base Configuration

2. Ustaw `Use Applications position hints` na `Yes`

Pyt.: | Jak uruchomić MPlayera w tle?

Odp.:

Użyj:

    mplayer opcje nazwa_pliku < /dev/null &

### 8.4. Problemy z odtwarzaniem

Pyt.: Nie mogę zidentyfikować powodu dziwnego problemu z odtwarzaniem.
Pyt.: W jaki sposób sprawić by napisy pojawiały się na czarnym pasku pod filmem?
Pyt.: Jak mogę określić ścieżkę audio/napisów z pliku OGM, Matroska, NUT lub DVD?
Pyt.: Próbuję odtworzyć jakiś strumień z internetu, ale nie udaje mi się.
Pyt.: Ściągnąłem film z sieci P2P i nie chce się odtworzyć!
Pyt.: Mam problem z wyświetlaniem napisów. Pomocy!
Pyt.: Dlaczego MPlayer nie działa w Fedora Core?
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).
Pyt.: Gry próbuję przechwycić obraz z mojego tunera kolory są dziwne. Działa OK pod innymi aplikacjami.
Pyt.: Otrzymuję bardzo dziwne wartości procentowe (dużo za duże) podczas odtwarzania plików na moim notebooku.
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.
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)

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 `expand` do zwiększenia pionowego obszaru renderowania filmu i umieść film przy jego górnej granicy. Na przykład:

    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 przykład.mkv
    mplayer -aid 1 -sid 1 przykład.mkv

Aby zobaczyć jakie są dostępne:

    mplayer -vo null -ao null -frames 0 -v nazwa_pliku | grep sid
    mplayer -vo null -ao null -frames 0 -v nazwa_pliku | grep aid

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ę `FreeType`. Sprawdź także napisy w edytorze tekstu, bądź z innymi odtwarzaczami. Spróbuj tekże przekonwertować je na inny format.
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:

- Poczekać dwa tygodnie... Być może znów zacznie działać.

- Zlinkować wszystkie biblioteki systemowe z innymi opcjami prelink. Oto instrukcje krok po korku:

  1. Otwórz `/etc/syconfig/prelink` i zmień

         PRELINK_OPTS=-mR

     na

         PRELINK_OPTS="-mR --no-exec-shield"

  2. touch /var/lib/misc/prelink.force

  3. /etc/cron.daily/prelink (To ponownie linkuje wszystkie aplikacje i zajmuje sporo czasu.)

  4. execstack -s `/ścieżka/do/`mplayer (To wyłącza exec-shield dla binarki MPlayera.)

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.
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?
Pyt.: Mam problemy z [Twój manager okien] i pełnoekranowymi trybami xv/xmga/sdl/x11...
Pyt.: Dźwięk gubi synchronizację przy odtwarzaniu pliku AVI.
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).
Pyt.: Jak użyć dmix z MPlayerem?
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...
Pyt.: Gdy uruchamiam MPlayera pod KDE, pojawia się czarny ekran i nic się nie dzieje. Po około minucie zaczyna się odtwarzanie filmu.
Pyt.: Mam problemy z synchronizacją A/V. Niektóre moje AVI są odtwarzane dobrze, a niektóre z podwójną szybkością.
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!)
Pyt.: Jak pozbyć się braku synchronizacji audio/video przy przewijaniu strumieni RealMedia?

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 `x11` zamiast `xv`. Spróbuj dodać do wywołania programu `-vo xv` lub przeczytaj sekcję video, w której znajdziesz więcej informacji dotyczących alternatywnych sterowników wyjścia video. Opcja `-zoom` jawnie wymusza skalowanie programowe.

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 = wybrany_vo

do `~/.mplayer/config` i/lub

    vo_driver = wybrany_vo

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 `resample`).

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.

- Twój CPU i/lub karta graficzna i/lub magistrala jest zbyt wolna. MPlayer w tym wypadku wyświetli komunikat (i licznik porzuconych ramek szybko będzie wzrastał).

- Jeżeli to plik AVI, to może ma zły przeplot. Wypróbuj opcję `-ni`. Może też mieć zły nagłówek. W takim przypadku może pomóc opcja `-nobps` i/lub opcja `-mc 0`.

- Twój sterownik dźwięku jest wadliwy.

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?
Pyt.: Nie mogę obejrzeć żadnego nowego DVD od Sony Pictures/BMG.
Pyt.: Co z napisami? Czy MPlayer może je wyświetlać?
Pyt.: Jak mogę ustawić kod regionu w moim napędzie DVD? Nie mam Windowsów!
Pyt.: Nie mogę odtworzyć DVD, MPlayer się zawiesza bądź wyrzuca błędy "Encrypted VOB file!" (Zaszyfrowany plik VOB!).
Pyt.: Czy muszę mieć uprawnienia (lub setuid) użytkownika root, aby móc odtwarzać DVD?
Pyt.: Czy jest możliwe odtwarzanie/kodowanie tylko wybranych rozdziałów?
Pyt.: Odtwarzanie DVD jest bardzo wolne!
Pyt.: Skopiowałem DVD używając vobcopy. Jak mogę je odtworzyć/zakodować z dysku twardego?

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 /ścieżka/do/katalogu

### 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.
Pyt.: Chciałbym przewijać o +/- 1 klatkę zamiast 10 sekund.

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ć?
Pyt.: Jak zrzucić całą pozycję DVD do pliku?
Pyt.: Jak mogę tworzyć automatycznie (S)VCD?
Pyt.: Jak mogę stworzyć (S)VCD?
Pyt.: Jak mogę połączyć dwa pliki video?
Pyt.: Jak mogę naprawić pliki AVI z popsutym indeksem lub złym przeplotem?
Pyt.: Jak mogę naprawić proporcje pliku AVI?
Pyt.: Jak mogę zapisać i kodować plik VOB z popsutym początkiem?
Pyt.: Nie mogę zakodować napisów z DVD do AVI!
Pyt.: Jak mogę zakodować tylko wybrane rozdziały z DVD?
Pyt.: Próbuję pracować z plikami 2GB+ na systemie plików VFAT. Czy to działa?
Pyt.: Co oznaczają te liczby w wierszu stanu w czasie procesu kodowania?
Pyt.: Dlaczego zalecany bitrate wypisywany przez MEncodera jest ujemny?
Pyt.: Nie mogę zakodować pliku ASF do AVI/DivX, ponieważ ma on 1000 fps.
Pyt.: Jak mogę wstawić napisy do pliku wynikowego?
Pyt.: Jak zakodować wyłącznie dźwięk z teledysku?
Pyt.: Dlaczego zewnętrzne odtwarzacze nieodtwarzają filmów MPEG-4 zakodowanych MEncoderem w wersji nowszej niż 1.0pre7?
Pyt.: Jak mogę kodować plik zawierający tylko dźwięk?
Pyt.: Jak mogę odtwarzać napisy wbudowane w AVI?
Pyt.: MPlayer nie...

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 zrzut_dvd.vob

zrzuci piątą pozycję DVD do pliku `zrzut_dvd.vob`.

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 wyjście.avi plik1.avi plik2.avi

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 wejście.avi -ovc copy -oac copy -o wyjście.avi

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 wejście.avi -ovc copy -oac copy -o wyjście.avi -force-avi-acpect 4/3

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 wejście.vob -sb ilość_bajtów_do_pominięcia

Potem możesz stworzyć nowy plik, zawierający tylko poprawną część:

    dd if=wejście.vob of=obcięte_wyjście.vob skip=1 ibs=ilość_bajtów_do_pominięcia

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]

`Pos: 264.5s`

  aktualny czas w kodowanym strumieniu

`6612f`

  liczba zakodowanych klatek video

`( 2%)`

  jaki procent strumienia wejściowego został zakodowany

`7.12fps`

  szybkość kodowania

`Trem: 576min`

  szacowany pozostały czas kodowania

`2856mb`

  szacowana wielkość wyniku ostatecznego kodowania

`A-V:0.065`

  aktualne opóźnienie między strumieniami audio i video

`[2126:192]`

  średni bitrate video (w kb/s) i średni bitrate audio (w kb/s)

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 encode
    mplayer -ao pcm -aofile encode dvd://1 &
    lame Twoje_opcje encode music.mp3
    rm encode

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.:

`libavcodec`, natywna biblioteka kodowania MPEG-4 zwykle dostarczana z MEncoderem ustawiała FourCC na 'DIVX' podczas kodowania video MPEG-4 (FourCC to etykieta AVI identyfikująca oprogramowanie użyte do kodowania i przewidziane do dekodowania video). To powodowało przekonanie u wielu ludzi, że `libavcodec` jest biblioteką kodowania DivX, gdy w rzeczywistości jest zupełnie inną biblioteką kodowania MPEG-4, która dużo lepiej niż DivX implementuje standard MPEG-4. Dlatego też nowym domyślnym kodem FourCC używanym przez `libavcodec` jest 'FMP4', lecz możesz obejść to zachowanie używając opcji MEncodera `-ffourcc`. Tak samo możesz zmienić FourCC istniejącego pliku:

    mencoder wejście.avi -o wyjście.avi -ffourcc XVID

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 `libavcodec`, a DivX nie; z drugiej strony `Xvid` jest bliższy funkjonalnością `libavacodec`, a jest obsługiwany przez wszystkie sensowne odtwarzacze.

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.

# Dodatek A. Jak zgłaszać błędy

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.

## A.1. Zgłaszanie błędów związanych z bezpieczeństwem

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 security@mplayerhq.hu. 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.

## A.2. Jak poprawiać błędy

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).

## A.3. Jak wykonać test regresji za pomocą Subversion

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:-).

## A.4. Jak zgłaszać błędy

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.

## A.5. Gdzie zgłaszać błędy

Zapisz się na listę MPlayer-users: http://lists.mplayerhq.hu/mailman/listinfo/mplayer-users i wyślij swoje zgłoszenie błędu na mailto:mplayer-users@mplayerhq.hu, 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.

## A.6. Co zgłaszać

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.

### A.6.1. Informacja o systemie operacyjnym

- 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

### A.6.2. Sprzęt i sterowniki

- 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.

### A.6.3. Problemy z konfiguracją

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.

### A.6.4. Problemy z kompilacją

Prosimy załączyć następujące pliki:

- config.h

- config.mak

### A.6.5. Problemy z odtwarzaniem

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 -v opcje 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.

### A.6.6. Awarie programu (ang. Crashes)

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ć:

#### A.6.6.1. Jak otrzymać informację o awarii

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 -v opcje-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

#### A.6.6.2. Jak wyciągnąć sensowne informacje ze zrzutu core (ang. core dump)

Utwórz plik z nastepującymi poleceniami:

    bt
    disass $pc-32,$pc+32
    info all-registers

A następnie uruchomić następujące polecenie:

    gdb mplayer --core=core -batch --command=plik_z_poleceniami > mplayer.bug

## A.7. Wiem co robię...

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.)

# Dodatek B. Format skórki MPlayera

## B.1. Wstęp

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.

### B.1.1. Katalogi

Skórki są szukane w następujących katalogach (w kolejności):

1. `$(DATADIR)/skins/`

2. `$(PREFIX)/share/mplayer/skins/`

3. `~/.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/

### B.1.2. Formaty obrazków

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.

### B.1.3. Składniki skórki

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.

  ### Uwaga

  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.

### B.1.4. Pliki

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` ).

## B.2. Plik skin

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`.

### B.2.1. Okno główne i panel odtwarzania

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.

  ### Uwaga

  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.

  ### Uwaga

  Współrzędne te nie działają na razie dla okna ekranu.

  ### Ostrzeżenie

  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

### Uwaga

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.

### B.2.2. Okno ekranu

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).

### B.2.3. Menu skórki

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.

## B.3. Czcionki

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 ``obrazek`` jest nazwą pliku graficznego, który zawiera czcionkę (nie musisz dopisywać jego rozszerzenia).

    "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

### B.3.1. Znaki specjalne (symbole)

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

## B.4. Sygnały GUI

Tutaj znajdują się sygnały, które mogą być generowane przez przyciski, suwaki i elementy menu.

evNone

  Sygnał pusty - nic nie robi (może za wyjątkiem wersji z Subversion:-)).

Kontrola odtwarzania :

evPlay

  Rozpocznij odtwarzanie.

evStop

  Zatrzymaj odtwarzanie.

evPause

evPrev

  Przejdź do poprzedniej pozycji na liście odtwarzania.

evNext

  Przejdź do następnej pozycji na liście odtwarzania.

evLoad

  Wczytaj plik (poprzez otwarcie okna przeglądarki plików, gdzie możesz wybrać plik).

evLoadPlay

  Tto samo co `evLoad`, ale zacznij automatycznie odtwarzać zaraz po wyborze pliku.

evLoadAudioFile

  Wczytaj plik dźwiękowy (z przeglądarki plików).

evLoadSubtitle

  Wczytaj plik z napisami (z przeglądarki plików).

evDropSubtitle

  Wyłącz aktualnie używane napisy.

evPlaylist

  Otwórz/zamknij okno listy odtwarzania.

evPlayVCD

  Spróbuj odczytać płytę ze wskazanego czytnika CD.

evPlayDVD

  Spróbuj odczytać płytę ze wskazanego czytnika DVD.

evLoadURL

  Wyświetl okienko dialogowe URL.

evPlaySwitchToPause

  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).

evPauseSwitchToPlay

  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:

evBackward10sec

  Przewiń do tyłu o 10 sekund.

evBackward1min

  Przewiń do tyłu o 1 minutę.

evBackward10min

  Przewiń do tyłu o 10 minut.

evForward10sec

  Przewiń do przodu o 10 sekund.

evForward1min

  Przewiń do przodu o 1 minutę.

evForward10min

  Przewiń do przodu o 10 minut..

evSetMoviePosition

  Przewiń do pozycji (może być wykorzystane przez suwak; użyte są względne wartości (0-100%) suwaka).

Kontrola video:

evHalfSize

  Ustawia okno filmu na połowę rozmiaru.

evDoubleSize

  Ustaw podwójny rozmiar okna z filmem.

evFullScreen

  Włącz/wyłącz tryb pełnoekranowy.

evNormalSize

  Ustaw typowy rozmiar okna z filmem.

evSetAspect

Kontrola dźwięku:

evDecVolume

  Zmniejsz głośność

evIncVolume

  Zwiększ głośność.

evSetVolume

  Ustaw głośność (może być używane przez suwak; używana jest wartość względna (0-100%)).

evMute

  Wycisz/przywróć dźwięk.

evSetBalance

  Ustawi balans (może być używane przez suwak; używana jest wartość względna (0-100%)).

evEqualizer

  Włącz/wyłącz korektor.

Różne:

evAbout

  Otwórz okno "o programie".

evPreferences

  Otwórz okno z ustawieniami.

evSkinBrowser

  Otwórz okno przeglądarki skórek.

evIconify

  Minimalizuj okno.

evExit

  Wyłącz program.

## B.5. Tworzenie dobrych skórek

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.