# Obsługiwane kodeki

## Kodeki video

Zajrzyj do tabeli stanu kodeków, żeby zobaczyć kompletną, codziennie generowaną listę. Niektóre kodeki są dostępne do pobrania z naszej strony domowej. Ściągniesz je ze strony z kodekami.

Najważniejsze ze wszystkich:

- MPEG-1 (VCD) i MPEG-2 (DVD) video

- natywne dekodery dla wszystkich wariantów DivX, 3ivX, Microsoft MPEG-4 v1, v2 i innych rodzajów MPEG-4

- natywne dekodery dla Windows Media Video 7/8 (WMV1/WMV2) i dekodery Win32 DLL dla Windows Media Video 9 (WMV3). Oba używane w plikach `.wmv`

- natywny dekoder Sorenson 1 (SVQ1)

- natywny dekoder Sorenson 3 (SVQ3)

- dekoder 3ivX w wersji 1 i 2

- Kodeki Cinepak i Intel Indeo (3.1,3.2,4.1,5.0)

- MJPEG, AVID, VCR2, ASV2 i inne formaty sprzętowe

- VIVO 1.0, 2.0, I263 i inne warianty H.263(+)

- FLI/FLC

- RealVideo 1.0 i 2.0 przy użyciu libavcodec i kodeki RealVideo 3.0 i 4.0 używające bibliotek RealPlayer

- natywny dekoder HuffYUV

- Różne stare proste formaty podobne do RLE

Jeżeli masz niewymienione tutaj kodeki Win32, które nie są jeszcze obsługiwane, zajrzyj do działu importowanie kodeków Win32-HOWTO i pomóż nam dodać ich obsługę.

### FFmpeg/libavcodec

FFmpeg zawiera libavcodec, wiodącą bibliotekę kodeków audio i video mającą otwarte źródła. Może ona dekodować większość formatów multimedialnych, zazwyczaj z większą prędkością niż alternatywy, a docelowo chce obsługiwać je wszystkie. Jest to domyślny dekoder dla większości kodeków obsługiwanych przez MPlayera. Kodowanie do niektórych formatów również jest możliwe i obsługiwane przez MEncodera.

Pełną listę obsługiwanych kodeków video i audio znajdziesz na stronie FFmpeg.

MPlayer zawiera libavcodec. Po prostu uruchom `./configure` i kompiluj.

### 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, dlatego jest dużo bardziej efektywny niż dobrze znany kodek DivX. Łączy bardzo dobrą jakość video i dobre osiągi dzięki optymalizacjami kodu dla większości nowoczesnych procesorów.

Zaczął się jako odłam kodeka OpenDivX. Stało się to gdy ProjectMajo zmienił OpenDivX na zamknięte DivX4. W rezultacie tej decyzji rozeźleni ludzie spoza ProjectMayo, którzy pracowali nad OpenDivX, rozpoczęli projekt Xvid. Tak więc oba projekty mają to samo pochodzenie.

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. Jeżeli użyłeś opcji `--enable-divxcompat`, skopiuj `../../src/divx4.h` do `/usr/local/include/`.

8. Przekompiluj MPlayera z opcjami `--with-xvidlibdir=/ścieżka/do/libxvidcore.a` `--with-xvidincdir=/ścieżka/do/xvid.h`.

### x264

#### Co to jest x264?

x264 jest biblioteką służącą do tworzenia strumieni video H.264. Nie jest w 100% ukończona, ale ma przynajmniej pewną obsługę większości mających wpływ na jakość możliwości H.264. Jest też wiele zaawansowanych możliwości w specyfikacji H.264, które nie mają nic wspólnego z jakością jako taką; wiele z nich jeszcze nie jest zaimplementowanych w x264.

##### Możliwości kodera

- CAVLC/CABAC

- Wielokrotne referencje

- Intra: wszystkie typy makrobloków (16x16, 8x8 i 4x4 z wszystkimi predykcjami)

- Inter P: wszystkie podziały (od 16x16 aż do 4x4)

- Inter B: podziały od 16x16 do 8x8 (włączając SKIP/DIRECT)

- Kontrola tempa: stały kwantyzator, stały bitrate, jedno- albo wieloprzebiegowe ABR, opcjonalne VBV

- Wykrywanie zmian scen

- Adaptatywne umieszczanie klatek B

- Referencyjne klatki B / dowolna kolejność ramek

- adaptywna transformacja przestrzenna 8x8 i 4x4

- tryb bezstratny

- Własne matryce kwantyzacji

- Równoległe kodowanie wielu fragmentów

- Przeplot

#### Co to jest H.264

H.264 jedną z nazw nowego kodeka video opracowanego wspólnie przez ITU i MPEG. Może też być prawidłowo nazywany okropnymi nazwami "ISO/IEC 14496-10" lub "MPEG-4 Part 10". Częściej jest nazywany "MPEG-4 AVC" albo po prostu "AVC".

Jakkolwiek go nie nazywać, H.264 może być wart wypróbowania ponieważ zazwyczaj może dorównać jakością MPEG-4 ASP z mniejszą o 5%-30% objętością. Dokładne wyniki zależą od materiału źródłowego i kodera. Zyski z używania H.264 nie są za darmo: Dekodowanie strumieni H.264 mają duże wymagania obliczeniowe i pamięciowe. Na przykład, na Athlonie 1733 MHz, film H.264 w rozdzielczości DVD 1500kbps wymaga do zdekodowania około 35% CPU. Dla porównania, dekodowanie strumienia MPEG-4 ASP w rozdzielczości DVD 1500kbps wymaga około 10% CPU. Oznacza to że dekodowanie wysokiej jakości strumieni jest prawie nie do pomyślenia dla zwykłych użytkowników. Oznacza to również że dobry DVD rip może się czasami zacinać na procesorach wolniejszych niż jakieś 2.0 GHz.

Jeśli używasz x264, wymagania kodowania nie są o wiele większe niż te, do których przywykliśmy przy MPEG-4 ASP. Na przykład, na Athlonie 1733 MHz typowe kodowanie DVD będzie działać z 5-15fps.

Ten dokument nie ma wyjaśniać szczegółów H.264, ale jeśli jesteś zainteresowany niewielkim wstępem możesz chcieć przeczytać The H.264/AVC Advanced Video Coding Standard: Overview and Introduction to the Fidelity Range Extensions.

#### Jak mogę odtwarzać filmy H.264 używając MPlayera

MPlayer używa dekodera H.264 z libavcodec. libavcodec miało choć trochę zdatny do użytku dekoder H.264 od około czerwca 2004, ale od tego czasu wprowadzono wiele zmian i poprawek, zarówno pod względem obsługiwanej funkcjonalności jak i zużycia CPU. Na wszelki wypadek lepiej jest używać najnowszej wersji z Subversion.

Jeśli chcesz szybki i łatwy sposób na sprawdzenie czy były ostatnio zmiany w obsłudze H.264 w libavcodec, możesz patrzeć na interfejs sieciowy repozytorium SVN FFmpega

#### Jak mogę kodować filmy używając MEncodera i x264?

Jeśli masz zainstalowanego klienta subversion, możesz uzyskać najnowsze źródła x264 tym poleceniem:

    svn co svn://svn.videolan.org/x264/trunk x264

Źródła MPlayera są aktualizowane, gdy tylko zmieni się API x264, więc zalecane jest także używanie MPlayera z Subversion. Być może sytuacja się zmieni jeśli i gdy nastąpi "wydanie" x264. W międzyczasie x264 powinna być uważana za niestabilną, w tym sensie że jej interface programistyczny może się zmienić.

x264 buduje się i instaluje w sposób standardowy:

    ./configure && make && sudo make install

To zainstaluje libx264.a w /usr/local/lib oraz x264.h w /usr/local/include. Gdy biblioteka i nagłówki x264 są już w standardowych miejscach, budowanie MPlayera z obsługą x264 jest proste. Uruchom standardowe:

    ./configure && make && sudo make install

Skrypt konfiguracyjny wykryje że spełniłeś wymagania do obsługi x264.

## Kodeki audio

### Najważniejsze ze wszystkich kodeków audio:

- MPEG layer 1/2/3 (MP1/2/3) audio (natywny kod, z optymalizacją dla MMX/SSE/3DNow!)

- Windows Media Audio 7 i 8 (AKA WMAv1 i WMAv2) (natywny kod, z libavcodec)

- Windows Media Audio 9 (WMAv3) (poprzez DLL DMO)

- AC3 Dolby audio (natywny kod, z optymalizacją MMX/SSE/3DNow!)

- przetwarzanie AC3 przez kartę dźwiękową

- AAC

- kodek Ogg Vorbis audio (natywna biblioteka)

- RealAudio: DNET (AC3 z niskim bitratem), Cook, Sipro i ATRAC3

- QuickTime: kodeki Qualcomm i QDesign

- VIVO audio (g723, Vivo Siren)

- Voxware audio (poprzez DirectShow DLL)

- formaty alaw i ulaw, różne gsm, adpcm i pcm i inne stare, proste kodeki audio

- kodeki mowy Adaptive Multi-Rate (AMR)

### Programowe dekodowanie AC3

To jest domyślny dekoder używany przez pliki z dźwiękiem AC3.

Dekoder AC3 może wytworzyć wyjście audio zmiksowane dla 2, 4 lub 6 głośników. Kiedy skonfigurowany jest dla 6 głośników, dekoder dostarcza do sterownika karty dźwiękowej osobne wyjście dla każdego kanału AC3, pozwalając doświadczyć pełnego "dźwięku przestrzennego" bez potrzeby użycia zewnętrznego dekodera AC3 wymaganego przez kodek hwac3.

Użyj opcji `-channels` aby wybrać liczbę wyjściowych kanałów. Użyj `-channels 2` do uzyskania dźwięku stereo. Dla czterokanałowego dźwięku (wyjścia Lewe Przednie, Prawe Przednie, Lewe Surround i Prawe Surround), użyj `-channels 4`. W tym przypadku, wszystkie centralne kanały zostaną zmiksowane do odpowiadających im przednich kanałów. Natomiast `-channels 6` wyprodukuje wszystkie kanały AC3 tak jak zostały zakodowane - w kolejności Lewy, Prawy, Lewy Surround, Prawy Surround, Centralny i LFE.

Domyślną liczbą kanałów wyjściowych jest 2.

Aby użyć więcej niż dwóch wyjściowych kanałów, będziesz potrzebował OSS i karty dźwiękowej obsługującej odpowiednią ilość wyjściowych kanałów poprzez SNDCTL_DSP_CHANNELS ioctl. Przykładem odpowiedniego sterownika jest emu10k1 (używany przez karty Soundblaster Live!) z sierpnia 2001 roku, albo nowszy (przypuszczalnie działa także ALSA CVS).

### Sprzętowe dekodowanie AC3

Potrzebna jest karta obsługująca AC3, z cyfrowym wyjściem (S/PDIF). Sterownik musi prawidłowo obsługiwać format AFMT_AC3 (robi to C-Media). Podłącz swój dekoder AC3 do wyjścia S/PDIF i użyj opcji `-ac hwac3`. Rozwiązanie to jest ciągle w fazie testów, ale wiadomo, że działa z kartami C-Media i Soundblaster Live! + sterowniki ALSA (ale nie z OSS) i kartami dekodującymi DXR3/Hollywood+ MPEG.

### Obsługa libmad

libmad jest wieloplatformową, stałoprzecinkową (wewnętrznie 24-bitowe PCM) biblioteką dekodującą dźwięk MPEG. Nie odtwarza zbyt dobrze uszkodzonych plików i czasami ma problemy z przewijaniem, ale na platformach bez jednostki zmiennoprzecinkowej (FPU), czyli na przykład ARM, może mieć lepszą wydajność niż mp3lib.

Jeśli masz prawidłowo zainstalowaną bibliotekę libmad, `./configure` zauważy to i automatycznie zostanie zbudowana obsługa dekodowania dźwięku MPEG przy użyciu libmad.

### Sprzętowy kodek MPEG audio

Ten kodek (wybierany poprzez `-ac hwmpa`) przepuszcza pakiety MPEG audio do sprzętowego dekodera takiego, jak ten, który można znaleźć w pełni wyposażonych kartach DVB i adapterach DXR2. Nie używaj ich w połączeniu z żadnymi innymi wyjściowymi urządzeniami audio (np. OSS i ALSA), bo nie będzie to działało (będziesz słyszeć tylko szum).

### Kodek AAC

AAC (Advanced Audio Coding) jest kodekiem audio spotykanym czasami w plikach MOV i MP4. Otwarty dekoder nazywany FAAD dostępny jest na stronie . MPlayer zawiera migawkę CVS z libfaad 2.1beta, więc nie musisz ściągać go oddzielnie.

Jeżeli używasz gcc 3.2, który ma kłopoty z kompilacją wbudowanej wersji FAAD lub chcesz z jakichś powodów użyć zewnętrznej biblioteki, ściągnij ją z tej strony i dodaj opcję `--enable-external-faad` do `./configure`. Nie potrzebujesz całego faad2 do dekodowanie plików AAC. Wystarczy użyć samej biblioteki libfaad. Zbudujesz ją w następujący sposób

    cd faad2/
    sh bootstrap
    ./configure
    cd libfaad
    make
    make install

Wersje binarne nie są dostępne na stronie audiocoding.com, ale możesz ściągnąć (apt-getem) Debianowe paczki ze strony domowej Christiana Marillata, RPM-y dla Mandrake/Mandriva ze strony P.L.F, a RPM-y dla Fedory z Livna.

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

## Importowanie kodeków Win32-HOWTO

### Kodeki VFW

VFW (Video for Windows) jest starym API Video pod Windows. Jego kodeki mają rozszerzenie `.DLL` albo (rzadziej) `.DRV`. Jeżeli MPlayer odmawia odtwarzania plików AVI z komunikatem typu

    UNKNOWN video codec: HFYU (0x55594648)

oznacza to, że twój plik AVI jest zakodowany z użyciem kodeka, który korzysta z fourcc HFYU (HFYU = kodek HuffYUV, DIV3 = DivX Low Motion, itd.; fourcc-unikalny, czteroliterowy identyfikator kodeka znajdujący się najczęściej w nagłówkach plików AVI-przyp. tłumacz). Kiedy już to wiesz, musisz odzukać DLL'a, który jest ładowany przez Windows w celu odtworzenia tego pliku. W naszym przypadku plik `system.ini` zawiera tę informację w następującej linii:

    VIDC.HFYU=huffyuv.dll

Zatem potrzebujesz pliku `huffyuv.dll`. Zauważ, że kodeki audio są oznaczane za pomocą prefiksu MSACM:

    msacm.l3acm=L3codeca.acm

Jest to kodek MP3. Teraz powinieneś mieć wszystkie niezbędne informacje (fourcc, plik z kodekiem, przykładowy plik AVI). Umieść swoją prośbę o obsługę kodeka za pomocą poczty elektronicznej i wyślij ww. pliki na poniższy serwer FTP: ftp://upload.mplayerhq.hu/MPlayer/incoming/<nazwakodeka>/

W systemach Windows NT/2000/XP szukaj powyższych informacji w rejestrze, np. szukaj wyrażenia "VIDC.HFYU". Aby dowiedzieć się jak to zrobić, spójrz niżej na starą metodę DirectShow.

### Kodeki DirectShow

DirectShow jest nowszym API Video, które jest nawet gorsze od swojego poprzednika. Sprawa ma się gorzej z DirectShow, ponieważ:

- `system.ini` nie zawiera wymaganych informacji, zamiast tego są one przechowywane w rejestrze.

- Z tego powodu wymagane jest GUID kodeka.

#### Nowa metoda:

Używając Microsoft GraphEdit (szybki sposób)

1. Pobierz GraphEdit z dowolnego DirectX SDK, albo z doom9

2. Uruchom `graphedit.exe`.

3. Z menu wybierz Graph Insert Filters.

4. Rozwiń listę DirectShow Filters

5. Wybierz właściwy kodek i rozwiń go.

6. We wpisie DisplayName spójrz na tekst w nawiasach klamrowych po znaku "backslash" i zapisz go (pięć bloków oddzielonych kreskami, GUID).

7. Binariami kodeka jest plik określony w polu Filename.

Jeżeli nie ma pola Filename, a DisplayName zawiera coś w stylu device:dmo, to jest to kodek DMO.

#### Stara Metoda:

Weź głęboki oddech i zacznij przeszukiwanie rejestru...

1. Uruchom `regedit`.

2. Naciśnij CtrlF, odznacz dwa pierwsze pola (checkboxes) i zaznacz trzecie. Wpisz fourcc kodeka (np. `TM20`).

3. Powinieneś zobaczyć pole zawierające ścieżkę i nazwę pliku (np. `C:\WINDOWS\SYSTEM\TM20DEC.AX`).

4. Gdy odnalazłeś już plik, potrzebny będzie GUID. Spróbuj ponownego wyszukiwania, ale tym razem wpisz nazwę kodeka, a nie jego fourcc. Jego nazwę można sprawdzić, kiedy Media Player odtwarza plik, odszukując ją w Plik Opcje Zaawansowane. Jeżeli jej tam nie będzie, to masz pecha. Spróbuj odgadnąć nazwę (np. spróbuj wyszukać "TrueMotion").

5. Jeżeli GUID został odnaleziony, powinieneś ujrzeć pola FriendlyName i CLSID. Zapisz szesnastobajtowy CLSID będący GUIDem, którego potrzebujemy.

Jeżeli wyszukiwanie się nie powiedzie, spróbuj zaznaczyć wszystkie pola (checkboxes). Prawdopodobnie dostaniesz fałszywe trafienia, ale być może będziesz miał szczęście...

Teraz, kiedy masz już wszystkie niezbędne informacje (fourcc, GUID, plik z kodekiem, przykładowy plik AVI), umieść swoją prośbę o obsługę kodeka za pomocą poczty elektronicznej i wyślij ww. pliki na poniższy serwer FTP: ftp://upload.mplayerhq.hu/MPlayer/incoming/<nazwakodeka>/

Jeżeli chcesz samodzielnie dodać obsługę kodeka, przeczytaj DOCS/tech/codecs.conf.txt (tylko po angielsku - przyp. tłum.).