# Codecs

## Videocodecs

Die Codecstatustabelle ist eine vollständige Liste aller unterstützten Codecs, die täglich neu erstellt wird. Einige Binärcodecs zum Gebrauch mit MPlayer sind im Downloadbereich unserer Homepage verfügbar.

Die Allerwichtigsten:

- MPEG-1 (VCD) und MPEG-2 (DVD) Video

- Native Decoder für alle DivX-Varianten, 3ivX, Microsoft MPEG-4 v1, v2 und andere MPEG-4 Varianten

- Nativer Decoder für Windows Media Video 7/8 (WMV1/WMV2) und Win32 DLL Decoder für Windows Media Video 9 (WMV3), beide in Gebrauch in `.wmv`-Dateien

- Nativer Sorenson 1 (SVQ1) Decoder

- Nativer Sorenson 3 (SVQ3) Decoder

- 3ivx v1, v2 Decoder

- Cinepak und Intel Indeo Codecs (3.1,3.2,4.1,5.0)

- MJPEG, AVID, VCR2, ASV2 und andere Hardwareformate

- VIVO 1.0, 2.0, I263 und andere H.263(+)-Varianten

- FLI/FLC

- RealVideo 1.0 & 2.0 von libavcodec und RealVideo 3.0 & 4.0 Codecs mittels der RealPlayer Bibliotheken

- Native Decoder für HuffYUV

- Verschiedene alte und simple RLE-ähnliche Formate

Falls du einen Win32 Codec hast, der hier nicht aufgeführt ist und noch nicht unterstützt wird, lies bitte die Codec Importing HOWTO und hilf uns, Unterstützung hinzuzufügen.

### FFmpeg/libavcodec

FFmpeg enthält libavcodec, die führende Open-Source-Bibliothek für Video und Audio. Sie ist in der Lage, die meisten Multimedia-Formate zu decodieren, normalerweise schneller als die Alternativen; möglicherweise wird auch noch Unterstützung für die anderen Formate hinzugefügt. Es ist der Standarddecoder für den Großteil der Codecs, die MPlayer unterstützt. Für manche Formate ist außerdem auch Encodierung mit Hilfe von MEncoder möglich.

Für eine vollständige Liste unterstützter Video- und Audiocodecs besuche bitte die FFmpeg-Homepage.

MPlayer enthält libavcodec. Es genügt, `./configure` laufen zu lassen und zu compilieren.

### Xvid

Xvid ist ein freier MPEG-4 ASP konformer Videocodec, der Encodierung in zwei Durchläufen und das ganze MPEG-4 ASP Spektrum unterstützt, was ihn wesentlich effizienter als den gut bekannten DivX-Codec macht. Er erreicht sehr gute Qualität und dank CPU-Optimierungen für die meisten modernen Prozessoren gute Performance.

Es begann als Fork der Entwicklung des OpenDivX-Codecs. Dies geschah, als ProjectMayo OpenDivX zu Closed Source DivX4 machte und die Leute, die an OpenDivX arbeiteten aber nicht zu ProjectMayo gehörten, verärgerte. Diese riefen dann Xvid ins Leben. Beide Projekte haben daher denselben Ursprung.

Beachte, dass Xvid nicht benötigt wird, um mit Xvid encodiertes Video zu decodieren. In der Standardkonfiguration wird dafür libavcodec benutzt, da er höhere Geschwindigkeit bietet.

#### Installation von Xvid

Wie die meiste Open-Source-Software gibt es zwei verfügbare Varianten: offizielle Releases und die CVS-Version. Die CVS-Version ist für die Benutzung normalerweise stabil genug, da es meistens Fehlerbehebungen für Bugs enthält, die im Release vorhanden sind. Hier also, was du zu tun hast, um Xvid vom CVS mit MEncoder ans Laufen zu bringen (du benötigst mindestens autoconf 2.50, automake und 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

   Du musst möglicherweise ein paar Optionen hinzuzufügen (schaue dir die Ausgabe von `./configure --help` an).

6.     make && make install

7. Wenn du `--enable-divxcompat` angegeben hast, kopiere `../../src/divx4.h` nach `/usr/local/include/`.

8. Compiliere MPlayer erneut mit `--with-xvidlibdir=/Pfad/zu/libxvidcore.a` `--with-xvidincdir=/Pfad/zu/xvid.h`.

### x264

#### Was ist x264?

x264 ist eine Bibliothek für die Erstellung von H.264-Videostreams. Es ist nicht 100% vollständig, hat momentan aber zumindest eine Art Unterstützung für die meisten H.264-Features, die Einfluß auf die Qualität haben. Es gibt außerdem viele fortgeschrittene Features in der H.264-Spezifikation, die mit Videoqualität per se nichts zu tun haben; viele davon sind in x264 nicht implementiert.

##### Encoder-Features

- CAVLC/CABAC

- mehrere Referenzen

- Intra: alle Macroblock-Typen (16x16, 8x8, and 4x4 mit allen Vorhersagen)

- Inter P: Alle Partitionen (von 16x16 bis runter zu 4x4)

- Inter B: Partitionen von 16x16 runter zu 8x8 (inklusive SKIP/DIRECT)

- Bitratenkontrolle: konstanter Quantisierungsparameter, konstante Bitrate, einer oder mehrere Durchläufe mit durchschnittlicher Bitrate (optional VBV)

- Szenenwechselerkennung

- Adaptive Platzierung von B-Frames

- B-Frames als Referenzen / bieliebige Framereihenfolge

- 8x8 und 4x4 adaptive räumliche Transformierung

- Verlustfreier Modus

- Benutzerdefinierte Quantisierungsmatrizen

- Parallele Encodierung mehrerer Scheiben

- Interlacing

#### Was ist H.264?

H.264 ist ein Name für einen neuen digitalen Videocodec, der von der ITU und MPEG zusammen entwickelt wurde. Etwas umständlicher kann man ihn auch "ISO/IEC 14496-10" oder "MPEG-4 Part 10" nennen. Häufiger wird er als "MPEG-4 AVC" oder einfach "AVC" bezeichnet.

Wie auch immer du ihn nennst, H.264 ist es eventuell wert, ausprobiert zu werden, da er typischerweise die Qualität von MPEG-4 ASP bei 5%-30% Einsparung der Bitrate erreicht. Tatsächliche Ergebnisse werden sowohl vom Quellmaterial als auch dem Encoder abhängen. Die Gewinne durch die Benutzung von H.264 kommen nicht umsonst: Decodierung von H.264-Streams hat anscheinend heftige CPU- und Speicheranforderungen. Beispielsweise benötigt ein Athlon mit 1733 MHz für ein 1500kbps-H.264-Video in DVD-Auflösung um die 35% CPU-Leistung für die Decodierung. Im Vergleich dazu wird für einen 1500kbps MPEG-4 ASP Stream um die 10% CPU-Leistung gebraucht. Dies bedeutet, dass Decodierung von High-Definition-Streams für die meisten Benutzer außer Frage steht. Es bedeutet auch, dass sogar ein ordentlicher DVD-Rip auf Prozessoren langsamer als 2.0 GHz oder so ins Stocken geraten kann.

Zumindest bei x264 sind die Anforderungen für die Encodierung nicht so viel schlimmer als das, was du von MPEG-4 ASP bereits kennst. Beispielsweise läuft eine DVD-Encodierung auf einem 1733 MHz Athlon bei etwa 5-15 fps.

Dieses Dokument hat nicht die Absicht, die Details von H.264 zu erklären, wenn du aber an einer ausführlichen Übersicht interessiert bist, kannst du dir The H.264/AVC Advanced Video Coding Standard: Overview and Introduction to the Fidelity Range Extensions durchlesen.

#### Wie kann ich H.264-Videos mit MPlayer abspielen?

MPlayer benutzt den H.264-Decoder von libavcodec. libavcodec hat minimal nutzbare H.264-Decodierung seit etwa Juli 2004, seitdem wurden jedoch große Änderungen und Verbesserungen implementiert, sowohl hinsichtlich mehr unterstützten Funktionen als auch CPU-Last. Um einfach sicher zu sein, ist es immer eine gute Idee, einen aktuellen Subversion-Checkout zu verwenden.

Eine schnelle und einfache Methode, festzustellen, ob kürzlich Änderungen am H.264-Decoder von libavcodec gemacht wurden, wirf einen Blick auf das Web-Interface des Subversion-Repository von FFmpeg.

#### Wie kann ich Videos mit MEncoder und x264 encodieren?

Wenn du den Subversion-Client installiert hast, erhältst du die aktuellen Sourcen mit folgendem Befehl:

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

MPlayer-Sourcen werden immer aktualisiert, wenn sich die API von x264 ändert, daher ist es immer gut, auch MPlayer von Subversion zu benutzen. Möglicherweise ändert sich das, wenn und falls es ein x264-"Release" gibt. Bis dahin sollte x264 hinsichtlich der Programmierschnittstelle als sehr unstabil betrachtet werden.

x264 wird gebaut und installiert nach Standardmethode:

    ./configure && make && sudo make install

Dies installiert libx264.a nach /usr/local/lib, und x264.h landet in /usr/local/include.

Mit der x264-Bibliothek und dem Header in den Standardverzeichnissen ist es leicht, MPlayer mit x264-Unterstützung zu bauen. Führe die Standardformel aus:

    ./configure && make && sudo make install

Das `./configure`-Script wird automatisch erkennen, dass du die Bedingungen für x264 erfüllst.

## Audiocodecs

### Die allerwichtigsten Audiocodecs:

- MPEG layer 1/2/3 (MP1/2/3) Audio (nativer Decoder, mit MMX/SSE/3DNow! Optimierung)

- Windows Media Audio 7 und 8 (alias WMAv1 und WMAv2) (nativer Decoder, mit libavcodec)

- Windows Media Audio 9 (WMAv3) (unter Verwendung der DMO-DLL)

- AC3 Dolby Audio (nativer Decoder, mit MMX/SSE/3DNow! Optimierung)

- AC3-Passthrough unter Verwendung der Soundkartenhardware

- AAC

- Ogg Vorbis Audiocodec (native Bibliothek)

- RealAudio: DNET (AC3 mit niedriger Bitrate), Cook, Sipro and ATRAC3

- QuickTime: Qualcomm und QDesign Audio Decoder

- VIVO Audio (g723, Vivo Siren)

- Voxware Audio (unter Verwendung der DirectShow-DLL)

- alaw und ulaw, verschiedene gsm, adpcm und pcm Formate und andere einfache alte Audiocodecs

- Adaptive Multi-Rate (AMR) Sprachcodecs

### Software-AC3-Decoder

Das ist der Standarddecoder für Dateien, die AC3-Audio enthalten.

Der AC3-Decoder kann Audio für zwei, vier oder sechs Lautsprecher ausgeben. Wenn er für sechs Lautsprecher konfiguriert wurde, stellt der Decoder dem Audiotreiber alle Kanäle separat zur Verfügung und erlaubt so volle "Surround"-Erfahrung ohne einen externen AC3 Decoder, der gebraucht wird, um hwac3 zu benutzen.

Benutze die Option `-channels`, um die Anzahl der Kanäle anzugeben. Mit `-channels 2` wird Stereo-Klang erzeugt. Für eine 4-Kanal-Ausgabe (links vorne, rechts vorne, links Surround und rechts Surround) verwende `-channels 4`. In diesem Fall wird der Kanal Center gleichmäßig auf die vorderen Kanäle verteilt. `-channels 6` gibt alle AC3-Kanäle aus, wie sie codiert wurden - in der Reihenfolge links vorne, rechts vorne, links Surround, rechts Surround, Center und LFE.

Standard sind zwei Ausgabekanäle.

Um mehr als zwei Ausgabekanäle verwenden zu können, muss OSS verwendet werden, und die Soundkarte muss die entsprechende Anzahl an Kanälen mittels ioctl SNDCTL_DSP_CHANNELS unterstützen. Ein funktionierender Treiber ist emu10k1 (wird für Soundblaster Live! Karten benutzt) seit August 2001 (Neuere ALSA-Versionen sollten auch funktionieren).

### Hardware-AC3-Decoder

Benötigt wird eine AC3 fähige Soundkarte mit einem Digitalausgang (S/PDIF). Der Treiber der Karte muss das AFMT_AC3 Format korrekt unterstützen (wie z.B. C-Media). Verbinde dann den Hardware AC3 Decoder mit dem S/PDIF Ausgang und benutze `-ac hwac3`. Die Unterstützung ist experimentell, funktioniert aber z.B. mit C-Media Karten und Soundblaster Live! mit ALSA (aber nicht OSS) Treibern, sowie mit DXR3/Hollywood+ MPEG Decoder Karten.

### Unterstützung für libmad

libmad ist eine Integer-MPEG-Audiodecoder-Bibliothek für mehrere Plattformen, die intern mit 24-bittigem PCM arbeitet. Sie funktioniert nicht sehr gut mit beschädigten Dateien und hat manchmal Probleme mit Sprüngen (seeks), kann aber auf Platformen ohne FPU (z.B. ARM) schneller sein als mp3lib.

Wenn libmad bei dir korrekt installiert ist, wird `./configure` dies bemerken, und Unterstützung für MPEG-Audiodecodierung via libmad wird automatisch eingebaut.

### Hardware-MPEG-Audiodecoder

Dieser Codec (ausgewählt durch `-ac hwmpa`) reicht MPEG-Audiopakete an Hardwaredecoder durch, wie sie z.B. auf voll ausgestatteten DVB-Karten und DXR2-Adaptern existieren. Es bringt nichts, ihn mit einem anderen Gerät (wie z.B. OSS und ALSA) zu verwenden - das führt lediglich zu Rauschen.

### AAC Codec

AAC (Advanced Audio Coding) ist ein Audiocodec, der vorwiegend in MOV- und MP4-Dateien vorkommt. Ein Open-Source-Decoder namens FAAD ist auf verfügbar. MPlayer enthält eine CVS Version von libfaad 2.1 beta, so dass es nicht extra installiert werden muss.

Um die externe FAAD-Bibliothek verwenden zu können (z.B. um mit gcc 3.2 compilieren zu können, der die interne Version nicht übersetzt), muss die Bibliothek von der Download Seite heruntergeladen und installiert werden. Anschließend muss die Option `--enable-faad-external` an `./configure` übergeben werden, damit die externe Bibliothek erkannt wird. Es ist lediglich erforderlich, vorher libfaad zu installieren, und zwar so:

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

Binärpakete sind auf audiocoding.com nicht erhältlich, Debian-Pakete können aber mit (apt-)get von Christian Marillat's Homepage, Mandrake/Mandriva RPMs von P.L.F und RedHat RPMs von Grey Sector heruntergeladen werden.

### AMR Codecs

Adaptive Multi-Rate Sprachcodec, wird in 3G (UMTS) Mobiltelephonen verwendet. Die Referenzimplementierung ist auf The 3rd Generation Partnership Project erhältlich (frei - wie in Freibier - für private Benutzung). Um die Unterstützung zu aktiveren, lade die Bibliotheken für AMR-NB and AMR-WB runter und installiere sie, indem du die Anweisungen auf dieser Seite befolgst. Compiliere MPlayer danach erneut.

Für Unterstützung müssen die Codecs AMR-NB und AMR-WB heruntergeladen und in dasselbe Verzeichnis wie MPlayer verschoben werden. Anschließend folgende Befehle ausführen:

    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

Befolge danach einfach das Standardvorgehen für die Compilierung von MPlayer.

## HOWTO Win32-Codecs-Importierung

### VFW-Codecs

VFW (Video for Windows) ist die alte Video-API von Windows. Deren Codecs hat die Dateinamenerweiterung `.DLL` oder (selten) `.DRV`. Wenn MPlayer bei der Wiedergabe deines AVIs fehlschlägt mit einer Meldung wie:

    UNKNOWN video codec: HFYU (0x55594648)

..bedeutet dies, dass dein AVI mit einem Codec encodiert ist, der den fourcc HFYU (HFYU = HuffYUV-Codec, DIV3 = DivX Low Motion, etc.) hat. Da du dies jetzt weißt, musst du herausfinden, welche DLL Windows lädt, um diese Datei abzuspielen. In unserem Fall enthält die `system.ini` diese Information in einer Zeile, die so aussieht:

    VIDC.HFYU=huffyuv.dll

Du benötigst also die Datei `huffyuv.dll`. Beachte, dass Audiocodecs mit dem MSACM-Präfix angegeben werden:

    msacm.l3acm=L3codeca.acm

Dies ist der MP3-Codec. Da du nun alle nötigen Informationen hast (fourcc, Codecdatei, Beispiel-AVI), gib eine Anfrage für Codecunterstützung per Mail auf, und lade diese Dateien auf den FTP-Server hoch: ftp://upload.mplayerhq.hu/MPlayer/incoming/<Codecname>/

Suche nach dieser Information unter Windows NT/2000/XP in der Registry, suche also z.B. nach "VIDC.HFYU". Um herauszufinden, wie man das macht, schaue dir die folgende Methode zu DirectShow an.

### DirectShow-Codecs

DirectShow ist die neuere Video-API, die noch schlechter ist als ihr Vorgänger. Dinge sind schwieriger geworden mit DirectShow, da

- `system.ini` nicht die benötigten Informationen enthält, die statt dessen in der Registry gespeichert ist.

- wir die GUID des Codecs benötigen.

#### Neue Methode:

Benutzung von Microsoft GraphEdit (schnell)

1. Beziehe GraphEdit entweder aus dem DirectX-SDK oder von doom9.

2. Starte `graphedit.exe`.

3. Wähle aus dem Menü Graph Insert Filters.

4. Klappe den Eintrag DirectShow Filters aus.

5. Wähle den richtigen Codecnamen und klappe den Eintrag aus.

6. Schaue im Eintrag DisplayName nach dem Text in den geschweiften Klammern hinter dem Backslash und notiere ihn (fünf mit Bindestrich getrennte Blöcke, die GUID).

7. Die Codecbinärdatei ist die Datei, die im Eintrag Filename angegeben wird.

Wenn dort kein Filename ist und DisplayName etwas wie device:dmo enthält, handelt es sich um einen DMO-Codec.

#### Alte Methode:

Nimm einen tiefen Atemzug und beginne die Suche in der Registry...

1. Starte `regedit`.

2. Drücke StrgF, deaktiviere die ersten beiden Checkboxen und aktiviere die dritte. Gib den fourcc des Codecs ein (z.B. `TM20`).

3. Du solltest ein Feld sehen, das den Pfad und den Dateinamen (z.B. `C:\WINDOWS\SYSTEM\TM20DEC.AX`) enthält.

4. Da du jetzt die Datei hast, benötigen wir die GUID. Probiere erneut die Suche, nun aber nach dem Codecnamen, nicht dem fourcc. Dessen Name kann man herausfinden, indem man während der Wiedergabe mit Media Player den Eintrag von File Properties Advanced überprüft. Wenn dies nicht klappt, hast du Pech. Versuche raten (suche z.B. nach TrueMotion).

5. Wenn die GUID gefunden wurde, solltest du das Feld FriendlyName und CLSID sehen. Notiere die 16-Byte-CLSID, das ist die GUID, die wir brauchen.

Wenn die Suche fehlschlägt, probiere die Aktivierung aller Checkboxen. Es kann sein, dass du falsche Treffer erhältst, aber vielleicht hast du Glück...

Da du nun alle nötigen Informationen hast (fourcc, Codecdatei, Beispiel-AVI), gib eine Anfrage für Codecunterstützung per Mail auf, und lade diese Dateien auf den FTP-Server hoch: ftp://upload.mplayerhq.hu/MPlayer/incoming/>Codecname>/

Wenn du einen Codec selbst hinzufügen möchtest, lies DOCS/tech/codecs.conf.txt.