MPlayer - Movie Player

http://www.mplayerhq.hu

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.


Wie diese Dokumentation gelesen werden soll
1. Einführung
2. Installation
2.1. Softwareanforderungen
2.2. Features
2.3. Was ist mit der GUI?
2.4. Schriften und OSD
2.4.1. TrueType-Schriften
2.4.2. Bitmap-Schriften
2.4.3. OSD-Menü
2.5. Codec Installation
2.5.1. Xvid
2.5.2. x264
2.5.3. AMR Codecs
2.6. RTC
3. Gebrauch
3.1. Kommandozeile
3.2. Untertitel und OSD
3.3. Steuerung/Kontrolle
3.3.1. Steuerungskonfiguration
3.3.2. Steuerung mit LIRC
3.3.3. Slave-Modus
3.4. Streaming vom Netzwerk oder Pipes
3.4.1. Gestreamte Inhalte speichern
3.5. CD/DVD-Laufwerke
3.5.1. Linux
3.5.2. FreeBSD
3.6. DVD-Wiedergabe
3.7. VCD-Wiedergabe
3.8. Edit Decision Lists (EDL)
3.8.1. Benutzung einer EDL-Datei
3.8.2. Erstellung einer EDL-Datei
3.9. Audio für Fortgeschrittene
3.9.1. Surround/Multichannel-Wiedergabe
3.9.1.1. DVDs
3.9.1.2. Stereo-Dateien auf vier Lautsprechern wiedergeben
3.9.1.3. AC3/DTS-Passthrough
3.9.1.4. MPEG-Audio-Passthrough
3.9.1.5. Matrix-encodierter Ton
3.9.1.6. Surround-Emulation bei Kopfhörern
3.9.1.7. Troubleshooting/Problemlösung
3.9.2. Kanalmanipulationen
3.9.2.1. Allgemeine Informationen
3.9.2.2. Mono-Wiedergabe mit zwei Lautsprechern
3.9.2.3. Kopieren/Verschieben von Kanälen
3.9.2.4. Kanäle mixen
3.9.3. Anpassung der softwaregesteuerten Lautstärke
3.10. TV-Input
3.10.1. Compilierung
3.10.2. Tipps zum Gebrauch
3.10.3. Beispiele
3.11. Videotext
3.11.1. Anmerkungen zur Implementierung
3.11.2. Videotext verwenden
3.12. Radio
3.12.1. Radio Input
3.12.1.1. Kompilierung
3.12.1.2. Tips zum Gebrauch
3.12.1.3. Beispiele
4. Videoausgabegeräte
4.1. MTRR einrichten
4.2. Xv
4.2.1. 3dfx-Karten
4.2.2. S3-Karten
4.2.3. nVidia-Karten
4.2.4. ATI-Karten
4.2.5. NeoMagic-Karten
4.2.6. Trident-Karten
4.2.7. Kyro/PowerVR-Karten
4.3. DGA
4.4. SDL
4.5. SVGAlib
4.6. Framebuffer-Ausgabe (FBdev)
4.7. Matrox-Framebuffer (mga_vid)
4.8. 3dfx-YUV-Unterstützung (tdfxfb)
4.9. tdfx_vid
4.10. OpenGL-Ausgabe
4.11. AAlib - Ausgabe im Textmodus
4.12. libcaca - Color ASCII Art-Bibliothek
4.13. VESA-Ausgabe über das VESA-BIOS
4.14. X11
4.15. VIDIX
4.15.1. ATI-Karten
4.15.2. Matrox-Karten
4.15.3. Trident-Karten
4.15.4. 3DLabs-Karten
4.15.5. nVidia-Karten
4.15.6. SiS-Karten
4.16. DirectFB
4.17. DirectFB/Matrox (dfbmga)
4.18. MPEG-Dekoderkarten
4.18.1. DVB-Output und -Input
4.18.2. DXR2
4.18.3. DXR3/Hollywood+
4.19. Andere Visualisierungshardware
4.19.1. Zr
4.19.2. Blinkenlights
4.20. Unterstützung für die TV-Ausgabe
4.20.1. Matrox G400-Karten
4.20.2. Matrox G450/G550-Karten
4.20.3. ATI-Karten
4.20.4. nVidia
4.20.5. NeoMagic
5. Portierungen
5.1. Linux
5.1.1. Debian-Packaging
5.1.2. RPM-Packaging
5.1.3. ARM
5.2. *BSD
5.2.1. FreeBSD
5.2.2. OpenBSD
5.2.3. Darwin
5.3. Kommerzielles Unix
5.3.1. Solaris
5.3.2. HP-UX
5.3.3. AIX
5.3.4. QNX
5.4. Windows
5.4.1. Cygwin
5.4.2. MinGW
5.5. Mac OS
5.5.1. MPlayer OS X GUI
6. Allgemeiner Gebrauch von MEncoder
6.1. Auswahl der Codecs und Containerformate
6.2. Auswahl von Eingabedatei oder -gerät
6.3. Encodieren ins Sony PSP Video Format
6.4. Encodieren von 2-pass-MPEG4 ("DivX")
6.5. Encodieren ins MPEG-Format
6.6. Reskalierung von Filmen
6.7. Kopieren von Streams
6.8. Encodieren von mehreren Input-Bilddateien (JPEG, PNG, TGA, etc.)
6.9. Extrahieren von DVD-Untertiteln in eine VOBsub-Datei
6.10. Beibehalten des Seitenverhältnisses
7. Encodieren mit MEncoder
7.1. Erzeugen eines hochwertigen MPEG-4-Rips ("DivX") eines DVD-Films
7.1.1. Vorbereitung aufs Encodieren: Identifiziere Quellmaterial und Framerate
7.1.1.1. Identifizieren der Quellframerate
7.1.1.2. Identifizieren des Quellmaterials
7.1.2. Konstanter Quantisierungsparameter vs. Multipass
7.1.3. Randbedingungen für effizientes Encodieren
7.1.4. Abschneiden und Skalieren
7.1.5. Auswahl von Auflösung und Bitrate
7.1.5.1. Berechnen der Auflösung
7.1.6. Filtern
7.1.7. Interlacing und Telecine
7.1.8. Interlaced Video encodieren
7.1.9. Anmerkungen zur Audio-/Videosynchronisation
7.1.10. Auswahl des Videocodecs
7.1.11. Audio
7.1.12. Muxen
7.1.12.1. Verbessern der Mux- und A/V-Synchronisationszuverlässigkeit
7.1.12.2. Limitierungen des AVI-Containers
7.1.12.3. Muxen in den Matroska-Container
7.2. Wie mit telecine und interlacing in NTSC-DVDs umgehen
7.2.1. Einführung
7.2.2. Wie kann man sagen, welchen Typ Video man hat
7.2.2.1. Progressiv
7.2.2.2. Telecined
7.2.2.3. Interlaced
7.2.2.4. Gemischtes progressive und telecine
7.2.2.5. Gemischtes progressive und interlaced
7.2.3. Wie jede Kategorie encodieren
7.2.3.1. Progressive
7.2.3.2. Telecined
7.2.3.3. Interlaced
7.2.3.4. Gemischtes progressive und telecine
7.2.3.5. Gemischtes progressive und interlaced
7.2.4. Fußnoten
7.3. Encodieren mit der libavcodec Codecfamilie
7.3.1. Videocodecs von libavcodec
7.3.2. Audiocodecs von libavcodec
7.3.2.1. PCM/ADPCM-Format, begleitende Tabelle
7.3.3. Encodieroptionen von libavcodec
7.3.4. Beispiele für Encodierungseinstellungen
7.3.5. Maßgeschneiderte inter/intra-Matrizen
7.3.6. Beispiel
7.4. Encodieren mit dem Xvid-Codec
7.4.1. Welche Optionen sollte ich verwenden, um die besten Resultate zu erzielen?
7.4.2. Encodieroptionen von Xvid
7.4.3. Encodierung Profile
7.4.4. Encodierungseinstellungen Beispiele
7.5. Encodieren mit dem x264-Codec
7.5.1. Encodieroptionen von x264
7.5.1.1. Einführung
7.5.1.2. Optionen, die primär Geschwindigkeit und Qualität betreffen
7.5.1.3. Diverse Eigenschaften betreffende Optionen
7.5.2. Beispiele für Encodieroptionen
7.6. Encodieren mit der Video for Windows Codecfamilie
7.6.1. Von Video for Windows unterstützte Codecs
7.6.2. Benutzung von vfw2menc, um eine Datei für Codeceinstellungen zu erzeugen
7.7. MEncoder benutzen, um QuickTime-kompatible Dateien zu erstellen
7.7.1. Warum sollte jemand QuickTime-kompatible Dateien erstellen wollen?
7.7.2. Beschränkungen von QuickTime 7
7.7.3. Beschneidung der Ränder (Cropping)
7.7.4. Skalierung
7.7.5. A/V-Synchronisation
7.7.6. Bitrate
7.7.7. Encoding-Beispiel
7.7.8. Remuxen zu MP4
7.7.9. Metadata-Tags hinzufügen
7.8. Verwendung von MEncoder zum Erzeugen VCD/SVCD/DVD-konformer Dateien.
7.8.1. Formatbeschränkungen
7.8.1.1. Formatbeschränkungen
7.8.1.2. GOP-Größenbeschränkungen
7.8.1.3. Bitraten-Beschränkungen
7.8.2. Output-Optionen
7.8.2.1. Seitenverhältnis
7.8.2.2. Aufrechterhalten der A/V-Synchronisation
7.8.2.3. Sampleraten-Konvertierung
7.8.3. Verwenden des libavcodec zur VCD/SVCD/DVD-Encodierung
7.8.3.1. Einführung
7.8.3.2. lavcopts
7.8.3.3. Beispiele
7.8.3.4. Erweiterte Optionen
7.8.4. Encodieren von Audio
7.8.4.1. toolame
7.8.4.2. twolame
7.8.4.3. libavcodec
7.8.5. Zusammenfassung
7.8.5.1. PAL DVD
7.8.5.2. NTSC DVD
7.8.5.3. PAL AVI mit enthaltenem AC3 Audio nach DVD
7.8.5.4. NTSC AVI mit AC3-Ton nach DVD
7.8.5.5. PAL SVCD
7.8.5.6. NTSC SVCD
7.8.5.7. PAL VCD
7.8.5.8. NTSC VCD
8. Häufig gestellte Fragen
A. Wie Fehler (Bugs) berichtet werden
A.1. Berichte sicherheitsrelevante Fehler
A.2. Wie Fehler beseitigt werden
A.3. Wie Regressionstests mit Subversion durchgeführt werden
A.4. Wie Fehler berichtet werden
A.5. Wo Fehler berichtet werden sollen
A.6. Was berichtet werden soll
A.6.1. Systeminformationen
A.6.2. Hardware und Treiber
A.6.3. Configure-Probleme
A.6.4. Compilierungsprobleme
A.6.5. Wiedergabeprobleme
A.6.6. Abstürze
A.6.6.1. Wie man Informationen eines reproduzierbaren Absturzes erhält
A.6.6.2. Wie man aussagekräftige Informationen aus einem Core-Dump extrahiert
A.7. Ich weiß, was ich tue...
B. MPlayers Skinformat
B.1. Überblick
B.1.1. Verzeichnisse
B.1.2. Bildformate
B.1.3. Skin-Komponenten
B.1.4. Dateien
B.2. Die skin-Datei
B.2.1. Hauptfenster und Abspielleiste
B.2.2. Videofenster
B.2.3. Skin-Menü
B.3. Schriften
B.3.1. Symbole
B.4. GUI-Nachrichten
B.5. Erstellen von qualitativen Skins

Wie diese Dokumentation gelesen werden soll

Wenn du zum ersten Mal installierst: Lies in jedem Fall alles von hier bis zum Ende des Installationsabschnitts, und folge den Links, die du findest. Wenn Fragen bleiben, gehe zurück zum Inhaltsverzeichnis und suche nach dem Thema, lies die FAQ oder versuche, die Dateien zu greppen. Die meisten Fragen sollten irgendwo hier beantwortet werden, und nach dem Rest wurde vermutlich auf den Mailing-Listen gefragt.

Kapitel 1. Einführung

MPlayer ist ein Movie-Player für Linux (der auch auf vielen anderen Unices und nicht-x86-Architekturen läuft, siehe Ports). Er spielt die meisten Dateien in den Formaten MPEG, VOB, AVI, OGG/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4, FLI, RM, NuppelVideo, yuv4mpeg, FILM, RoQ, PVA, Matroska-Dateien, unterstützt von vielen eingebauten, XAnim-, RealPlayer und Win32-DLL-Codecs. Es können auch VideoCDs, SVCDs, DVDs, 3ivx-, RealMedia-, Sorenson-, Theora- und MPEG-4 (DivX) - Filme angeschaut werden. Ein weiteres großes Feature von MPlayer ist die Fülle an unterstützten Ausgabetreibern. Er funktioniert mit X11, Xv, DGA, OpenGL, SVGAlib, fb-dev, AAlib, libcaca und DirectFB, du kannst ihn aber auch mit GGI und SDL (und damit allen von SDL unterstützen Treibern), sowie mit einigen kartenspezifischen Low-Level-Treibern (für Matrox, 3Dfx und Radeon, Mach64, Permedia3) benutzen! Die meisten von ihnen unterstützen Software- oder Hardwareskalierung, so dass die Vollbildwiedergabe kein Problem ist. MPlayer unterstützt die Wiedergabe mittels einiger Hardware-MPEG-Decoderkarten wie der DVB, DXR2 und DXR3/Hollywood+ benutzen. Und was ist mit diesen schönen, großen, kantengeglätteten und schattierten Untertiteln (14 unterstützte Typen) mit Europäischen/ISO 8859-1,2 (Ungarisch, Englisch, Tschechisch usw.), Kryllisch und Koreanische Schriftarten, und On-Screen-Display (OSD)?

Der Player ist superstabil bei der Wiedergabe von beschädigten MPEG-Dateien (nützlich für manche VCDs) und spielt schlechte AVI-Dateien ab, die mit dem berühmten Windows Media Player nicht abgespielt werden können. Selbst AVI-Dateien ohne Index-Abschnitt sind abspielbar, und du kannst den Index mit der Option -idx temporär neu generieren, oder permanent mit MEncoder, was Spulen ermöglicht! Wie du siehst, sind Stabilität und Qualität die wichtigsten Dinge, die Geschwindigkeit ist jedoch auch erstaunlich. Es gibt außerdem ein mächtiges Filtersystem für die Manipulation von Video und Ton.

MEncoder (MPlayers Movie Encoder) ist ein einfacher Film-Encoder, der so ausgelegt ist, von MPlayer-abspielbaren Formaten (AVI/ASF/OGG/DVD/VCD/VOB/MPG/MOV/VIV/FLI/RM/NUV/NET/PVA) in andere MPlayer-abspielbare Formate (siehe unten) zu encodieren. Er kann mit verschiedenen Codecs encodieren, zum Beispiel MPEG-4 (DivX4) (ein oder zwei Durchläufe), libavcodec, und PCM/MP3/VBR MP3-Audio.

MEncoder Features

  • Encodierung zu der weitreichenden Menge Dateiformate und Decoder von MPlayer

  • Encodierung zu allen Codecs von FFmpegs libavcodec

  • Videoencodierung von V4L-kompatiblen TV-Empfängern

  • Encodierung/Multiplexing von interleaved AVI-Dateien mit ordentlichem Index

  • Erstellung von Dateien aus externen Audiostreams

  • Encodierung in 1, 2 oder 3 Durchläufen

  • VBR-MP3-Audio

    Wichtig

    VBR-MP3-Audio wird von Windows-Playern nicht immer sauber wiedergegeben!

  • PCM-Audio

  • Streamkopien

  • Input-A/V-Synchronisation (PTS-basiert, kann mit der Option -mc 0 deaktiviert werden)

  • fps-Korrektur mit der Option -ofps (nützlich bei Encodierung von 30000/1001 fps VOB zu 24000/1001 fps AVI)

  • Benutzung unseres sehr mächtigen Filtersystems (abschneiden, expandieren, spiegeln, nachbearbeiten, rotieren, skalieren, rgb/yuv-Konvertierung)

  • Kann DVD/VOBsub- UND Textuntertitel in die Ausgabedatei encodieren

  • Kann DVD-Untertitel in das VOBsub-Format rippen

Geplante Features

  • Noch breiteres Feld an verfügbaren En-/Decodierungsformaten/-codecs (erstellen von VOB-Dateien mit DivX4/Indeo5/VIVO-Streams :).

MPlayer und MEncoder können weitergegeben werden unter den Bedingungen der GNU General Public License Version 2.

Kapitel 2. Installation

Eine Anleitung für eine schnelle Installation steht in der Datei README. Bitte lies diese zuerst und komm erst dann für den Rest der mörderischen Details zurück.

In diesem Abschnitt wirst du durch den Vorgang des Compilierens und Konfigurierens von MPlayer geleitet. Es ist nicht leicht, muss aber nicht unbedingt schwierig sein. Wenn du Erfahrungen machst anders als das hier beschriebene, durchsuche bitte die Dokumentation, und du wirst deine Antworten finden.

Du brauchst ein ziemlich aktuelles System. Unter Linux werden die Kernel der Version 2.4.x empfohlen.

2.1. Softwareanforderungen

  • binutils - empfohlene Version ist 2.11.x.

  • gcc - empfohlene Versionen sind 2.95 und 3.4+. 2.96 und 3.0.x generieren bekannterweise fehlerhaften Code, 3.1 und 3.2 hatten auch Probleme, 3.3 ein paar kleinere. Benutze auf PowerPC-Architektur 4.x+.

  • Xorg/XFree86 - empfohlene Version ist 4.3 oder neuer. Stelle auch sicher, dass die Entwicklerpakete installiert ist, sonst wird es nicht funktionieren. Du brauchst X nicht zwangsläufig, manche Videoausgabetreiber funktionieren auch ohne.

  • make - empfohlene Version ist 3.79.x oder neuer. Um die XML-Dokumentation zu erstellen, benötigst du 3.80.

  • FreeType - Version 2.0.9 oder neuer wird benötigt, um Schriften für OSD und Untertitel zu erhalten.

  • ALSA - optional, für Unterstützung der Audioausgabe mit ALSA. Version 0.9.0rc4 ist mindestens erforderlich.

  • libjpeg - benötigt für den optionalen JPEG-Videoausgabetreiber

  • libpng benötigt für den optionalen PNG-Videoausgabetreiber

  • directfb - optional, verwende 0.9.13 oder neuer, benötigt für den directfb-Videoausgabetreiber

  • lame - 3.90 oder neuer wird empfohlen, erforderlich für die Audioencodierung mit MEncoder.

  • zlib - empfohlen, benötigt für die Unterstützung komprimierter MOV-Header und PNG.

  • LIVE555 Streaming Media - optional, benötigt für die Wiedergabe mancher RTSP/RTP-Streams.

  • cdparanoia - optional, für CDDA-Unterstützung

  • libxmms - optional, für Unterstützung des XMMS-Input-Plugins. Version 1.2.7 ist mindestens erforderlich.

  • libsmb - optional, für SMB-Netzwerkunterstützung

2.2. Features

  • Entscheide, ob du eine GUI benötigst. Ist dies der Fall, schau in Abschnitt GUI, bevor du compilierst.

  • Wenn Du MEncoder (unseren super Allzweck-Encoder) installieren möchtest, siehe Abschnitt MEncoder.

  • Wenn du eine V4L-kompatible TV-Tuner-Karte hast und Filme mit MPlayer anschauen/grabben und encodieren möchtest, lies den Abschnitt TV-Input.

  • Wenn du eine V4L-kompatible Radioempfängerkarte hast und mit MPlayer Radio hören oder aufnehmen möchtest, lies den Abschnitt radio.

  • Es gibt Unterstützung für ein schickes OSD-Menü, das benutzt werden kann. Siehe Abschnitt OSD-Menü.

Baue dann MPlayer:

./configure
make
make install

Zu diesem Zeitpunkt ist MPlayer benutzbar. Überprüfe, ob du eine Datei namens codecs.conf in deinem Benutzerverzeichnis unter (~/.mplayer/codecs.conf) von alten MPlayer-Versionen hast. Wenn du einer findest, entferne sie.

Beachte, dass die eingebaute und vom System bereitgestellte codecs.conf ignoriert wird, wenn du eine codecs.conf im Verzeichnis ~/.mplayer/, hast. Benutze diese nicht, wenn du nicht an den Interna von MPlayer herumbasteln möchtest, da dies viele Probleme hervorrufen kann. Wenn du die Reihenfolge der Suche nach Codecs ändern möchtest, benutze die Optionen -vc, -ac, -vfm, oder -afm auf der Kommandozeile oder in deiner Konfigurationsdatei (siehe Manpage).

Debian-Nutzer können ihr eigenes .deb-Paket bauen, das ist sehr leicht. Führe nur

fakeroot debian/rules binary

in MPlayers Wurzelverzeichnis aus. Siehe Debian-Packaging für detaillierte Informationen.

Überprüfe immer die Ausgabe von ./configure und die Datei config.log, sie enthalten Informationen darüber, was eingebaut wird und was nicht. Du möchtest dir vielleicht auch die Dateien config.h und config.mak anschauen. Wenn du manche Bibliotheken installiert hast, die von ./configure aber nicht erkannt werden, überprüfe auch die entsprechenden Header-Dateien (normalerweise die -dev-Pakete) und ob deren Versionen passen. Die Datei config.log gibt normalerweise Auskunft darüber, was fehlt.

Obwohl sie nicht notwendig sind, sollten die Fonts installiert werden, um die Funktionalität von OSD- und Untertiteldarstellung nutzen zu können. Die empfohlene Methode dazu ist, eine TTF-Fontdatei zu installieren und MPlayer anzuweisen, diese zu benutzen. Siehe Abschnitt Untertitel und OSD für Details.

2.3. Was ist mit der GUI?

Die GUI benötigt GTK 1.2.x oder GTK 2.0 (sie ist nicht vollständig GTK, aber die Panels). Die Skins werden im PNG-Format gespeichert, daher müssen GTK, libpng (und deren Entwicklungskram, normalerweise gtk-dev genannt), installiert sein. Du kannst die GUI durch Angabe von --enable-gui während ./configure aktivieren. Dann musst du, um den GUI-Modus zu aktivieren, die Binärdatei gmplayer starten.

Um die GUI auf komfortable Weise und wie vorgesehen zu benutzen, solltest du unbedingt ein Skin installieren. Siehe dazu Skins auf der Download-Seite. Ein Skin sollte in das normale systemweite Verzeichnis $PREFIX/share/mplayer/skins oder in das benutzerspezifische $HOME/.mplayer/skins installiert werden und liegt dann dort als Unterverzeichnis. MPlayer sucht standardmäßig zuerst in dem benutzerspezifischen und dann in dem systemweiten Verzeichnis nach einem Unterverzeichnis mit dem Namen default (das einfach ein Link auf das Lieblingsskin sein kann), um das Skin zu laden. Du kannst aber auch die Option -skin meinskin oder die Konfigurationsdateianweisungen skin=meinskin oder gui_skin=meinskin oder aber den Skinbrowser benutzen, um ein anderes Skin aus den skins-Verzeichnissen zu verwenden.

2.4. Schriften und OSD

Du musst MPlayer mitteilen, welche Schriftart verwendet werden soll, um in den Genuß von OSD und Untertiteln zu kommen. Jede TrueType-Schriftart oder spezielle Bitmap-Schriftarten werden funktionieren. TrueType-Schriftarten werden jedoch empfohlen, da sie weit besser aussehen, entsprechend der Filmgröße skaliert werden können und mit verschiedenen Zeichensätzen besser umgehen.

2.4.1. TrueType-Schriften

Es gibt zwei Möglichkeiten, TrueType-Schriften ans Laufen zu bekommen. Die erste besteht darin, die Option -font auf der Kommandozeile anzugeben. Diese Option ist vermutlich ein guter Kandidat für die Aufnahme in deine Konfigurationsdatei (siehe Manpage für Details). Die zweite besteht darin, einen subfont.ttf genannten Symlink zu der Schriftart deiner Wahl zu erstellen. Führe entweder

ln -s /Pfad/zur/Schrift.ttf ~/.mplayer/subfont.ttf

für jeden User durch, oder erstelle einen systemweiten Symlink:

ln -s /Pfad/zur/Schrift.ttf $PREFIX/share/mplayer/subfont.ttf

Wenn MPlayer mit fontconfig-Unterstützung compiliert wurde, werden die oben genannten Methoden nicht funktionieren; statt dessen erwartet -font einen fontconfig-Schriftnamen, der Standard ist die Schriftart Sans-serif. Beispiel:

mplayer -font 'Bitstream Vera Sans' anime.mkv

Um eine Liste der fontconfig bekannten Dateien zu erhalten, benutze fc-list.

2.4.2. Bitmap-Schriften

Wenn du aus einem bestimmten Grund Bitmap-Schriftwarten verwenden möchtest, lade dir einen Satz von unserer Homepage herunter. Du kannst zwischen verschiedenen ISO-Schriftarten und ein paar Sätzen von Schriftarten, die von Benutzern beigetragen wurden, in verschiedenen Zeichensätzen wählen.

Entpacke die Datei, die du heruntergeladen hast nach ~/.mplayer oder $PREFIX/share/mplayer. Benenne dann eins der extrahierten Verzeichnisse um zu font, oder erstelle einen Symlink dorthin, zum Beispiel:

ln -s ~/.mplayer/arial-24 ~/.mplayer/font

ln -s $PREFIX/share/mplayer/arial-24 $PREFIX/share/mplayer/font

Schriftarten sollten eine entsprechende font.desc-Datei haben, die Positionen von Unicode-Schriften auf die aktuelle Codeseite des Untertiteltexts abbildet. Eine andere Möglichkeit besteht darin, in UTF-8 codierte Untertitel zu verwenden und die Option -utf8 zu verwenden. Noch eine Möglichkeit besteht darin, der Untertiteldatei den gleichen Namen zu geben wie die Videodatei mit der Dateiendung <video_name>.utf und sie im selben Verzeichnis wie die Videodatei abzulegen.

2.4.3. OSD-Menü

MPlayer hat eine komplett benutzerdefinierbare OSD-Menü-Schnittstelle.

Anmerkung

Das Menü Einstellungen ist momentan NICHT IMPLEMENTIERT!

Installation

  1. compiliere MPlayer mit Übergabe von --enable-menu an ./configure

  2. stelle sicher, dass du ein OSD-Font installiert hast

  3. kopiere etc/menu.conf in dein .mplayer-Verzeichnis

  4. kopiere etc/input.conf in dein .mplayer-Verzeichnis oder in das systemweite MPlayer-Konfigurationsverzeichnis (Standard: /usr/local/etc/mplayer)

  5. überprüfe und editiere input.conf, um Menüsteuerungstasten zu aktivieren (das ist dort beschrieben).

  6. starte MPlayer mit folgendem Beispiel:

    mplayer -menu datei.avi

  7. drücke irgendeine von dir definierte Menütaste

2.5. Codec Installation

2.5.1. Xvid

Xvid ist ein freier MPEG-4 ASP konformer Videocodec. 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:[email protected]:/xvid login

  2. cvs -z3 -d:pserver:[email protected]:/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

2.5.2. x264

x264 ist eine Bibliothek für die Erstellung von H.264-Videostreams. MPlayer Sourcen werden auf den neuesten Stand gebracht wenn es an x264 API Veränderungen gibt. Deswegen wird empfohlen MPlayer aus dem Subversion zu benutzen.

Wenn du GIT installiert hast, können die aktuellen x264 Sourcen mit dem folgen Befehl besorgt werden:

git clone git://git.videolan.org/x264.git

Bau und installier dann nach der Standardformel:

./configure && make && make install

Jetzt nochmal ./configure ausführen, damit MPlayer die Unterstützung für x264 aktiviert.

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

2.6. RTC

Es gibt drei Zeitgebermethoden in MPlayer.

  • Um die alte Methode zu verwenden, musst du gar nichts machen. Diese benutzt usleep(), um A/V-Synchronisation abzustimmen, mit +/- 10ms Genauigkeit. Trotzdem muss manchmal die Synchronisation noch feiner abgestimmt werden.

  • Der neue Zeitgeber-Code benutzt RTC (RealTime Clock, Echtzeituhr) für diese Aufgabe, da dieser präzise 1ms-Timer besitzt. Die Option -rtc aktivert diesen, es ist jedoch ein hierfür speziell konfigurierter Kernel erforderlich. Wenn du Kernel 2.4.19pre8 oder neuer laufen hast, kannst du die maximale RTC-Frequenz für normale Benutzer durch das /proc-Dateisystem festlegen. Benutze einen der folgenden Befehle, um RTC für normale Benutzer zu aktivieren:

    echo 1024 > /proc/sys/dev/rtc/max-user-freq

    sysctl dev/rtc/max-user-freq=1024

    Die kannst diese Einstellung permanent machen, indem du letzteren Befehl der Datei /etc/sysctl.conf hinzufügst.

    Du kannst die Effizienz des neuen Zeitgebers in der Statuszeile sehen. Die Power Management-Funktionen der BIOSse mancher Notebooks mit speedstep-CPUs vertragen sich nicht gut mit RTC. Audio und Video könnten Synchronisation verlieren. Die externe Stromversorgung anzuschließen, bevor du dein Notebook einschaltest, scheint zu helfen. Bei manchen Hardwarekombinationen (bestätigt während des Gebrauchs eines Nicht-DMA-DVD-Laufwerks auf einem ALi1541-Board) führt der Gebrauch des RTC-Zeitgebers zu sprunghafter Wiedergabe. Es wird empfohlen, in solchen Fällen die dritte Methode zu verwenden.

  • Der Code des dritten Zeitgebers wird mit der Option -softsleep aktiviert. Der hat die Effizienz von RTC, benutzt RTC aber nicht. Auf der anderen Seite benötigt er mehr CPU.

Kapitel 3. Gebrauch

3.1. Kommandozeile

MPlayer verwendet einen komplexen Wiedergabebaum. Er besteht aus globalen Optionen, die zuerst geschrieben werden, zum Beispiel

mplayer -vfm 5

und Optionen, die hinter den Dateinamen geschrieben werden und die sich nur auf die angegebene Datei/URL/sonstwas beziehen, zum Beispiel:

mplayer -vfm 5 movie1.avi movie2.avi -vfm 4

Du kannst Dateinamen/URLs mit { und } gruppieren. Dies ist nützlich mit der Option -loop:

mplayer { 1.avi -loop 2 2.avi } -loop 3

Der obige Befehl wird die Dateien in folgender Reihenfolge abspielen: 1, 1, 2, 1, 1, 2, 1, 1, 2.

Datei abspielen:

 mplayer [Optionen] [Pfad/]dateiname

Eine andere Möglichkeit, eine Datei abzuspielen:

 mplayer [Optionen] file:///uri-escaped-Pfad 

Mehrere Dateien abspielen:

 mplayer [Standardoptionen] [Pfad/]dateiname1 [Optionen für dateiname1] dateiname2 [Optionen für dateiname2] ... 

VCD abspielen:

 mplayer [Optionen] vcd://tracknr [-cdrom-device /dev/cdrom]

DVD abspielen:

 mplayer [Optionen] dvd://titlenr [-dvd-device /dev/dvd]

Vom WWW abspielen:

mplayer [Optionen] http://site.com/datei.asf

(es können auch Playlists benutzt werden)

Von RTSP abspielen:

 mplayer [Optionen] rtsp://server.example.com/streamName

Beispiele:

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. Untertitel und OSD

MPlayer kann Untertitel bei Filmen darstellen. Momentan werden die folgenden Formate unterstützt:

  • VOBsub

  • OGM

  • CC (closed caption)

  • MicroDVD

  • SubRip

  • SubViewer

  • Sami

  • VPlayer

  • RT

  • SSA

  • PJS (Phoenix Japanimation Society)

  • MPsub

  • AQTitle

  • JACOsub

MPlayer kann (außer den ersten drei) die oben gelisteten Zielformate ausgeben (speichern), und zwar mit folgenden Optionen:

  • MPsub: -dumpmpsub

  • SubRip: -dumpsrtsub

  • MicroDVD: -dumpmicrodvdsub

  • JACOsub: -dumpjacosub

  • Sami: -dumpsami

MEncoder kann DVD-Untertitel im VOBsub-Format ausgeben.

Die Kommandozeilenoptionen unterscheiden sich leicht von den anderen Formaten:

VOBsub-Untertitel.  VOBsub-Untertitel bestehen aus einer (ein paar Megabyte) großen .SUB Datei, und optional .IDX- und/oder .IFO-Dateien. Wenn du Dateien hast wie beispiel.sub, beispiel.ifo (optional), oder beispiel.idx, musst du MPlayer die Optionen -vobsub beispiel [-vobsubid id] übergeben (vollständige Pfadangabe optional). Die Option -vobsubid verhält sich wie die Option -sid für DVDs, du kannst damit Tracks (Sprachen) wählen. Im Falle, dass -vobsubid nicht angegeben wird, wird MPlayer versuchen, auf die Sprachen zurückzugreifen, die mit der Option -slang angegeben werden, und sonst auf langidx zurückzugreifen, um die Untertitelsprache zu wählen. Schlägt dies fehl, wird es keine Untertitel geben.

Andere Untertitel.  Die anderen Formate bestehen aus einer Textdatei, die Zeit-, Platzierungs- und Textinformationen enthält. Gebrauch: Wenn du eine Datei wie beispiel.txt hast, musst du die Option -sub beispiel.txt (vollständiger Pfad optional) angeben.

Untertitel-Timing und Platzierung angeben:

-subdelay sek

Verzögert Untertitel um sek Sekunden. Kann negativ sein. Dieser Wert wird zum Zeitpositionszähler hinzuaddiert.

-subfps RATE

Gibt die Frame/sek-Rate der Untertiteldatei (Fließkommazahl) an.

-subpos 0-100

Gibt die Position der Untertitel an.

Wenn du bei Benutzung einer MicroDVD-Untertiteldatei eine zunehmende Verzögerung zwischen Film und Untertiteln feststellst, ist vermutlich die Framerate des Films und die der Untertiteldatei unterschiedlich. Beachte bitte, dass das MicroDVD-Untertitelformat absolute Framenummern nutzt. Daher sollte die Option -subfps bei diesem Format verwendet werden. Wenn du dieses Problem auf Dauer beheben willst, musst du die Framerate manuell konvertieren. MPlayer kann diese Konvertierung für dich übernehmen:

mplayer -dumpmicrodvdsub -fps untertitel_fps -subfps avi_fps -sub untertitel_dateiname dummy.avi

Ausführungen über DVD-Untertitel findest du im Abschnitt DVD.

3.3. Steuerung/Kontrolle

MPlayer hat einen vollständig konfigurierbaren, befehlgesteuerten Steuerungslayer, der dir ermöglicht, MPlayer mit der Tastatur, der Maus, einem Joystick oder einer Fernbedienung (durch Gebrauch von LIRC) zu kontrollieren. Siehe Manpage für die komplette Liste der Tastatursteuerungen.

3.3.1. Steuerungskonfiguration

MPlayer erlaubt dir durch eine einfache Konfigurationsdatei, jede Taste an jeden beliebigen MPlayer-Befehl zu binden. Die Syntax besteht aus einem Tastennamen gefolgt von einem Befehl. Die Standardkonfigurationsdatei ist $HOME/.mplayer/input.conf, dies kann jedoch mit der Option-input conf überschrieben werden (relative Pfade sind relativ zu $HOME/.mplayer).

Du erhältst eine vollständige Liste der unterstützten Tastennamen, indem du den Befehl mplayer -input keylist ausführst, eine vollständige Liste der verfügbaren Befehle mit mplayer -input cmdlist.

Beispiel 3.1. Eine Beispiel-Input-Steuerungsdatei

##
## MPlayer input control file
##

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. Steuerung mit LIRC

Linux Infrared Remote Control - benutze einen einfach zu erstellenden, selbstgemachten IR-Empfänger, eine (fast) veraltete Fernbedienung und steuere deine Linuxkiste damit! Mehr darüber auf der LIRC Homepage.

Wenn du das LIRC-Paket installiert hast, wird configure dies automatisch erkennen. Wenn alles gut lief, wird MPlayer beim Start "Initialisiere LIRC-Unterstützung..." ausgeben. Wenn ein Fehler auftritt, wird er dir das sagen. Wenn keine Mitteilung über LIRC erscheint, ist die entsprechende Unterstützung nicht eincompiliert. Das ist es schon :-)

Der Anwendungsname für MPlayer ist - Überraschung - mplayer. Du kannst jeden MPlayer-Befehl verwenden und sogar mehrere Befehle übergeben, indem du sie mit \n trennst. Vergiss nicht, das repeat-Flag in .lircrc zu setzen, wenn es Sinn macht (spulen, Lautstärke, etc). Hier ist ein Auszug einer Beispieldatei .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

Wenn du die Standardposition für die LIRC-Konfigurationsdatei (~/.lircrc) nicht magst, benutze die Option -lircconf Dateiname, um eine andere Datei anzugeben.

3.3.3. Slave-Modus

Der Slave-Modus erlaubt dir, einfache Frontends für MPlayer zu erstellen. Wenn dieser mit der Option -slave gestartet wird, wird MPlayer durch Zeilenumsprünge (\n) getrennte Befehle von der Standardeingabe lesen. Die Befehle sind in der Datei slave.txt dokumentiert.

3.4. Streaming vom Netzwerk oder Pipes

MPlayer kann Dateien aus dem Netzwerk abspielen, mit Gebrauch der Protokolle HTTP, FTP, MMS oder RTSP/RTP.

Die Wiedergabe funktioniert durch einfache Übergabe der URL auf der Kommandozeile. MPlayer berücksichtigt die http_proxy-Umgebungsvariable und benutzt einen Proxy, wenn verfügbar. Proxies können auch erzwungen werden:

mplayer http_proxy://proxy.micorsops.com:3128/http://micorsops.com:80/stream.asf

MPlayer kann von der Standardeingabe lesen (keine named Pipes). Dies kann beispielsweise benutzt werden, um direkt von FTP abzuspielen:

wget ftp://micorsops.com/something.avi -O - | mplayer -

Anmerkung

Es wird auch empfohlen, bei der Wiedergabe vom Netzwerk -cache zu aktivieren:

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

3.4.1. Gestreamte Inhalte speichern

Wenn du MPlayer ersteinmal erfolgreich dazu gebracht hast, deinen Lieblingsinternetstream abzuspielen, kannst du die Option -dumpstream verwenden, um den Stream in eine Datei zu speichern. Zum Beispiel wird

mplayer http://217.71.208.37:8006 -dumpstream -dumpfile stream.asf 

den von http://217.71.208.37:8006 gestreamten Inhalt nach stream.asf speichern. Dies funktioniert mit allen Protokollen, die von MPlayer unterstützt werden, wie MMS, RSTP und so weiter.

3.5. CD/DVD-Laufwerke

Moderne CD-ROM-Laufwerke können sehr hohe Geschwindigkeiten erreichen. Jedoch sind einige CD-ROM-Laufwerke in der Lage, mit gedrosselter Geschwindigkeit zu laufen. Es gibt verschiedene Gründe, in Erwägung zu ziehen, die Geschwindig eines CD-ROM-Laufwerks zu ändern:

  • Es gibt Berichte über Lesefehler bei hohen Geschwindigkeiten, besonders bei schlecht gepressten CD-ROMs. Reduzierung der Geschwindigkeit kann unter diesen Umständen Datenverlust verhindern.

  • Viele CD-ROM-Laufwerke sind nervend laut. Eine geringere Geschwindigkeit kann die Geräusche reduzieren.

3.5.1. Linux

Du kannst die Geschwindigkeit von IDE CD-ROM-Laufwerken mit hdparm, setcd oder cdctl reduzieren. Dies funktioniert wie folgt:

hdparm -E [Geschwindigkeit] [CD-ROM-Gerät]

setcd -x [Geschwindigkeit] [CD-ROM-Gerät]

cdctl -bS [Geschwindigkeit]

Wenn du SCSI-Emulation benuzt, musst du die Einstellungen unter Umständen am echten IDE-Gerät vornehmen und nicht am emuliertem SCSI-Gerät.

Wenn du über root-Rechte verfügst, kann das folgende Kommando ebenso helfen:

echo file_readahead:2000000 > /proc/ide/[CD-ROM-Gerät]/settings

Dies setzt die Menge der vorausgehend gelesenen Daten auf 2MB, was bei verkratzten CD-ROMs hilft. Wenn du dies zu hoch setzt, wird das Laufwerk dauernd anlaufen und wieder langsamer werden; dies wird die Leistung dramtisch verschlechtern. Es wird ebenso empfohlen, dass du dein CD-ROM-Laufwerk mit hdparm konfigurierst:

hdparm -d1 -a8 -u1 [CD-ROM-Gerät]

Dies aktiviert DMA-Zugriff, Read-ahead (vorausgehendes Lesen) und IRQ-Unmasking (lies die hdparm Manpage für eine ausführliche Erklärung).

Wir verweisen hier auf "/proc/ide/[CD-ROM-Gerät]/settings" für Feineinstellungen an deinem CD-ROM.

SCSI-Laufwerke haben kein einheitliches Verfahren, diese Parameter zu setzen. (Kennst du einen? Berichte ihn uns!) Es gibt ein Tool, welches mit Plextor SCSI-Laufwerken funktioniert.

3.5.2. FreeBSD

Geschwindigkeit:

cdcontrol [-f Gerät] speed [Geschwindigkeit]

DMA:

sysctl hw.ata.atapi_dma=1

3.6. DVD-Wiedergabe

Für eine komplette Liste der verfügbaren Optionen lies bitte die Manpage. Die Syntax für das Abspielen einer Standard-DVD lautet wie folgt:

mplayer dvd://<Track> [-dvd-device <Gerät>]

Beispiel:

mplayer dvd://1 -dvd-device /dev/hdc

Das Standard-DVD-Laufwerk ist /dev/dvd. Wenn deine Installation davon abweicht, erstelle einen Symlink oder gib das genaue Gerät auf der Kommandozeile an mit der Option -dvd-device.

MPlayer verwendet libdvdread und libdvdcss zur DVD-Wiedergabe und -Entschlüsselung. Diese beiden Bibliotheken sind im Unterverzeichnis MPlayer-Quelltextbaum, du brauchst sie nicht separat zu installieren. Du kannst auch systemweite Versionen der beiden Bibliotheken verwenden, diese wird jedoch nicht empfohlen, da dies zu Bugs, Bibliotheksinkompatibilitäten und geringerer Geschwindigkeit führen kann.

Anmerkung

In Fällen von DVD-Dekodierungs-Problemen versuche Supermount oder solche Hilfen zu deaktivieren. Einige RPC-2 Laufwerke können verlangen, dass ein Regionalcode gesetzt ist.

DVD-Struktur.  DVDs haben 2048 Bytes pro Sektor mit ECC/CRC. Sie haben üblicherweise ein UDF-Dateisystem auf einem einzigem Track, welcher verschiedene Dateien (kleine .IFO und .BUK Dateien und große .VOB Dateien) enthält. Sie sind echte Dateien und können von einem gemounteten Dateisystem einer unentschlüsselten DVD kopiert/abgespielt werden.

Die .IFO-Dateien enthalten die Informationen zur Filmnavigation (Kapitel/Titel/Blickwinkel, Sprachtabellen etc.) und werden benötigt, um den .VOB Inhalt (den Film) zu lesen und zu interpretieren. Die .BUK-Dateien sind Backups davon. Sie nutzen überall Sektoren, so dass du Direktaddressierung von Sektoren auf dem Datenträger benötigst, um DVD-Navigation zu implementieren oder den Inhalt zu entschlüsseln.

DVD-Unterstützung benötigt rohen Sektor-basierten Zugriff auf das Laufwerk. Leider musst du (unter Linux) root sein, um die Sektoraddresse einer Datei zu erhalten. Das ist der Grund, warum wir nicht den Dateisystemtreiber des Kernels nutzen sondern es im Userspace reimplementiert haben. libdvdread 0.9.x tut dies. Der UDF-Dateisystemtreiber des Kernels wird nicht benötigt, da sie bereits einen eigenen eingebauten UDF-Dateisystem-Treiber haben. Ebenso muss die DVD nicht gemountet werden, da der direkte Sektor-basierte Zugriff genutzt wird.

Manchmal kann /dev/dvd nicht von Benutzern gelesen werden, deshalb implementierten die Autoren von libdvdread einen Emulations-Layer, welcher die Sektorenadressen in Dateinamen+Offsets überträgt und Raw-Zugriff auf dem gemounteten Dateisystem oder auch auf Festplatten emuliert.

libdvdread akzeptiert sogar Mountpoints an Stelle von Gerätenamen für Raw-Zugriff und überprüft /proc/mounts, um den Gerätenamen herauszufinden. Es wurde für Solaris entwickelt, wo Gerätenamen dynamisch zugewiesen werden.

Wenn du MPlayer mit dvdnav-Unterstützung compiliert hast, bleibt die Syntax derselbe, ausgenommen die Verwendung von dvdnav:// an Stelle von dvd://.

DVD-Entschlüsselung.  DVD-Entschlüsselung geschieht durch libdvdcss. Die dafür verwendete Methode kann durch Umgebungsvariable DVDCSS_METHOD festgelegt werden, siehe Manpage für Details.

RPC-1 DVD-Laufwerke schützen Regionseinstellunge nur durch Software. RPC-2-Laufwerke haben einen Hardwareschutz, welcher nur 5 Änderungen erlaubt. Es kann notwendig/empfehlenswert sein, die Firmware auf RPC-1 zu aktualisieren, wenn du ein RPC-2 DVD-Laufwerk hast. Du kannst versuchen ein Firmwareupgrade für dein Laufwerk im Internet zu finden, dieses Firmware-Forum kann ein guter Ausgangspunkt für deine Suche sein. Wenn es kein Firmwareupgrade für dein Laufwerk gibt, benutze das regionset-Tool, um den Regionscode deines DVD-Laufwerks (unter Linux) zu setzen. Warnung: Du kannst nur 5 mal den Regioncode ändern.

3.7. VCD-Wiedergabe

Für eine komplette Liste an verfügbaren Optionen lies bitte die Manpage. Die Syntax für eine Standard Video CD (VCS) lautet wie folgt:

mplayer vcd://<Track> [-cdrom-device <Gerät>]

Beispiel:

mplayer vcd://2 -cdrom-device /dev/hdc

Das Standard-VCD-Gerät ist /dev/cdrom. Wenn deine Installation davon abweicht, erstelle einen Symlink oder gib das genaue Gerät auf der Kommandozeile an mit der Option -cdrom-device.

Anmerkung

Mindenstens Plextor und einige SCSI-CD-ROM-Laufwerke von Toshiba haben eine schreckliche VCD-Leseleistung. Das liegt daran, daß der ioctl CDROMREADRAW für diese Laufwerke nicht vollstaendig implementiert ist. Wenn du ein bisschen Fachwissen über SCSI- Programmierung hast, hilf uns bitte, allgemeine SCSI-Unterstützggung für VCDs zu implementieren.

Inzwischen kannst du die Daten von VCDs mit readvcd extrahieren und die ausgegebene Datei mit MPlayer abspielen.

VCD-Struktur.  Eine Video CD (VCD) besteht aus CD-ROM XA Sektoren, z.B. CD-ROM Mode 2 Form 1 und 2 Tracks:

  • Der erste Track ist im Format Mode 2 Form 2, was bedeutet, dass es L2-Fehlerkorrektur benutzt. Der Track enthält ein ISO-9660 Dateisystem mit 2048 Bytes/Sektor. Das Dateisystem enthält VCD Metadata-Informationen ebenso wie Standbilder, welche oft in Menüs benutzt werden. MPEG-Segmente für Menüs können auch im ersten Track gespeichert werden, die MPEGs müssen aber in eine Serie von 150-Sektoren-Einheiten gestückelt werden. Das ISO-9660 Dateisystem kann auch noch andere Dateien oder Programme enthalten, welche nicht für VCD-Betrieb erforderlich sind.

  • Der zweite und die restlichen Tracks sind generelle rohe 2324 Bytes/Sektor MPEG (Film) Tracks, welche ein MPEG-PS-Datenpaket pro Sektor enthalten. Diese sind im Format Mode 2 Form 1, so dass sie mehr Daten pro Sektor speichern können unter dem Verlust einiger Fehlerkorrektur. Es ist ebenso gültig, CD-DA Tracks in einer VCD nach dem ersten Track zu haben. Auf manchen Betriebssystemen gibt es ein paar Tricks, diese nicht-ISO-9660-Tracks im Dateisystem erscheinen zu lassen. Auf anderen Systemen wie GNU/Linux ist dies (noch) nicht der Fall. Hier können die MPEG-Daten nicht gemountet werden. Da sich die meisten Filme in einer solchen Art von Track befinden, solltest du zuerst vcd://2 versuchen.

  • Es existieren ebenso VCDs ohne einen ersten Track (einzelner Track und überhaupt kein Dateisystem). Diese sind trotzudem abspielbar, können aber nicht gemountet werden.

  • Die Definition des Video-CD-Standards wird Philips "White Book" genannt und ist im Allgemeinen nicht online verfügbar, da es von Philips käuflich erworben werden muss. Detailliertere Informationen über Video-CDs befindet sich in der vcdimager- Documentation.

.DAT Dateien.  Die ~600 MB Datei, die auf dem ersten Track einer gemounteten VCD sichtbar ist, ist keine richtige Datei! Es ist ein sogenanntes ISO-Gateway, geschaffen, um Windows den Zugriff auf solche Tracks zu geben (Windows erlaubt überhaupt keine direkten Zugriffe auf das Laufwerk). Unter Linux kannst du solche Dateien weder kopieren noch abspielen (sie enthalten Müll). Unter Windows ist dies möglich, da Windows ISO9660-Treiber das direkte Lesen der Tracks in diesen Dateien emuliert. Um eine .DAT Datei wiederzugeben, benötigst du einen Kernel-Treiber, welcher in der Linux-Version von PowerDVD zu finden ist. Es hat einen modifizierten ISO9660 Dateisystem-Treiber (vcdfs/isofs-2.4.X.o), welcher in der Lage ist, die rohen Tracks durch diese Schatten-.DAT-Dateien zu emulieren. Wenn du den Datenträger mit deren Treiber mountest, kannst du die .DAT Dateien kopieren und sogar mit MPlayer abspielen. Dies wird jedoch nicht mit dem Standard-ISO9660-Treiber des Linux-Kernels funktionieren! Benutze statt dessen vcd://. Alternativen für das Kopieren von VCDs sind der neue Kernel-Treiber cdfs (nicht Bestandteil des offiziellen Kernels), welcher CD-Sessions als Imagedateien darstellt, und cdrdao, ein Bit-für-Bit CD-Grabbing/Kopier-Programm.

3.8. Edit Decision Lists (EDL)

Das System der "edit decision list" (EDL) erlaubt dir, Abschnitte von Videos während der Wiedergabe automatisch zu überspringen oder stummzuschalten, basierend auf einer filmspezifischen EDL-Konfigurationsdatei.

Dies ist nützlich für diejenigen, die einen Film im "familienfreundlichen" Modus anschauen möchten. Du kannst jegliche Gewalt oder Obszönität nach persönlichen Vorgaben aus einem Film herausschneiden. Daneben gibt es noch weitere Nutzungsmöglichkeiten wie dem automatischen Überspringen von Werbung in den Videos, die du dir anschaust.

Das EDL-Dateiformat ist ziemlich simpel. Es gibt einen Befehl pro Zeile, der angibt, was zu tun ist (überspringen/stumm schalten) und wann es zu tun ist (benutzt pts in Sekunden).

3.8.1. Benutzung einer EDL-Datei

Füge die Option -edl <dateiname> mit der EDL-Datei, die auf das Video angewendet werden soll, hinzu, wenn du MPlayer aufrufst.

3.8.2. Erstellung einer EDL-Datei

Das aktuelle EDL-Dateiformat ist das folgende:

[Anfangssekunde] [Endsekunde] [Aktion]

Wobei die Sekunden Fließkommazahlen sind und die Aktion entweder 0 zum Überspringen oder 1 für Stummschaltung. Beispiel:

5.3   7.1    0
15    16.7   1
420   422    0

Dies wird den Bereich von Sekunde 5.3 bis Sekunde 7.1 des Videos überspringen und dann bei 15 Sekunden stummschalten, bei 16.7 Sekunden den Ton wieder anschalten. Der Bereich zwischen den Sekunden 420 bis 422 wird übersprungen. Diese Aktionen werden ausgeführt, wenn der Wiedergabetimer die in der Datei angegebenen Zeiten erreicht.

Um eine EDL-Datei zu erstellen, die als Arbeitsvorlage benutzt werden kann, benutze die Option -edlout <dateiname>. Drücke dann während der Wiedergabe i, um den Anfang und as Ende eines zu überspringenden Blocks zu markieren. Ein entsprechender Eintrag wird für diese Zeit in die Datei geschrieben. Danach kannst du Feineinstellungen an der generierten EDL-Datei vornehmen und zusätzlich die Standardeinstellung ändern, welche darin besteht, den Block, der in einer Zeile beschrieben ist, zu überspringen.

3.9. Audio für Fortgeschrittene

3.9.1. Surround/Multichannel-Wiedergabe

3.9.1.1. DVDs

Die meisten DVDs und viele andere Dateien enthalten Surround-Sound. MPlayer unterstützt Surround-Wiedergabe, aktiviert diese jedoch nicht in der Voreinstellung, da Stereo-Ausrüstung weit gebräuchlicher ist. Um eine Datei abzuspielen, die mehr als zwei Audiokanäle hat, benutze die Option -channels. Um eine DVD mit 5.1-Ton abzuspielen, benutze beispielsweise:

mplayer dvd://1 -channels 6

Beachte, dass es sich trotz des Namens "5.1" um sechs diskrete Kanäle handelt. Wenn du eine entsprechende Ausrüstung für Surround-Sound hast, ist es sicher, die Option channels in die MPlayer-Konfigurationsdatei ~/.mplayer/config zu schreiben. Um zum Beispiel Quadrophonie-Wiedergabe als Voreinstellung zu verwenden, füge folgende Zeile hinzu:

channels=4

MPlayer wird dann den Ton in vier Kanäle ausgeben, falls alle vier Kanäle zur Verfügung stehen.

3.9.1.2. Stereo-Dateien auf vier Lautsprechern wiedergeben

MPlayer dupliziert per Voreinstellung keine Kanäle, genausowenig wie die meisten Audiotreiber. Wenn du dies manuell tun möchtest:

mplayer dateiname -af channels=2:2:0:1:0:0

Siehe den Abschnitt über das Kopieren von Kanälen für eine Erklärung.

3.9.1.3. AC3/DTS-Passthrough

DVDs enthalten Surround-Ton normalerweise encodiert im Format AC3 (Dolby Digital) oder DTS (Digital Theater System). Manche moderne Audioausrüstung ist dazu in der Lage, diese Formate intern zu decodieren. MPlayer kann angewiesen werden, die Audiodaten weiterzuleiten, ohne diese zu decodieren. Dies wird jedoch nur funktionieren, wenn du einen S/PDIF- (Sony/Philips Digital Interface) Anschluß an deiner Soundkarte hast.

Wenn deine Audioausrüstung sowohl AC3 als auch DTS decodieren kann, ist es sicher, Passthrough für beide Formate zu aktivieren. Sonst solltest du Passthrough nur für das Format aktivieren, das deine Ausrüstung unterstützt.

Passthrough auf der Kommandozeile aktivieren:

  • Für nur AC3, benutze -ac hwac3

  • Für nur DTS, benutze -ac hwdts

  • Für AC3 und DTS, benutze -afm hwac3

Passthrough in der MPlayer-Konfigurationsdatei aktivieren:

  • Für nur AC3, benutze ac=hwac3,

  • Für nur DTS, benutze ac=hwdts,

  • Für AC3 und DTS, benutze afm=hwac3

Beachte, dass am Ende von ac=hwac3, und ac=hwdts, ein Komma (",")steht. Dies wird dafür sorgen, dass MPlayer auf andere Codecs zurückgreift, die er normalerweise benutzt, wenn eine Datei keinen AC3- oder DTS-Ton besitzt. afm=hwac3 benötigt kein Komma; MPlayer wird sowieso auf andere zurückgreigen, wenn eine Audiofamilie angegeben wurde.

3.9.1.4. MPEG-Audio-Passthrough

Digitale TV-Übertragungen (wie DVB und ATSC) und manche DVDs haben normalerweise MPEG-Audiostreams (vornehmlich MP2). Manche MPEG-Hardwaredecoder wie vollausgestattete DVB-Karten und DXR2-Adapter können dieses Format nativ decodieren. MPlayer kann angewiesen werden, die Audiodaten weiterzuleiten, ohne sie zu decodieren.

Um diesen Codec zu verwenden:

 mplayer -ac hwmpa 

3.9.1.5. Matrix-encodierter Ton

***TODO***

Dieser Abschnitt muss noch geschrieben werden und kann nicht vervollständigt werden, bis uns jemand mit Beispieldateien zum Testen versorgt. Wenn du irgendwelche Matrix-encodierten Audiodateien hast, weißt, wo man welche finden kann oder andere hilfreiche Informationen hast, schicke bitte eine Nachricht auf die MPlayer-DOCS-Mailing-Liste. Benutzt "[matrix-encoded audio]" in der Betreffzeile.

Wenn keine Dateien oder weitere Informationen hervorkommen, wird dieser Abschnitt entfernt.

Gute Links:

3.9.1.6. Surround-Emulation bei Kopfhörern

MPlayer besitzt einen HRTF- (Head Related Transfer Function) Filter basierend auf einem MIT-Projekt, bei dem Messungen von an einem Puppenkopf befestigten Mikrofonen vorgenommen wurden.

Obwohl es unmöglich ist, ein Surroundsystem exakt zu imitieren, liefert MPlayers HRTF-Filter in 2-Kanal-Kopfhörern einen räumlich eindringlicheren Ton. Reguläres Heruntermixen kombiniert einfach alle Kanäle zu zweien; neben der Kombinierung der Kanäle generiert hrtf feine Echos, erhöht die Stereoseparation leicht und verändert die Lautstärke mancher Frequenzen. Ob HRTF-Klänge besser klingen, kann vom Quellmaterial und persönlichem Geschmack abhängen, den Filter auszuprobieren ist aber definitiv einen Versuch wert.

Eine DVD mit HRTF abspielen:

mplayer dvd://1 -channels 6 -af hrtf

hrtf funktioniert nur gut bei 5 oder 6 Kanälen und benötigt außerdem 48 kHz Ton. DVD-Ton ist schon 48 kHz, wenn du aber eine Datei mit einer anderen Samplerate hast, die du mit hrtf abspielen willst, musst du sie resamplen:

mplayer filename -channels 6 -af resample=48000,hrtf

3.9.1.7. Troubleshooting/Problemlösung

Wenn du keinen Ton aus deinen Surround-Kanälen hören kannst, überprüfe deine Mixereinstellungen mit Mixerprogrammen wie alsamixer; Audioausgaben sind oft stummgeschaltet und per Voreinstellung auf Lautstärke 0 gesetzt.

3.9.2. Kanalmanipulationen

3.9.2.1. Allgemeine Informationen

Leider gibt es keinen Standard, der vorgibt, wie Kanäle angeordnet sind. Die unten gelisteten Reihenfolgen sind die von AC3 und halbwegs typisch; versuche diese und schaue, ob sie zu deiner Quelle passen. Kanäle sind durchnummeriert, beginnend bei 0.

Mono

  1. mittig

Stereo

  1. links

  2. rechts

Quadraphonisch

  1. links vorne

  2. rechts vorne

  3. links hinten

  4. rechts hinten

Surround 4.0

  1. links vorne

  2. rechts vorne

  3. mittig hinten

  4. mittig vorne

Surround 5.0

  1. links vorne

  2. rechts vorne

  3. links hinten

  4. rechts hinten

  5. mittig vorne

Surround 5.1

  1. links vorne

  2. rechts vorne

  3. links hinten

  4. rechts hinten

  5. mittig vorne

  6. Subwoofer

Die Option -channels wird benutzt, um vom Audiodecoder eine Anzahl Kanäle zu fordern. Manche Audiocodecs benutzen die angegebenen Kanäle, um zu entscheiden, ob Heruntermixen der Quelle nötig ist. Beachte, dass dies nicht immer die Anzahl der Ausgabekanäle beeinflusst. Zum Beispiel wird die Angabe der Option -channels 4 bei der Wiedergabe einer Stereo-MP3-Datei zur Ausgabe in 2 Kanälen führen, da der MP3-Codec keine zusätzlichen Kanäle produziert.

Der Audiofilter channels kann genutzt werden, um Kanäle zu erstellen oder zu entfernen. Er ist nützlich für die Kontrolle der Anzahl der Kanäle, die an die Soundkarte geschickt werden. Siehe folgenden Abschnitt für weitergehende Informationen zur Kanalmanipulation.

3.9.2.2. Mono-Wiedergabe mit zwei Lautsprechern

Mono klingt viel besser, wenn es von zwei Lautsprechern wiedergegeben wird - besonders bei Kopfhörern. Audiodateien, die wirklich nur einen Kanal haben, werden automatisch von zwei Lautsprechern wiedergeben; leider sind jedoch die meisten Dateien in mono tatsächlich als stereo encodiert, bei dem ein Kanal stumm ist. Der einfachste und sicherste Weg, zwei Lautsprecher dasselbe ausgeben zu lassen ist der Filter extrastereo:

mplayer dateiname -af extrastereo=0

Dieser mittelt über beide Kanäle, was darin resultiert, dass beide Kanäle jeweils halb so laut sind wie das Original. Die nächsten Abschnitte enthalten Beispiele für andere Möglichkeiten, dies ohne Minderung der Lautstärke zu erreichen, sie sind aber komplexer und erfordern verschiedene Optionen, je nach dem, welche Kanäle beibehalten werden sollen. Wenn du wirklich die Lautstärke beibehalten musst, ist es möglicherweise leichter, mit dem Filter volume zu experimentieren und den dafür richtigen Wert zu finden. Zum Beispiel:

mplayer dateiname -af extrastereo=0,volume=5

3.9.2.3. Kopieren/Verschieben von Kanälen

Der Filter channels kann einen beliebigen oder alle Kanäle verschieben. All die Suboptionen für den channels-Filter einzustellen kann kompliziert sein und erfordert ein wenig Sorgfalt.

  1. Entscheide, wieviele Ausgabekanäle du benötigst. Dies ist die erste Suboption.

  2. Zähle, wieviele Kanäle du umordnen möchtest. Dies ist die zweite Suboption. Jeder Kanal kann gleichzeitig zu mehreren verschiedenen Kanälen verschoben werden. Behalte jedoch im Gedächtnis, dass ein Kanal leer ist, wenn er (auch wenn er nur an ein Ziel) verschoben wird, es sei denn, ein anderer Kanal ersetzt ihn. Um einen Kanal zu kopieren, wobei die Quelle gleich bleibt, verschiebe den Kanal ins Ziel und in die Quelle, zum Beispiel:

    channel 2 --> channel 3
    channel 2 --> channel 2

  3. Schreibe die Kanalkopien als Suboptionspaare aus. Beachte, dass der erste Kanal 0 ist, der zweite 1 usw. Die Reihenfolge dieser Suboptionen spielt keine Rolle, solang sie entsprechend in Paare der Form Quelle:Ziel gruppiert sind.

Beispiel: ein Kanal auf zwei Lautsprecher

Hier ist ein Beispiel einer weiteren Möglichkeit, einen Kanal auf zwei Lautsprechern wiederzugeben. Für dieses Beispiel sei angenommen, dass der linke Kanal abgespielt und der rechte verworfen werden soll. Befolge die oben angegebenen Schritte:

  1. Um einen Ausgabekanal für jeden der beiden Lautsprecher bereitzustellen, muss die erste Suboption "2" sein.

  2. Der linke Kanal muss zum rechten verschoben werden, und auch zu sich selbst, damit er nicht leer ist. Dies sind insgesamt also zwei Bewegungen, was die zweite Suboption auch "2" macht.

  3. Den linken Kanal (Kanal 0) zum rechten (Kanal 1) zu verschieben, entspricht dem Suboptionspaar "0:1", "0:0" bewegt den linken Kanal auf sich selbst.

All dies zusammengesetzt ergibt:

mplayer dateiname -af channels=2:2:0:1:0:0

Der Vorteil, den diese Methode gegenüber extrastereo hat, ist, dass die Lautstärke auf jedem Ausgabekanal die gleiche ist wie die des Eingabekanals. Der Nachteil ist, dass die Suboptionen zu "2:2:1:0:1:1" geändert werden müssen, wenn der gewünschte Ton im rechten Kanal ist. Außerdem ist es schwerer zu merken und einzutippen.

Beispiel: ein Kanal auf zwei Lautsprecher, Abkürzung

Tatsächlich gibt es einen viel einfacheren Weg, um mit dem channels-Filter den linken Kanal auf beiden Lautsprechern wiederzugeben:

mplayer dateiname -af channels=1

Der zweite Kanal wird verworfen und ohne weitere Suboptionen bleibt der übrige Kanal allein. Soundkartentreiber spielen einkanaliges Audio automatisch auf beiden Lautsprechern ab. Dies funktioniert nur, wenn der gewünschte Kanal der linke ist.

Beispiel: Dupliziere die vorderen Kanäle hinten

Eine weitere übliche Aktion ist die Duplizierung der vorderen Kanäle, um sie auf den hinteren Lautsprechern einer quadraphonischen Installation abzuspielen.

  1. Es sollte vier Ausgabekanäle geben. Die erste Suboption ist "4".

  2. Jeder der zwei Frontkanäle muss zum entsprechenden hinteren Kanal und zu sich selbst bewegt werden. Das sind vier Bewegungen, also ist die zweite Suboption "4".

  3. Der vordere linke Kanal (0) muss zum hinteren linken (Kanal 2) bewegt werden: "0:2". Der vordere linke muss auch zu sich selbst bewegt werden: "0:0". Der vordere rechte (Kanal 1) wird zum hinteren rechten (Kanal 3) bewegt: "1:3", und zu sich selbst: "1:1".

Setze alle Suboptionen zusammen und du erhältst:

mplayer dateiname -af channels=4:4:0:2:0:0:1:3:1:1

3.9.2.4. Kanäle mixen

Der Filter pan in Kanäle in vom Benutzer angegebenen Verhältnissen mixen. Dies ermöglicht alles, was der channels-Filter kann, und mehr. Leider sind die Suboptionen auch viel schwieriger.

  1. Entscheide, mit wievielen Kanälen du arbeiten möchtest. Dies musst du mit der Option -channels und/oder -af channels angeben. Spätere Beispiele werden dir zeigen, wann welcher zu benutzen ist.

  2. Entscheide, mit wievielen Kanälen du pan füttern möchtest (weitere decodierte Kanäle werden verworfen). Dies ist die erste Suboption, und diese kontrolliert auch, wieviele Kanäle für die Ausgabebereitgestellt werden.

  3. Die übrigen Suboptionen geben an, wieviel von jedem Kanal in jeden anderen Kanal gemixt werden. Das ist der komplizierte Teil. Um die Arbeit übersichtlich zu machen, zerlege die Suboptionen in mehrere Teile, einen Teil für jeden Ausgabekanal. Jede Suboption innerhalb eines Teils entspricht einem Eingabekanal. Die Anzahl, die du angibst, ist die prozentuale Menge, die vom Eingabekanal in den Ausgabekanal gemixt wird.

    pan akzeptiert Werte von 0 bis 512, was Werte von 0% bis 512000% der ursprünglichen Lautstärke ergibt.. Sei vorsichtig bei Werten größer als 1. Dies liefert nicht nur eine sehr hohe Lautstärke, sondern sprengt auch den Samplebereich deiner Soundkarte, und du könntest schmerzvolle Pops und Klicken hören. Wenn du willst, kannst du auf pan ,volume folgen lassen, um eine Abschneidung zu ermöglichen, es ist aber das beste, die Werte von pan niedrig genug zu halten, dass keine Abschneidung nötig ist.

Beispiel: Ein Kanal auf zwei Lautsprechern

Hier ist also noch ein Beispiel für die Wiedergabe des linken Kanals auf zwei Lautsprechern. Befolge die Schritte oben:

  1. pan sollte zwei Kanäle ausgeben, also ist die erste Suboption "2".

  2. Da wir zwei Eingabekanäle haben, gibt es die Suboptionen in zwei Teilen. Da es auch zwei Ausgabekanäle gibt, wird es pro Teil zwei Suboptionen geben. Der linke Kanal der Datei sollte in voller Lautstärke auf den neuen linken Kanal und den rechten gehen, daher ist der erste Teil der Suboptionen "1:1". Der rechte Kanal sollte weggelassen werden, daher ist der zweite "0:0". Alle 0-Werte am Ende können weggelassen werden, aber um das Verstehen leichter zu machen, behalten wir sie.

Diese Optionen ergeben zusammen:

mplayer dateiname -af pan=2:1:1:0:0

Wenn der rechte Kanal anstelle des linken gewünscht ist, sind die Suboptionen für pan "2:0:0:1:1".

Beispiel: Ein Kanal auf zwei Lautsprechern, Abkürzung

Wie bei der Option channels gibt es eine Abkürzung, die nur mit dem linken Kanal funktioniert:

mplayer dateiname -af pan=1:1

Da pan nur einen Eingabekanal hat (der andere wird verworfen), gibt es nur einen Teil mit einer Suboption, die angibt, dass der einzige Kanal 100% von sich selbst bekommt.

Beispiel: 6-kanaliges PCM heruntermixen

MPlayers Decoder für 6-kanaliges PCM ist nicht in der Lage, herunterzumixen. Hier ist eine Möglichkeit, PCM unter Verwendung von pan herunterzumixen:

  1. Die Anzahl der Ausgabekanäle ist zwei, daher ist die erste Suboption "2".

  2. Bei sechs Eingabekanälen gibt es sechs Teile Optionen. Glücklicherweise müssen wir nur zwei Teile machen, da wir uns nur für die Ausgabe der ersten beiden Kanäle interessieren. Die übrigen vier Teile können weggelassen werden. Sei dir im klaren darüber, dass nicht alle Audiodateien mit mehreren Kanälen die gleiche Kanalabfolge haben! Dieses Beispiel demonstriert das Heruntermixen einer Datei mit den gleichen Kanälen wie MAC3 5.1:

    0 - vorne links
    1 - vorne rechts
    2 - hinten links
    3 - hinten rechts
    4 - mittig vorne
    5 - Subwoofer

    Der erste Teil der Suboptionen listet die Prozente der ursprünglichen Lautstärke, und zwar in der Reihenfolge, die jeder Ausgabekanal vom vorderen linken Kanal erhalten soll: "1:0". Der vordere rechte Kanal sollte zur rechten Ausgabe gehen: "0:1". Das gleiche gilt für die hinteren Kanäle: "1:0" und "0:1". Der mittlere Kanal geht mit jeweils halber Lautstärke in beide Ausgabekanäle: "0.5:0.5", und der Subwoofer geht mit voller Lautstärke in beide: "1:1".

All dies zusammen ergibt:

mplayer 6-kanal.wav -af pan=2:1:0:0:1:1:0:0:1:0.5:0.5:1:1

Die oben gelisteten Prozente sind nur ein einfaches Beispiel. Fühle dich nicht eingeschränkt, mit ihnen zu experimentieren.

Beispiel: Wiedergabe von 5.1-Audio auf großen Lautsprechern ohne Subwoofer

Wenn du ein riesiges Paar Front-Lautsprecher hast und kein Geld darauf verschwenden möchtest, einen Subwoofer für ein komplettes 5.1-Soundsystem zu erhalten. Wenn du die Option -channels 5 benutzt, damit liba52 5.1-Ton in 5.0 decodiert, wird der Subwoofer-Kanal einfach weggelassen. Wenn du den Subwoofer-Kanal selbst verteilen möchtest, musst du manuell mit pan heruntermixen:

  1. Da pan alle sechs Kanäle untersuchen muss, gib -channels 6 an, so dass liba52 sie alle decodiert.

  2. pan gibt nur fünf Kanäle aus, die erste Suboption ist 5.

  3. Sechs Eingabekanäle und fünf Ausgabekanäle bedeuten sechs Teile von fünf Suboptionen.

    • Der linke vordere Kanal wird nur auf sich selbst repliziert: "1:0:0:0:0"

    • Das gleiche gilt für den rechten vorderen Kanal: "0:1:0:0:0"

    • Das gleiche gilt für den linken hinteren Kanal:"0:0:1:0:0"

    • Und das gleiche auch für den rechten hinteren Kanal: "0:0:0:1:0"

    • Vordere Mitte auch: "0:0:0:0:1"

    • Jetzt müssen wir entscheiden, was mit dem Subwoofer geschieht, zum Beispiel eine Hälfte jeweils nach vorne rechts und vorne links: "0.5:0.5:0:0:0"

Kombiniere all diese Optionen, um folgendes zu erhalten:

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.9.3. Anpassung der softwaregesteuerten Lautstärke

Manche Audiotracks sind zu leise, um sie bequem ohne Anpassung zu hören. Das kann zum Problem werden, wenn dein Audiosystem diese Anpassung nicht für dich vornehmen kann. Die Option -softvol weist MPlayer an, einen internen Mixer zu verwenden. Du kannst die Tasten zur Anpassung der Lautstärke (in der Voreinstellung 9 und 0) verwenden, um wesentlich höhere Lautstärkelevel zu erreichen. Beachte, dass dies nicht den Mixer deiner Soundkarte umgeht; MPlayer wird das Signal nur verändern, bevor es an die Soundkarte gesendet wird. Das folgende Beispiel ist ein guter Anfang:

mplayer leise-datei -softvol -softvol-max 300

Die Option -softvol-max gibt die maximal erlaubte Ausgabelautstärke als prozentualen Wert hinsichtlich der Originallautstärke an. Beispielsweise würde -softvol-max 200 erlauben, die Lautstärke doppelt so hoch wie das ursprüngliche Level zu setzen. Es ist sicher, einen größeren Wert mit -softvol-max zu setzen; die höhere Lautstärke wird nicht verwendet, solange du nicht die entsprechenden Tasten drückst. Der einzige Nachteil bei Verwendung von hohen Werten ist, dass du nicht ganz so genaue Kontrolle bei der Verwendung der Tasten hast, da MPlayer die Lautstärke in Prozenten der maximalen Lautstärke anpasst. Benutze einen niedrigeren Wert mit -softvol-max und/oder gib -volstep 1 an, wenn du höhere Genauigkeit brauchst.

Die Option -softvol funktioniert durch Kontrolle des Audiofilters volume. Wenn du eine Datei von Anfang an mit einer gewissen Lautstärke abspielen möchtest, kannst du die volume manuell angeben:

mplayer leise-datei -af volume=10

Dies wird die Datei mit einer Erhöhung um zehn Dezibel wiedergeben. Sei vorsichtig bei der Verwendung des volume-Filters - du kannst deinen Ohren leicht schaden, wenn du einen zu hohen Wert benutzt. Beginne niedrig und arbeite dich stufenweise hoch, bis du ein Gefühl dafür bekommst, wieviel Anpassung notwendig ist. Außerdem kann es passieren, wenn du einen übermäßig hohen Wert angibst, dass volume das Signal kappen muss, um keine Daten an die Soundkarte zu schicken, die außerhalb des gültigen Bereichs liegen; dies führt zu gestörtem Ton.

3.10. TV-Input

Dieser Abschnitt behandelt das Anschauen/Grabben von einem V4L-kompatiblen TV-Empfänger. Siehe Manpage für eine Beschreibung der TV-Optionen und Tastensteuerungen.

3.10.1. Compilierung

  1. Zuerst musst du neu compilieren. ./configure wird die Kernelheader vom v4l-Kram und die Existenz der /dev/video*-Einträge automatisch erkennen und TV-Unterstützung wird eingebaut werden (siehe Ausgaben von ./configure).

  2. Stelle sicher, dass dein Empfänger mit anderer TV-Software wie zum Beispiel XawTV unter Linux läuft.

3.10.2. Tipps zum Gebrauch

Die vollständige Liste der Optionen ist in der Manpage verfügbar. Hier sind nur ein paar Tipps:

  • Benutze die Option channels. Ein Beispiel:

    -tv channels=26-MTV1,23-TV2

    Erklärung: Durch Verwendung dieser Option sind nur die Kanäle 26 und 23 in Gebrauch, und es wird beim Kanalwechsel einen netten OSD-Text geben, der den Namen des Kanals anzeigt. Leerzeichen im Kanalnamen müssen durch das Zeichen "_" ersetzt werden.

  • Wähle vernünftige Bildabmessungen. Die Abmessungen des resultierenden Bildes sollten durch 16 teilbar sein.

  • Wenn du das Video bei einer vertikalen Auflösung höher als halb der vollen Auflösung einfängst (z.B. 288 für PAL oder 240 für NTSC), dann werden die 'Frames', die du erhältst, wirklich jeweils ausgelassene Paare von Feldern sein. Je nach dem, was du mit dem Video anfängst, kannst du es in dieser Form belassen, (zerstörend) deinterlacen oder die Paare zu einzelnen Feldern machen.

    Ansonsten wirst du einen Film erhalten, der während schnellbewegten Szenen gestört ist, und die Bitratenkontrolle wird vermutlich nicht in der Lage sein, die angegebene Bitrate einzuhalten, da die Interlacing-Artefakte hohe Details produzieren und daher eine Menge Bandbreite kosten. Du kannst Deinterlacing mit -vf pp=DEINT_TYPE aktivieren. Normalerweise leistet pp=lb gute Arbeit, aber das ist Geschmackssache. Schaue nach anderen Deinterlacing-Algorithmen im Handbuch und versuche es mit denen.

  • Schneide tote Bereiche ab. Wenn du Video aufnimmst, sind die Bereiche an den Rändern normalerweise schwarz oder enthalten Rauschen. Diese wiederum verbrauchen unnötige Bandbreite. Genauer gesagt sind es nicht die schwarzen Bereiche selbst, sondern die scharfen Übergänge zwischen dem schwarzen und dem helleren Videobild, die das tun. Aber das ist für den Moment nicht so wichtig. Bevor du mit der Aufnahme beginnst, passe alle Argumente der Option crop so an, dass der ganze Müll an den Rändern abgeschnitten wird. Nochmal, vergiss nicht, die resultierenden Abmessungen vernünftig zu halten.

  • Achte auf CPU-Load. Es sollte die 90%-Grenze die meiste Zeit über nicht überschreiten. Wenn du einen großen Aufnahmepuffer hast, kann MEncoder eine Überlastung für ein paar Sekunden überstehen, aber nicht mehr. Es ist besser, 3D-OpenGL-Bildschirmschoner und ähnlichen Kram abzustellen.

  • Spiele nicht mit der Systemuhr herum. MEncoder benutzt sie für A/V-Synchronisation. Wenn du die Systemuhr anpasst (vor allem rückwärtig), verwirrt dies MEncoder, und du wirst Frames verlieren. Das ist ein wichtiger Sachverhalt, wenn du mit einem Netzwerk verbunden bist und Zeitsynchronisationssoftware wie NTP verwendest. Du musst NTP während des Aufnahmeprozesses ausschalten, wenn du zuverlässig aufnehmen möchtest.

  • Ändere das outfmt nicht, es sei denn, du weißt, was du tust, oder deine Karte/Treiber den Standard (YV12-Farbraum) wirklich nicht unterstützt. In älteren Versionen von MPlayer/MEncoder war es notwendig, das Ausgabeformat anzugeben. Diese Sache sollte in aktuellen Releases behoben sein, und outfmt wird nicht weiter benötigt. Die Standardeinstellung genügt den meisten Zwecken. Zum Beispiel, wenn du mit libavcodec nach DivX aufnimmst und outfmt=RGB24 angibst, um die Qualität der aufgenommenen Bilder zu erhöhen, so wird das aufgenommene Bild später tatsächlich zurück zu YV12 konvertiert. Die einzige Sache, die du erreichst, ist eine massive Verschwendung von CPU-Power.

  • Um den Farbraum I420 anzugeben (outfmt=i420), musst du die Option -vc rawi420 hinzufügen. Das liegt an einem Konflikt mit einem Intel Indeo Videocodec.

  • Es gibt viele Möglichkeiten, Audio aufzunehmen. Du kannst den Ton grabben entweder mit deiner Soundkarte über ein externes Kabel zwischen Videokarte und Line-In oder durch Benutzung des eingebauten ADC im bt878-Chip. In letzterem Falle musst den den Treiber btaudio laden. Lies die Datei linux/Documentation/sound/btaudio (im Kernel-Tree, nicht in dem von MPlayer) für ein paar Anweisungen, wie dieser Treiber verwendet wird.

  • Wenn MEncoder das Audiogerät nicht öffnen kann, stelle sicher, dass es wirklich verfügbar ist. Es kann Ärger geben mit Soundservern wie aRts (KDE) oder ESD (GNOME). Wenn du eine Vollduplex-Soundkarte hast (fast jede vernünftige Karte unterstützt dies heutzutage) und du KDE laufen hast, probiere die Option "Vollduplex" im Eigenschaftenmenü des Soundservers.

3.10.3. Beispiele

Dummy-Ausgabe zu AAlib :)

mplayer -tv driver=dummy:width=640:height=480 -vo aa tv://

Input von Standard-V4L:

mplayer -tv driver=v4l:width=640:height=480:outfmt=i420 -vc rawi420 -vo xv tv://

Ein gehobenes Beispiel. Dies sorgt dafür, dass MEncoder das volle PAL-Bild einfängt, die Ränder abschneidet und einen Deinterlacer mit einem linearen Blendalgorithmus auf das Bild anwendet. Der Ton wird mit dem LAME-Codec bei konstanter Bitrate von 64kbps komprimiert. Diese Einstellungen eigenen sich für das Einfangen von Filmen.

mencoder -tv driver=v4l:width=768:height=576 \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 \
-oac mp3lame -lameopts cbr:br=64 \
-vf crop=720:544:24:16,pp=lb -o output.avi tv://

Dies wird zusätzlich die Bildabmessungen auf 384x288 ändern und das Video mit einer Bitrate von 250kbps im hochqualitativen Modus encodieren. Die Option vqmax lockert den Quantisierungsparameter und erlaubt dem Videokompressor, eine sehr niedrige Bitrate zu erlangen, sogar auf Kosten der Qualität. Dies kann verwendet werden für das Einfangen von langen TV-Serien, wo die Videoqualität nicht so wichtig ist.

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 \
-vf crop=720:540:24:18,pp=lb,scale=384:288 -sws 1 -o output.avi tv://

Es ist außerdem möglich, in der Option -tv kleinere Bildabmessungen anzugeben und die Softwareskalierung auszulassen, aber dieser Ansatz nutzt die maximal verfügbaren Informationen und ist ein wenig resistenter gegen Störungen. Die bt8x8-Chips können das Mitteln der Pixel auf Grund einer Hardwarebeschränkung nur in horizontaler Richtung durchführen.

3.11. Videotext

Videotext ist momentan nur in MPlayer verfügbar, für die Treiber v4l und v4l2.

3.11.1. Anmerkungen zur Implementierung

MPlayer unterstützt regulären Text, Grafiken und Navigationslinks. Leider werden farbige Seiten momentan nicht vollständig unterstützt - alle Seiten erscheinen in Graustufen. Untertitelseiten (auch bekannt als "Closed Captions") werden auch unterstützt.

MPlayer beginnt beim Beginn vom TV-Empfang damit, alle Videoseiten zwischenzuspeichern, damit du nicht warten musst, bis die gewünschte Seite geladen ist.

Anmerkung: Benutzung von Videotext mit -vo xv verursacht komische Farben.

3.11.2. Videotext verwenden

Um Decodierung von Videotext zu aktivieren, musst du das VBI-Gerät angeben, von dem die Videotextdaten empfangen werden (üblicherweise /dev/vbi0 unter Linux). Dies kann erreicht werden durch Angabe der Option tdevice in deiner Konfigurationsdatei, siehe unten:

tv=tdevice=/dev/vbi0

Du musst möglicherweise den Videotextsprachcode für dein Land angeben. Um dir alle Sprachcodes anzeigen zu lassen, verwende

tv=tdevice=/dev/vbi0:tlang=-1

Hier ist ein Beispiel für russisch:

tv=tdevice=/dev/vbi0:tlang=33

3.12. Radio

3.12.1. Radio Input

Dieser Abschnitt behandelt das Hören von Radio mittels eines V4L-kompatiblen Radioempfängers. Siehe Manpage für eine Beschreibung der Radio-Optionen und Tastensteuerungen.

3.12.1.1. Kompilierung

  1. Zuerst muss MPlayer neu kompiliert werden mittels ./configure mit --enable-radio und (falls Aufzeichnen untersttzt werden soll) --enable-radio-capture.

  2. Stelle sicher, dass dein Empfänger mit anderer Radio Software für Linux läuft, wie z.B. XawTV.

3.12.1.2. Tips zum Gebrauch

Eine vollständige Liste aller Optionen ist in der Manpage. Hier sind nur ein paar Tips:

  • Benutze die Option channels. Ein Beispiel:

    -radio channels=104.4-Sibir,103.9-Maximum

    Erklärung: Mit dieser Option sind nur die Frequenzen 104.4 und 103.9 in Gebrauch. Ein netter OSD-Text wird beim Kanalwechsel den Namen des Kanals angeben. Leerzeichen im Kanalnamen müssen ersetzt werden durch das Zeichen "_".

  • Es gibt mehrere Möglichkeiten, Radio aufzuzeichnen. Das Sound-Signal kann entweder mit der Soundkarte und einer externen Kabelverbindung zwischen dem Line-In der Soundkarte und der TV-Karte erfasst werden, oder mittels des eingebauten ADC im saa7134-Chip. In letzterem Falle ist es nötig, den Treiber saa7134-alsa oder saa7134-oss zu laden.

  • MEncoder ist zum Aufzeichnen von Radio ungeeignet, da es einen Video Stream benötigt. Daher kannst du entweder arecord vom ALSA Projekt benutzen, oder die Option -ao pcm:file=file.wav. In letzterem Falle wirst du keinen Sound hören können (es sei denn, du hast ein Line-In Kabel und hast den Line-In Kanal nicht stumm geschaltet).

3.12.1.3. Beispiele

Input von Standard-V4L (mittels Line-In Kabel, keine Aufzeichnung):

mplayer radio://104.4

Input von Standard-V4L (mittels Line-In Kabel, keine Aufzeichnung, V4Lv1 Interface):

mplayer -radio driver=v4l radio://104.4

Abspielen des zweiten Kanals aus der Kanalliste:

mplayer -radio channels=104.4=Sibir,103.9=Maximm  radio://2

Leiten des Sounds über den PCI-Bus vom internen ADC des Radio-Empfängers. In diesem Beispiel wird der Empfänger als zweite Soundkarte genutzt (ALSA device hw:1,0). Für saa7134-basierte Karten muss entweder das Modul saa7134-alsa oder saa7134-oss geladen werden.

Anmerkung

Werden ALSA-Gerätenamen benutzt, so müssen Doppelpunkte durch Gleichheitszeichen und Kommata durch Punkte ersetzt werden.

mplayer -rawaudio rate=32000 -radio adevice=hw=1.0:arate=32000:channels=104.4=Sibir,103.9=Maximm  radio://2/capture

Kapitel 4. Videoausgabegeräte

4.1. MTRR einrichten

Du solltest UNBEDINGT sicherstellen, dass die MTRR-Register richtig belegt sind, denn sie können einen großen Geschwindigkeitsschub bringen.

Gib den Befehl cat /proc/mtrr ein:

--($:~)-- cat /proc/mtrr
reg00: base=0xe4000000 (3648MB), size=  16MB: write-combining, count=9
reg01: base=0xd8000000 (3456MB), size= 128MB: write-combining, count=1

Diese Anzeige ist richtig. Sie zeigt meine Matrox G400 mit 16MB Speicher. Ich habe die Einstellung von XFree 4.x.x, der die MTRR-Register automatisch einstellt.

Wenn nichts funktioniert, musst du sie manuell setzen. Als erstes musst du die Basisadresse finden. Dazu gibt es drei Möglichkeiten:

  1. durch die X11 Start-Meldungen, zum Beispiel:

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

  2. von /proc/pci (verwende den Befehl lspci -v):

    01:00.0 VGA compatible controller: Matrox Graphics, Inc.: Unknown device 0525
    Memory at d8000000 (32-bit, prefetchable)

  3. von den mga_vid Kerneltreiber-Meldungen (verwende dmesg):

    mga_mem_base = d8000000

So, nun gilt es, die Speichergröße zu finden. Dies ist sehr einfach, konvertiere einfach die Video-RAM-Größe nach hexadezimal, oder verwende diese Tabelle:

1 MB0x100000
2 MB0x200000
4 MB0x400000
8 MB0x800000
16 MB0x1000000
32 MB0x2000000

Du kennst die Basisadresse und die Speichergröße? Lass uns die MTRR Register einstellen! Für die Matrox-Karte von oben (base=0xd8000000) mit 32MB RAM (size=0x2000000) führst du einfach folgendes aus:

echo "base=0xd8000000 size=0x2000000 type=write-combining" > /proc/mtrr

Nicht alle CPUs unterstützen MTRRs. Zum Beispiel ältere K6-2s [bei ca. 266MHz, stepping 0] unterstützen kein MTRR, aber Stepping-12-CPUs tun es (cat /proc/cpuinfo gibt Aufschluss).

4.2. Xv

Mit XFree86 4.0.2 oder neueren Versionen kannst du die Hardware-YUV-Routinen deiner Grafikkarte mit Hilfe der XVideo-Erweiterungen benutzen. Das ist die Technik, die -vo xv benutzt. Dieser Treiber unterstützt darüber hinaus die Anpassung von Helligkeit/Kontrast/Sättigung etc. (es sei denn, du benutzt den alten und langsamen DirectShow DivX-Codec, welcher diese Anpassungen unabhängig vom Videoausgabetreiber unterstützt). Schau in der Manpage nach.

Um Xv zum Laufen zu bringen, musst du auf die folgenden Punkte achten:

  1. Du musst XFree86 4.0.2 oder eine neuere Version verwenden, da die älteren Versionen XVideo noch nicht kannten.

  2. Deine Grafikkarte muss Hardware-Unterstützung für YUV bieten, was alle modernen Karten tun.

  3. X muss die XVideo-Erweiterung auch tatsächlich laden, was zu Meldungen ähnlich der folgenden führt:

    (II) Loading extension XVideo

    in /var/log/XFree86.0.log

    Anmerkung

    Diese Meldung besagt nur, dass die XFree86-Erweiterung geladen wird. Bei einer guten Installation sollte das immer der Fall sein. Das heißt allerdings noch nicht, dass die XVideo-Unterstützung der Grafikkarte auch geladen wurde!

  4. Deine Karte muss unter Linux Xv-Unterstützung haben. Du kannst dich dessen mit xvinfo vergewissern, das Teil der XFree86-Distribution ist. Es sollte einen längeren Text ausgeben, der ungefähr so aussieht:

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

    Damit MPlayer Xv benutzen kann, müssen die Pixelformate YUY2 packed und YV12 planar unterstützt werden.

  5. Stelle als letztes sicher, dass MPlayer mit Unterstützung für Xv compiliert wurde. configure gibt eine entsprechende Meldung aus. Führe den Befehl mplayer -vo help | grep xv aus. Wurde Unterstützung für Xv eingebaut, sollte eine ähnliche Meldung wie diese erscheinen:

    xv      X11/Xv

4.2.1. 3dfx-Karten

Ältere 3dfx-Treiber hatten bekanntermaßen Probleme mit der XVideo-Beschleuningung, die weder YUY2 noch YV12 unterstützte. Stelle sicher, dass du XFree86 Version 4.2.0 oder neuer verwendest, da diese Versionen mit YV12 und YUY2 keine Probleme haben, während frühere Versionen, auch 4.1.0, bei YV12 abgestürzen. Wenn du merkwürdige Effekte bei der Verwendung von -vo xv bemerkst, dann probier aus, ob mit SDL, das ebenfalls XVideo nutzen kann, diese Effekte verschwinden. In der SDL stehen Details darüber.

Alternativ kannst du auch den NEUEN tdfxfb-Treiber mit -vo tdfxfb verwenden! Lies dazu die tdfxfb-Sektion.

4.2.2. S3-Karten

S3 Savage3D-Karten sollten problemlos funktionieren, aber bei Savage4- Chips solltest du XFree86 4.0.3 oder neuer verwenden. Probier bei Problemen den 16bpp-Farbmodus aus. Und der S3 Virge... Es gibt für ihn zwar Xv- Unterstützung, aber die Karte selbst ist so langsam, dass du sie besser verkaufst.

Es gibt inzwischen einen nativen Framebuffer-Treiber für S3 Virge-Karten, ähnlich tdfxfb. Mache die Einstellungen (hänge z.B. "vga=792 video=vesa:mtrr" an die Kernelkommandozeile an) und benutze -vo s3fb (-vf yuy2 und -dr helfen auch).

Anmerkung

Momentan ist nicht ganz klar, welche Savage-Modelle keine Unterstützung für YV12 in Hardware haben, sodass bei ihnen der Treiber diese Konvertierung sehr langsam vornimmt. Hast du deine Karte in Verdacht, dann besorg dir einen neueren Treiber, oder frag auf der MPlayer-Users-Mailingliste freundlich nach einem Treiber, der MMX/3DNow unterstützt.

4.2.3. nVidia-Karten

nVidia ist für Linux keine optimale Wahll. XFree86's Open-Source-Treiber unterstützt die meisten dieser Karten, jedoch musst du in einigen Fällen die binären Closed-Source-Treiber von nVidia verwenden, verfügbar auf der nVidia-Webseite. Du brauchst diese Treiber immer, wenn du zusätzlich 3D-Beschleunigung haben willst.

Riva128-Karten bieten nicht einmal mit den binären nVidia-Treibern XVideo-Unterstützung (beklag dich bei nVidia).

Wie auch immer, MPlayer enthält einen VIDIX -Treiber für die meisten nVidia-Karten. Er ist aktuell in der Beta-Phase und besitzt einige Nachteile. Mehr Informationen findest du in der nVidia-VIDIX-Sektion.

4.2.4. ATI-Karten

Die GATOS-Treiber, die du einsetzen solltest, sofern du keine Rage128- oder Radeon-Karte hast, haben per Voreinstellung VSYNC angeschaltet. Dies bedeutet, dass die Decodiergeschwindigkeit (!) zur Bildwiederholrate des Monitors synchronisiert wird. Wenn dir die Wiedergabe langsam vorkommt, dann versuche, irgendwie VSYNC abzuschalten, oder setze die Bildwiederholrate des Monitors auf n * (fps des Films) Hz.

Radeon VE - wenn du X benötigst, verwende XFree86 4.2.0 oder höher für diese Karte. Außerdem gibt es keine Unterstützung für den TV-Ausgang. Natürlich bekommst du mit MPlayer Hardware-beschleunigte Wiedergabe, das ganze wahlweise mit oder ohne TV-Ausgang, und es werden dabei nicht einmal weitere Bibliotheken oder X selber benötigt. Lies dazu die VIDIX-Sektion.

4.2.5. NeoMagic-Karten

Diese Chips befinden sich in vielen Laptops. Du musst XFree86 4.3.0 oder höher oder andernfalls die Xv-fähigen Treiber von Stefan Seyfried verwenden. Wähle einfach einen, der zu deiner XFree86-Version passt.

XFree86 4.3.0 beinhaltet die Unterstützung für Xv, Bohdan Horst schickte jetzt einen kleinen Patch auf die XFree86-Quellen, der Framebuffer-Operationen (daher XVideo) bis auf das Vierfache beschleunigt. Der Patch wurde in das XFree86-CVS eingebunden und sollte im nächsten Release nach 4.3.0 vorhanden sein.

Um die Wiedergabe von Video in DVD-Auflösung zu ermöglichen, ändere deine XF86Config wie folgt:

Section "Device"
    [...]
    Driver "neomagic"
    Option "OverlayMem" "829440"
    [...]
EndSection

4.2.6. Trident-Karten

Wenn du Xv mit einer Trident-Grafikkarte benutzen willst, dann installiere XFree86 4.2.0, sofern Xv nicht schon mit 4.1.0 funktioniert. Version 4.2.0 enthält Unterstützung für Xv im Vollbild für Cyberblade XP-Karten.

Alternativ enthält MPlayer einen VIDIX-Treiber für the Cyberblade/i1-Karten.

4.2.7. Kyro/PowerVR-Karten

Wenn du Xv mit einer Kyro-basierten Karte (wie z.B. der Hercules Prophet 4000XT) verwenden möchstest, dann solltest du die Treiber von der PowerVR-Seite herunterladen.

4.3. DGA

PRÄAMBEL.  Dieser Abschnitt versucht, in wenigen Worten zu beschreiben, was DGA generell ist und was der DGA-Videotreiber in MPlayer erreichen kann, und was nicht.

WAS IST DGA?  DGA ist die Abkürzung für Direct Graphics Access (direkter Zugriff auf die Grafikhardware) und gibt Programmen die Möglichkeit, unter Umgehung des X-Servers direkt den Framebuffer der Grafikkarte zu verändern. Technisch gesehen wird das dadurch realisiert, dass der Framebuffer-Speicher in den virtuellen Adressraum des jeweiligen Prozesses abgebildet wird. Das wird vom Kernel aber nur dann zugelassen, wenn der Prozess Superuserprivilegien besitzt. Dazu musst du dich entweder als root anmelden oder das SUID-bit des MPlayer-Binaries setzen (was nicht empfohlen wird).

Von DGA gibt es zwei Versionen: DGA1 kommt mit XFree 3.x.x, und DGA2 wurde mit XFree 4.0.1 eingeführt.

DGA1 bietet nur den oben beschriebenen Zugriff auf den Framebuffer. Die Umschaltung des Videomodus klappt nur mit der XVidMode-Erweiterung.

DGA2 beinhaltet die Features der XVidMode-Erweiterung und erlaubt außerdem, die Farbtiefe zu ändern. Damit kannst du also auf 32bit Farbtiefe umschalten, auch wenn der X-Server gerade mit 15bit Farbtiefe läuft und umgekehrt.

DGA hat aber auch ein paar Nachteile. Die Funktionsweise scheint ein wenig von der Grafikkarte und der Implementierung des Grafikkartentreibers im X-Server abhängig zu sein, der diesen Chip kontrolliert. Es fuktioniert also nicht auf jedem System...

DGA-UNTERSTÜTZUNG FÜR MPLAYER INSTALLIEREN.  Stelle als erstes sicher, dass X die DGA-Erweiterung lädt. Schau in /var/log/XFree86.0.log nach:

(II) Loading extension XFree86-DGA

Wie du siehst, ist XFree86 4.0.x oder neuer sehr zu empfehlen! MPlayers DGA-Treiber wird von ./configure automatisch erkannt. Alternativ kannst du seine Compilierung mit --enable-dga erzwingen.

Falls der Treiber nicht zu einer kleineren Auflösung wechseln konnte, dann experimentiere mit den Optionen -vm (nur bei X 3.3.x), -fs, -bpp, -zoom herum, um einen Videomodus zu finden, in den der Film reinpasst. Momentan gibt es keinen Konverter :(

Werde root. DGA braucht root-Privilegien, um direkt in den Grafikspeicher zu schreiben. Wenn du MPlayer als normaler Nutzer starten möchtest, dann installiere MPlayer mit dem SUID-Bit:

chown root /usr/local/bin/mplayer
chmod 750 /usr/local/bin/mplayer
chmod +s /usr/local/bin/mplayer

Jetzt funktioniert es auch als normaler Benutzer.

Warnung: Sicherheitsrisiko!

Dieses ist ein großes Sicherheitsloch. Tu das niemals auf einem Server oder auf einem Computer, auf den auch andere Leute Zugriff haben, da sie durch einen SUID-root-MPlayer root-Privilegien erlangen können.

Benutze jetzt die Option -vo dga, und ab geht's (hoffe ich zumindest :))! Du solltest auch ausprobieren, ob bei dir die Option -vo sdl:dga funktioniert. Sie ist viel schneller.

ÄNDERN DER AUFLÖSUNG.  Der DGA-Treiber ermöglicht es, die Auflösung des Output-Signals zu ändern. Damit entfällt die Notwendigkeit der (langsamen) Softwareskalierung und bietet gleichzeitig ein Vollbild. Idealerweise würde DGA in die gleiche Auflösung schalten, die das Video (natürlich unter Beachtung des Höhen-/Breitenverhältnisses) hat, aber der X-Server lässt nur Auflösungen zu, die vorher in der /etc/X11/XF86Config bzw. /etc/X11/XF86Config-4 definiert wurden, bezüglich XFree 4.X.X. Diese werden durch sogenannte Modelines festgelegt und hängen von den Fähigkeiten deiner Grafikhardware ab. Der X-Server liest diese Konfigurationsdatei beim Start ein und deaktiviert alle Modelines, die sich nicht mit deiner Hardware vertragen. Du kannst die überlebenden Modelines anhand der X11-Logdatei herausfinden (normalerweise /var/log/XFree86.0.log).

Diese Einträge funktionieren mit einem Riva128-Chip und dem nv.o-X-Server-Treibermodul.

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 & MPLAYER.  DGA wird bei MPlayer an zwei Stellen benutzt: beim SDL-Treiber mit (-vo sdl:driver=dga) oder beim DGA-Treiber selbst (-vo dga). Das oben gesagte gilt für beide Treiber. In den folgenden Abschnitten erkläre ich, wie der DGA-Treiber von MPlayer selber arbeitet.

FEATURES DES DGA-TREIBERS.  Der DGA-Treiber wird durch die Option -vo dga aktiviert. Sein Standardverhalten sieht vor, dass er in die Auflösung schaltet, die der Videoauflösung am nächsten kommt. Der Treiber ignoriert absichtlich die Optionen -vm (Videomodusumschaltung aktivieren) und -fs (Vollbildmodus erzwingen) - er versucht immer, so viel Bildfläche wie möglich durch eine Änderung der Auflösung zu bedecken. Dadurch wird nicht ein einziger weiterer CPU-Takt für die Skalierung des Bildes verwendet. Wenn du mit dem Modus nicht zufrieden bist, den der Treiber gewählt hat, dann kannst du ihn zwingen, denjenigen Modus zu wählen, der am besten zu dem mit den Optionen -x und -y angegebenen Werten passt. Die Option -v veranlasst den DGA-Treiber, neben einigen anderen Dingen auch alle von deiner XF86Config-Datei unterstützen Videomodi aufzulisten. Wenn DGA2 verwendet wird, dann kannst du mit der Option -bpp die Verwendung einer bestimmten Farbtiefe erzwingen. Gültige Werte sind 15, 16, 24 und 32. Es hängt dann von deiner Hardware ab, ob der Modus nativ unterstützt wird oder ob eine (möglicherweise langsame) Konvertierung stattfindet.

Wenn du Glück hast und dir genug unbenutzter Grafikspeicher zur Verfügung steht, um ein komplettes Bild aufzunehmen, dann wird der DGA-Treiber Doppelpufferung verwenden, was zu einer regelmäßigeren Wiedergabe führt. Der DGA-Treiber wird dir mitteilen, ob Doppelpufferung angeschaltet ist oder nicht.

Doppelpufferung bedeutet, dass das nächste Bild deines Videos bereits an einer anderen Stelle im Grafikspeicher aufgebaut wird, während das aktuelle Bild angezeigt wird. Ist das nächste Bild fertig, so wird dem Grafikchip nur noch mitgeteilt, wo er das neue Bild im Speicher finden kann. Somit holt sich der Chip seine Daten einfach von dort. In der Zwischenzeit wird der andere, jetzt unbenutze Puffer wieder mit neuen Videodaten gefüllt.

Doppelpufferung kann mit der Option -double aktiviert und mit -nodouble deaktiviert werden. Momentan ist die Doppelpufferung per Voreinstellung deaktiviert. Wird der DGA-Treiber verwendet, dann funktioniert das Onscreen-Display (ODS) nur dann, wenn auch die Doppelpufferung aktiviert ist. Andererseits kann die Doppelpufferung auch einen großen Geschwindigkeitseinbruch hervorrufen, was stark von der DGA-Implementierung der Treiber für deine Hardware abhängt (auf meinem K6-II+ 525 benötigt Doppelpufferung weitere 20% CPU-Zeit!).

PUNKTE BEZÜGLICH DER GESCHWINDIGKEIT.  Generell gesehen sollte der Zugriff auf den DGA-Framebuffer genauso schnell sein wie der X11-Treiber, wobei man zusätzlich noch ein Vollbild erhält. Die prozentualen Geschwindigkeitswerte, die MPlayer ausgibt, müssen mit Vorsicht genossen werden, da sie z.B. beim X11-Treiber nicht die Zeit beinhalten, die der X-Server tatsächlich zum Anzeigen des Bildes benötigt. Klemm ein Terminal an deinen seriellen Port und starte top, wenn du wissen willst, wie's wirklich mit der Geschwindigkeit aussieht.

Allgemein betrachtet hängt die Geschwindigkeitsverbesserung von DGA gegenüber dem 'normalen' X11-Treiber sehr von deiner Grafikkarte und davon ab, wie gut das X-Servermodul optimiert ist.

Wenn du ein langsames System hast, dann benutz besser eine Farbtiefe von 15 oder 16bit, da sie nur die halbe Bandbreite des 32bit-Farbmodus benötigen.

Einge gute Idee ist auch die Verwendung von 24bit Farbtiefe, selbst dann, wenn deine Grafikkarte nativ nur 32bit unterstützt, da bei 24bit 25% weniger Daten im Vergleich zum 32/32-Modus über den Bus transferiert werden müssen.

Ich habe schon gesehen, wie einige AVI-Dateien auf einem Pentium MMX 266 wiedergegeben werden konnten. AMD K6-2-CPUs werden ab ca. 400 MHz oder höher funktionieren.

BEKANNTE FEHLER.  Die Entwickler von XFree sagen selbst, dass DGA ein ganz schönes Monstrum ist. Sie raten eher davon ab, es zu benutzen, da seine Implementierung in einige Chipset-Treiber für XFree nicht immer ganz fehlerfrei war.

  • Bei der Kombination aus XFree 4.0.3 und dem nv.o-Treiber gibt es einen Fehler, der zu merkwürdigen Farben führt.

  • Die ATI-Treiber müssen den Videomodus mehrmals zurückstellen, nachdem der DGA-Modus verlassen wurde.

  • Einige Treiber schaffen es manchmal einfach nicht, in die vorherige Auflösung zurückzuschalten. Benutze in solch einem Fall Strg+Alt+Keypad + und Strg+Alt+Keypad -, um manuell die Auflösung zu ändern.

  • Einige Treiber zeigen einfach nur merkwürdige Farben an.

  • Manche Treiber lügen, was die von ihnen in den Prozessorspeicher eingeblendete Menge Grafikspeicher anbelangt, weswegen vo_dga nicht die Doppelpufferung verwendet (SIS?).

  • Einige Treiber schaffen es nicht einmal, auch nur einen einzigen gültigen Grafikmodus bereitzustellen. In solchen Fällen gibt der DGA-Treiber schwachsinnige Modi wie z.B. 100000x100000 oder so ähnlich aus.

  • Das OSD funktioniert nur, wenn auch die Doppelpufferung aktiviert ist (sonst flimmert es).

4.4. SDL

SDL (Simple Directmedia Layer, einfacher Layer für den direkten Zugriff auf Mediengeräte) bietet grundsätzlich eine einheitliche Schnittstelle zu Audio- und Videogeräten. Programme, die SDL benutzen, kennen nur SDL und brauchen nichts darüber zu wissen, welche Video- oder Audiotreiber SDL tatsächlich benutzt. So kann z.B. eine Doom-Portierung mit SDL die Svgalib, aalib, X11, fbdev und andere Treiber nutzen. Dazu musst du z.B. nur den Videotreiber angeben, indem du die Umgebungsvariable SDL_VIDEODRIVER setzt. So lautet zumindest die Theorie.

Bei MPlayer benutzten wir damals die Softwareskalierungsroutinen der X11-Treiber von SDL bei Grafikkarten/-treibern, die keine Unterstützung für XVideo hatten, bis wir unsere eigenen schrieben, die schneller und hübscher waren. Wir benutzten damals außerdem SDLs aalib-Ausgabe. Jetzt haben wir unsere eigenen, was wesentlich komfortabler ist. Auch davon haben wir selber eine komfortablere Version geschrieben. SDLs DGA-Code war besser als unserer - zumindest bis vor kurzem. Verstehst du, worauf ich hinauswill? :)

SDL ist auch bei einigen fehlerbehafteten Treibern/Karten nützlich, wenn das Video ruckelig abgespielt wird (und es nicht an einem langsamen System liegt), oder wenn der Ton hinterherhinkt.

Die SDL-Videoausgabe unterstützt die Anzeige von Untertiteln unterhalb des Films auf den schwarzen Balken (sofern diese vorhanden sind).

4.5. SVGAlib

INSTALLATION.  Du musst zuerst die svgalib und die dazugehörigen Entwicklerpakete installieren, bevor du MPlayer compilierst, da er sonst die Svgalib nicht automatisch findet und den Treiber dazu nicht compiliert (das kann aber trotzdem erzwungen werden). Vergiss auch nicht, in /etc/vga/libvga.config richtige Werte für deine Grafikkarte und deinen Monitor anzugeben.

Anmerkung

Verwende nicht die Option -fs, da sie die Benutzung des Softwareskalierers erzwingt und das ganze dann langsam wird. Wenn du diese Option wirklich brauchst, dann verwende auch -sws 4, welche zwar schlechte Qualität produziert, dafür aber auch ein wenig schneller ist.

EGA(4bpp)-UNTERSTÜTZUNG.  SVGAlib beinhaltet die EGAlib, und MPlayer kann damit jeden Film in 16 Farben bei folgenden Modi anzeigen:

  • EGA-Karte mit EGA-Monitor: 320x200x4bpp, 640x200x4bpp, 640x350x4bpp

  • EGA-Karte mit CGA-Monitor: 320x200x4bpp, 640x200x4bpp

Der bpp-Wert (Bits pro Pixel) muss von Hand auf vier gesetzt werden: -bpp 4

Die Auflösung des Films muss wahrscheinlich verkleinert werden, damit er in den EGA-Modus reinpasst:

-vf scale=640:350

oder

-vf scale=320:200

Dafür brauchen wir eine schnelle, aber schlechte Qualität produzierende Skalierroutine:

-sws 4

Eventuell muss die automatische Anpassung des Höhen-/Breitenverhältnisses ausgeschaltet werden:

-noaspect

Anmerkung

Die besten Ergebnisse bei EGA-Bildschirmen erhält man meiner Erfahrung nach, wenn man die Helligkeit ein wenig verringert: -vf eq=-20:0. Ich musste auch die Audiosamplerate reduzieren, weil bei 44KHz der Sound nicht richtig funktionierte: -srate 22050.

Du kannst das OSD und Untertitel mit dem expand-Filter aktivieren. Die Manpage enthält die exakten Parameter.

4.6. Framebuffer-Ausgabe (FBdev)

./configure erkennt automatisch, ob es den Framebuffertreiber (fbdev) compilieren soll oder nicht. Lies die Framebufferdokumentation in den Kernelquellen (Documentation/fb/*); dort stehen mehr Informationen.

Falls deine Karte den VBE 2.0-Standard nicht unterstützt (wie z.B. ältere ISA-/PCI-Karten wie die S3 Trio64) oder nur VBE 1.2 und älter unterstützt: Tja, dann kannst du immer noch VESAfb benutzen, benötigst aber den SciTech Display Doctor (ehemals UniVBE), der vor dem Booten von Linux geladen werden muss. Nimm dazu eine DOS-Bootdiskette oder was auch immer. Vergiss nicht, deine Kopie von UniVBE zu registrieren ;).

Die Fbdev-Ausgabe kennt neben den üblichen Parametern noch einige andere:

-fb

Gibt das zu verwendende Framebuffergerät an (Standard: /dev/fb0)

-fbmode

Gibt zu benutzenden Modusnamen an (wie sie in /etc/fb.modes stehen)

-fbmodeconfig

Konfigurationsdatei für die Modi (Standard: /etc/fb.modes)

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

Wichtige Werte, schau dir die example.conf an.

Wenn du in einen speziellen Modus wechseln willst, dann benutze

mplayer -vm -fbmode Modusname Dateiname

  • -vm ohne weitere Optionen wird den am besten passenden Modus aus /etc/fb.modes auswählen. Kann auch zusammen mit -x und -y benutzt werden. Die Option -flip wird nur dann unterstützt, wenn das Pixelformat des Films mit dem Pixelformat des Videomodus übereinstimmt. Pass auf den bpp-Wert auf. fbdev wird den aktuell eingestellten benutzen, wenn du nicht mit -bpp einen bestimmten angibst.

  • Die Option -zoom wird nicht unterstützt (Softwareskalierung ist langsam, verwende -vf scale). Du kannst keine Modi mit 8bpp oder weniger benutzen.

  • Wahrscheinlich wirst du den Cursor (

    echo -e '\033[?25l'

    oder

    setterm -cursor off

    ) und den Bildschirmschoner (setterm -blank 0) deaktivieren wollen. Um den Cursor wieder zu aktivieren:

    echo -e '\033[?25h'

    oder

    setterm -cursor on

    .

Anmerkung

fbdev kann den Videomodus in Verbindung mit dem VESA-Framebuffer nicht ändern. Frag auch nicht danach - das ist keine Einschränkung seitens MPlayer.

4.7. Matrox-Framebuffer (mga_vid)

mga_vid ist eine Kombination aus einem Videoausgabetreiber und Linux-Kernelmodul, das die Matrox G200/G400/G450/G550 Scaler-/Overlay-Einheit verwendet, um YUV->RGB-Farbraumkonvertierungen und beliebige Videoskalierungen durchzuführen. mga_vid bietet Unterstützung für Hardware-VSYNC und Dreifachpufferung. Dieser Treiber funktioniert sowohl unter der Framebufferconsole als auch unter X, jedoch nur mit Linux 2.4.x.

Für eine Version für Linux 2.6.x gehe auf http://attila.kinali.ch/mga/.

Installation:

  1. Um den Treiber benutzen zu können, musst du erstmal mga_vid.o compilieren:

    cd drivers
    make

  2. Führe dann (als root) folgenden Befehl aus:

    make install

    Dies sollte das Modul installieren und das Device-Node für dich erstellen. Lade den Treiber mit

    insmod mga_vid.o

  3. Du solltest sicherstellen, dass das Modul die Größe des Grafikkartenspeichers korrekt ermittelt hat. Benutze dazu dmesg. Wenn die Angabe nicht stimmt, dann gib nach rmmod mga_vid mit Hilfe der Option mga_ram_size die Größe explizit an:

    insmod mga_vid.o mga_ram_size=16

  4. Wenn das Modul automatisch geladen und entladen werden soll, sobald es benötigt wird, so füge die folgende Zeile in der Datei /etc/modules.conf ein:

    alias char-major-178 mga_vid

  5. Schließlich musst du noch MPlayer (erneut) compilieren. configure wird automatisch /dev/mga_vid finden und den 'mga'-Treiber erstellen. Die entsprechende Option für MPlayer lautet -vo mga, wenn du mit dem matroxfb auf der Console arbeitest, oder -vo xmga, wenn du unter XFree 3.x.x oder XFree 4.x.x arbeitest.

Der mga_vid-Treiber kooperiert mit Xv.

Das Gerät /dev/mga_vid kann z.B. mit

cat /dev/mga_vid

ausgelesen werden, um ein paar Informationen über den aktuellen Zustand zu erhalten. Die Helligkeit kann zusätzlich mit z.B.

echo "brightness=120" > /dev/mga_vid

angepasst werden.

Es gibt ein Testprogramm namens mga_vid_test im selben Verzeichnis. Es sollte 256x256 große Bilder auf den Schirm zeichnen, wenn alles gut funktioniert.

4.8. 3dfx-YUV-Unterstützung (tdfxfb)

Dieser Treiber verwendet den tdfx-Framebuffertreiber des Kernels, um Filme mit YUV-Beschleunigung abzuspielen. Deswegen benötigst du einen Kernel mit tdfxfb-Unterstütztung. Danach musst du MPlayer compilieren mit

./configure --enable-tdfxfb

4.9. tdfx_vid

Dies ist eine Kombination aus Linux-Kernelmodul und einem Videoausgabetreiber, ähnlich mga_vid. Du wirst einen 2.4.x-Kernel mit dem agpgart-Treiber brauchen, denn tdfx_vid verwendet AGP. Übergib --enable-tdfxfb an configure, um den Videoausgabetreiber zu erstellen, und erzeuge das Kernelmodul nach folgenden Anweisungen.

Das tdfx_vid.o-Kernelmodul installieren:

  1. Compiliere tdfx_vid.o:

    cd drivers
    make

  2. Führe dann (als root) folgenden Befehl aus:

    make install

    Dies sollte das Modul installieren und das Device-Node für dich erstellen. Lade den Treiber mit

    insmod tdfx_vid.o

  3. Um es automatisch nach Bedarf zu laden bzw. zu entfernen, füge folgende Zeile am Ende von /etc/modules.conf hinzu:

    alias char-major-178 tdfx_vid

Es gibt ein Testprogramm namens tdfx_vid_test im selben Verzeichnis. Es sollte nützliche Informationen ausgeben, wenn alles gut funktioniert.

4.10. OpenGL-Ausgabe

MPlayer unterstützt die Ausgabe von Filmen via OpenGL. Wenn aber deine Plattform/dein Treiber Xv unterstützt (was bei PCs mit Linux praktisch immer der Fall ist), dann benutze besser Xv, da die OpenGL-Geschwindigkeit deutlich geringer als die von Xv ist. Wenn du dagegen eine X11-Implementierung hast, die Xv nicht unterstützt, so mag OpenGL eine brauchbare Alternative sein.

Leider unterstützen nicht alle Treiber die erforderlichen Features. Die Utah-GLX-Treiber (für XFree86 3.3.6) unterstützen sie für alle Karten. Auf http://utah-glx.sf.net findest du Details zur Installation.

XFree86(DRI) 4.0.3 oder neuer unterstützt OpenGL mit Matrox- und Radeon-Karten, 4.2.0 und neuer unterstützen zusätzlich Rage128. Auf http://dri.sf.net findest du Details zur Installation.

Ein Hinweis von einem unserer User: der GL-Video-Output kann dazu verwendet werden, einen vertikal synchronisierten TV-Output zu bekommen. Du musst dann eine Umgebungsvariable setzen (zumindest bei nVidia):

export __GL_SYNC_TO_VBLANK=1

4.11. AAlib - Ausgabe im Textmodus

AAlib ist eine Bilbiothek, mit der Grafiken im Textmodus angezeigt werden, wobei ein mächtiger Textmodusrenderer angewandt wird. Es gibt SEHR viele Programme, die das bereits unterstützen, wie z.B. Doom, Quake etc. MPlayer enthält einen sehr gut brauchbaren Treiber für AAlib. Wenn ./configure feststellt, dass die AAlib installiert ist, dann wird anschließend der AAlib-Treiber gebaut.

Du kannst diese Tasten im AA-Fenster benutzen, um die Render-Optionen zu beeinflussen:

TasteAktion
1 Kontrast verringern
2 Kontrast erhöhen
3 Helligkeit verringern
4 Helligkeit erhöhen
5 Schnelles Rendern an-/ausschalten
6 Wahl des Farbverteilungsmodus (keiner, Fehlerverteilung, Floyd Steinberg)
7 Bild invertieren
8 schaltet zwischen den MPlayer- und den AA-Tastenbelegungen um

Die folgenden Kommandozeilenparamter stehen zur Verfügungung:

-aaosdcolor=V

OSD-Farbe ändern

-aasubcolor=V

Farbe der Untertitel ändern,

V kann folgende Werte annehmen: 0 (normal), 1 (dunkel), 2 (fett), 3 (fette Schrift), 4 (negative Farben), 5 (spezial).

Die AAlib selbst bietet ebenfalls eine große Anzahl von Optionen. Hier sind die wichtigsten:

-aadriver

Wählt den empfohlenen aa-Treiber (X11, curses, Linux).

-aaextended

Benutze alle 256 Zeichen.

-aaeight

Benutze 8 Bit ASCII-Zeichen.

-aahelp

Gib alle aalib-Optionen aus.

Anmerkung

Das Rendern ist sehr CPU-intensiv, vor allem, wenn AA unter X benutzt wird. AAlib braucht auf einer Nicht-Framebuffer-Console am wenigstens CPU-Zeit. Benutze SVGATextMode, um einen möglichst großen Textmodus zu wählen, und genieß den Film! (Hercules-Karten als zweites Ausgabegerät rocken :)) (Aber IMHO kannst du die Option -vf 1bpp anwenden, um Grafiken auf hgafb zu bekommen :)

Wenn dein Computer nicht schnell genug ist, um alle Frames anzuzeigen, dann benutze die Option -framedrop.

Wenn du auf einem Terminal abspielst, dann erzielst du mit dem Linux- Treiber (-aadriver linux) bessere Ergebnisse als mit dem curses- Treiber. Allerdings benötigst du dafür auch Schreibrechte auf /dev/vcsa<Terminal>. Das wird von aalib nicht automatisch festgestellt, aber vo_aa versucht, den besten Modus herauszufinden. Lies http://aa-project.sf.net/tune für weitere Tuningtipps.

4.12. libcaca - Color ASCII Art-Bibliothek

Die Bibliothek libcaca ist eine Grafik-Bibliothek, die Text anstatt Pixel ausgibt, sodass sie auf älteren Grafikkarten oder Text-Terminals läuft. Sie ist der bekannten Bibliothek AAlib nicht unähnlich. libcaca benötigt ein Terminal, um zu funktionieren, deshalb sollte sie auf allen Unix-Systemen (inklusive Mac OS X) funktionieren, wenn man entweder die slang-Bibliothek oder die ncurses-Bibliothek, unter DOS die conio.h-Bibliothek und auf Windows-Systemen entweder slang oder ncurses (durch Cygwin-Emulation) oder conio.h verwendet. Wenn ./configure libcaca entdeckt, wird der caca-Treiber gebaut.

Die Unterschiede zu AAlib sind folgende:

  • 16 verfügbare Farben für die Zeichenausgabe (256 Farbpaare)

  • Farbbild-Dithering

Aber libcaca hat auch folgende Einschränkungen:

  • keine Unterstützung für Helligkeit, Kontrast, Gamma

Du kannst diese Tasten im caca-Fenster benutzen, um die Render-Optionen zu beeinflussen:

TasteAktion
d zwischen den Dithering-Methoden von libcaca umschalten.
a zwischen dem Antialiasing von libcaca umschalten.
b zwischen dem Hintergrund libcaca umschalten.

libcaca sucht auch nach bestimmten Umgebungsvariablen:

CACA_DRIVER

Setze den empfohlenen caca-Treiber. z.B. ncurses, slang, x11.

CACA_GEOMETRY (nur bei X11)

Spezifiziere die Anzahl der Spalten und Zeilen, z.B. 128x50.

CACA_FONT (nur bei X11)

Legt die zu verwendende Schrift fest, z.B. fixed, nexus.

Nimm die Option -framedrop, wenn dein Rechner nicht schnell genug für die Darstellung aller Frames ist.

4.13. VESA-Ausgabe über das VESA-BIOS

Dieser Treiber ist vom Design her ein generischer Treiber für alle Grafikkarten, deren Bios VESA VBE 2.0 unterstützt. Ein weiterer Vorteil dieses Treibers liegt darin, dass er versucht, den TV-Ausgang anzuschalten. VESA BIOS EXTENSION (VBE) Version 3.0 Date: September 16, 1998 (Seite 70) hat folgendes zu sagen:

Designs für zwei Controller.  VBE 3.0 unterstützt zwei Controller dadurch, dass angenommen wird, dass beide Controller vom gleichen OEM (Hardwarehersteller) stammen und unter Kontrolle desselben BIOS auf derselben Grafikkarte sitzen. Somit ist es möglich, die Tatsache, dass zwei Controller vorhanden sind, vor der Anwendung zu verbergen. Dies verhindert zwar, dass beide Controller unabhängig voneinander gesteuert werden, erlaubt andererseits aber, dass Anwendungen weiterhin problemlos funktionieren, die vor Erscheinen der VBE-3.0-Spezifikation geschrieben wurden. Die VBE-Funktion 00h (Auskunft über die Controller, Return Controller Information) gibt dementsprechend die kombinierten Informationen über beide Controller zurück, was auch eine kombinierte Liste der vorhandenen Grafikmodi einschließt. Sobald eine Anwendung einen Grafikmodus wählt, wird der entsprechende Controller aktiviert. Alle weiteren VBE-Funtkionen werden dann auf diesem Controller ausgeführt.

Somit hast du also eine Chance, den TV-Ausgang mit diesem Treiber zum Laufen zu bringen. (Ich vermute, dass der TV-Ausgang normalerweise auf einer separaten Grafikkarte oder zumindest ein separater Ausgang ist.)

VORTEILE

  • Du hast die Möglichkeit, selbst dann Filme anzusehen, wenn Linux nichts von deiner Grafikhardware weiß.

  • Du musst keine einzige Grafikanwendung installiert haben (wie X11/XFree86, fbdev usw.). Dieser Treiber wird im Textmodus benutzt.

  • Die Chancen stehen gut, dass der TV-Ausgang funktioniert. (Es läuft nachweislich zumindest auf ATI-Karten.)

  • Dieser Treiber ruft die int 10h-Routine wirklich auf und ist dementsprechend kein Emulator - er ruft echte Funktionen des echten BIOS im Real-Modus auf (bzw. im vm68-Modus).

  • Du kannst den Treiber zusammen mit VIDIX verwenden und erhältst dadurch gleichzeitig eine hardwarebeschleunigte Grafikanzeige und den TV-Ausgang! (für ATI-Karten empfohlen)

  • Wenn du ein VESA-VBE-3.0+-BIOS hast und irgendwo die Optionen monitor-hfreq, monitor-vfreq, monitor-dotclock angegeben werden (Kommandozeile, Konfigurationsdatei), dann bekommst du die höchstmögliche Bildwiederholrate (mit den generischen Timingformeln). Um dieses Feature zu aktivieren, müssen alle Monitoroptionen angegeben werden.

NACHTEILE

  • Der Treiber funtkioniert nur auf x86-Systemen.

  • Er kann nur von root benutzt werden.

  • Momentan ist er nur für Linux verfügbar.

Wichtig

Benutze diesen Treiber nicht mit GCC 2.96! Das wird nicht funktionieren!

BEI VESA VERFÜGBARE KOMMANDOZEILENOPTIONEN

-vo vesa:opts

Momentan erkannt: dga, um den DGA-Modus zu erzwingen und nodga, um ihn zu deaktivieren. Im DGA-Modus kannst du den Doppelpuffermodus mit -double aktivieren. Anmerkung: Du kannst diese Parameter auch weglassen, um die automatische Erkennung des DGA-Modus zu ermöglichen.

BEKANNTE PROBLEME UND WIE MAN SIE UMGEHT

  • Wenn du unter Linux eine NLS-Schrift verwendest und du den VESA-Treiber aus dem Textmodus heraus aufrufst, dann wird nach dem Beenden von MPlayer die ROM-Schrift anstelle der nationalen geladen sein. Du kannst die nationale Schriftart erneut mit setsysfont laden, das z.B. bei Mandrake zur Distribution gehört. (Tip: Das gleiche Tool wird für die Lokalisation von fbdev verwendet.)

  • Manche Linux-Grafiktreiber aktualisieren nicht den aktiven BIOS-Modus im DOS-Speicher. Wenn du also so ein Problem hast, dann verwende den VESA-Treiber nur aus dem Textmodus heraus. Andernfalls wird immer der Textmodus (#03) aktiviert werden, und du wirst den Computer neustarten müssen.

  • Oftmals siehst du nur einen schwarzen Bildschirm, wenn der VESA-Treiber beendet wird. Um die Anzeige wieder in den richtigen Zustand zu versetzen, wechsele einfach zu einer anderen Console (mit Alt+F<x>) und wieder zurück.

  • Um eine funktionierende TV-Ausgabe zu erhalten, musst du das TV-Kabel eingesteckt haben, bevor du deinen PC bootest, da das BIOS nur einmal während der POST-Phase initialisiert wird.

4.14. X11

Vermeide diesen Treiber, wenn's geht. Er benutzt X11 (mit den Shared- Memory-Erweiterungen) ohne jegliche Hardwarebeschleunigung. Unterstützt MMX-/3DNow/SSE-beschleunigte Softwareskalierung mit den Optionen -fs -zoom, aber die ist trotzdem langsam. Die meisten Karten bieten Unterstützung für Hardwareskalierung. Benutze also -vo xv in den meisten Fällen bzw. -vo xmga bei Matrox-Karten.

Ein Problem liegt darin, dass die meisten Grafikkartentreiber Hardwarebeschleunigung nicht beim zweiten Ausgang/beim TV-Ausgang unterstützen. In diesen Fällen siehst du nur ein grünes/blaues Fenster anstelle des Films. Hier ist der X11-Treiber ganz praktisch, aber du brauchst trotzdem eine schnelle CPU für die Softwareskalierung. Benutze nicht den SDL-Ausgabetreiber und SDLs Skalierer, da dieser eine schlechtere Qualität bietet!

Softwareskalierung ist sehr langsam. Versuch also besser, vorher in einen anderen Videomodus zu schalten. Das ist sehr einfach. Such die Modelines in der DGA-Sektion und füge sie in deine XF86Config ein.

  • Wenn du XFree86 4.x.x hast, dann benutze die Option -vm. MPlayer wird dann die Auflösung in diejenige ändern, in die dein Film am besten hineinpasst. Wenn das nicht funktioniert:

  • Unter XFree86 3.x.x musst du mit Strg+Alt+Keypad + und Strg+Alt+Keypad - die Auflösung ändern.

Wenn du die soeben eingefügten Modi nicht wiederfindest, dann schau dir die Ausgabe von XFree86 an. Einige Treiber können nicht die niedrigen Pixelclock-Werte benutzen, die für niedrige Auflösungen vonnöten sind.

4.15. VIDIX

EINLEITUNG.  VIDIX ist die Abkürzung für VIDeo Interface für *niX (Video-Schnittstelle für *n*x). VIDIX wurde entworfen, um eine Schnittstelle für schnelle Userspacetreiber für Grafikkarten zur Verfügung zu stellen, so wie es mga_vid für Matrox-Karten tut. VIDIX ist ebenfalls sehr portabel.

Diese Schnittstelle wurde als Versuch entworfen, den vorhandenen Schnittstellen für Videobeschleunigung (mga_vid, rage128_vid, radeon_vid, pm3_vid) ein einheitliches Dach zu geben. Sie stellt einen einheitlichen Highlevel-Zugang zu BES- und OV-Chips zur Verfügung (BackEnd Scaler und Video Overlays). Sie stellt keine Lowlevel-Funktionen für z.B. Grafikserver zur Verfügung. (Ich möchte nicht mit den X11-Leuten in Sachen Grafikmodusumschaltung konkurrieren.) Das Ziel dieser Schnittstelle liegt also einfach darin, die höchstmögliche Geschwindigkeit bei der Videowiedergabe zu erreichen.

VERWENDUNG

  • Du kannst den eigenständigen Videotreiber benutzen: -vo vidix Dieser Treiber wurde als das X11-Frontend für die VIDIX-Technologie entwickelt. Er benötigt dementsprechend einen X-Server und funktioniert auch nur unter X. Beachte, dass der Pixmap-Cache korrumpiert werden kann, weil der Treiber unter Umgehung des X-Treibers direkt auf die Hardware zugreift. Du kannst das dadurch verhindern, dass du die von X verwendete Menge des Grafikspeichers verringerst. Benutze dafür die Option "VideoRam" in der "device"-Sektion der XF86Config. Du solltest da die installierte Menge Grafikspeicher minus 4MB eintragen. Wenn du über weniger als 8MB Grafikspeicher verfügst, dann solltest du stattdessen die Option "XaaNoPixmapCache" in der "screen"-Sektion verwenden.

  • Es gibt einen VIDIX-Treiber für die Konsole: -vo cvidix. Dieser benötigt für die meisten Karten einen funktionierenden und initialisierten Framebuffer (oder du wirst stattdessen den Bildschirm in Unordnung bringen) und wirst einen Effekt ähnlich wie mit -vo mga oder -vo fbdev bekommen. nVidia-Karten sind dagegen in der Lage, wirklich grafisches Video auf einer echten Text-Konsole auszugeben. Im Abschnitt nvidia_vid wirst du mehr Informationen dazu finden. Um Text an den Rändern und den blinkenden Cursor loszuwerden, probiere etwas wie den folgenden Befehl:

    setterm -cursor off > /dev/tty9

    (welcher davon ausgeht, dass tty9 bis dahin ungenutzt ist). Wechsle dann zu tty9. Andererseits sollte dir -colorkey 0 ein Video liefern, das im "Hintergrund" läuft; das hängt jedoch davon ab, dass die colorkey-Funktionalität korrekt funktioniert.

  • Du kannst auch das VIDIX-Untergerät verwenden, das bei vielen Treibern zur Verfügung steht: -vo vesa:vidix (nur unter Linux) und -vo fbdev:vidix

Es ist in der Tat nicht wichtig, welcher Videoausgabetreiber mit VIDIX verwendet wird.

ANFORDERUNGEN

  • Die Grafikkarte sollte sich gerade im Grafikmodus befinden (ausser nVidia-Karten mit den -vo cvidix Ausgabe-Treibern).

  • MPlayers Videoausgabetreiber sollte den aktiven Videomodus kennen und in der Lage sein, dem VIDIX-Untergerät ein paar Charakteristika des X-Servers mitzuteilen.

BEDIENUNGSMETHODEN.  Wenn VIDIX als Subgerät (-vo vesa:vidix) benutzt wird, dann wird die Konfiguration des Videomodus vom Videoausgabegerät erledigt (kurz vo_server). Deswegen kannst du für MPlayer die gleichen Kommandozeilenparameter wie für vo_server verwenden. Zusätzlich ist die Option -double als global sichtbarer Parameter verfügbar. (Ich empfehle diese Option zumindest bei VIDIX und ATI-Karten.) -vo xvidix erkennt momentan die folgenden Optionen: -fs -zoom -x -y -double.

Du kannst den VIDIX-Treiber auch direkt als drittes Teilargument auf der Kommandozeile angeben:

mplayer -vo xvidix:mga_vid.so -fs -zoom -double Datei.avi

oder

mplayer -vo vesa:vidix:radeon_vid.so -fs -zoom -double -bpp 32 Datei.avi

Das ist allerdings gefährlich, und du solltest das lieber nicht tun. Hierbei wird die Verwendung des angegebenen Treibers erzwungen, und das Resultat ist unklar (dein Computer könnte sogar abstürzen). Du solltest das wirklich NUR DANN tun, wenn du absolut sicher bist, dass es funktioniert und MPlayer es nicht eh schon automatisch auswählt. Berichte den Entwicklern von deinen Erfahrungen. Die korrekte Art, VIDIX zu benutzen, ist ohne das dritte Teilargument, sodass MPlayer automatisch den richtigen Treiber aussucht.

Da VIDIX direkten Zugriff auf die Hardware benötigt, musst du MPlayer entweder als root starten oder der Programmdatei das SUID-Bit setzen (WARNUNG: Das ist ein Sicherheitsrisiko!). Alternativ kannst du auch spezielle Kernelmodule benutzen:

  1. Lade dir die Entwicklerversion der svgalib herunter (z.B. 1.9.17), ODER lade dir eine von Alex speziell für die Benutzung mit MPlayer modifizierte Version (die nicht die svgalib-Sourcen zum Compilieren benötigt) hier herunter.

  2. Compiliere das Modul im svgalib_helper-Verzeichnis (das im Verzeichnis svgalib-1.9.17/kernel/ gefunden werden kann, wenn du die Sourcen von der svgalib-Seite heruntergeladen hast), und lade es mit insmod.

  3. Um die entsprechenden Geräte im /dev-Verzeichnis zu erstellen, führe ein

    make device

    im Verzeichnis svgalib_helper als root aus.

  4. Verschiebe das Verzeichnis svgalib_helper in das vidix-Unterverzeichnis des MPlayer-Quellbaums.

  5. Entferne den Kommentar vor der CFLAGS-Zeile, die "svgalib_helper" enthält aus vidix/Makefile.

  6. Compiliere erneut.

4.15.1. ATI-Karten

Momentan werden die meisten ATI-Karten unterstützt, von der Mach64 bis hin zur neuesten Radeon.

Es gibt zwei compilierte Binaries: radeon_vid für Radeons und rage128_vid für Rage128-Karten. Du kannst entweder eine der beiden erzwingen oder das VIDIX-System automatisch alle verfügbaren Treiber ausprobieren lassen.

4.15.2. Matrox-Karten

Matrox G200, G400, G450 und G550 sollen funktionieren.

Der Treiber unterstützt Videoequalizer und sollte fast genauso schnell wie der Matrox-Framebuffer sein.

4.15.3. Trident-Karten

Es gibt einen Treiber für den Trident Cyberblade/i1-Chipsatz, der auf VIA Epia-Mainboards eingesetzt wird.

Der Treiber wurde geschrieben und wird weiterentwickelt von Alastair M. Robinson.

4.15.4. 3DLabs-Karten

Auch wenn es einen Treiber für 3DLabs GLINT R3-Chips und Permedia3-Chips gibt, so hat noch niemand diese getestet. Feedback wird deswegen gern gesehen.

4.15.5. nVidia-Karten

Ein einmaliges Feature des nvidia_vid-Treibers ist seine Fähigkeit, Video auf einfacher, purer Textkonsole darzustellen - ohne Framebuffer oder X magic oder was auch immer. Zu diesem Zweck müssen wir die cvidix-Videoausgabe verwenden, wie folgendes Beispiel zeigt:

mplayer -vo cvidix example.avi

4.15.6. SiS-Karten

Dies ist ein sehr experimenteller Code, ähnlich nvidia_vid.

Er wurde auf SiS 650/651/740 getestet (die verbreitetsten Chipsets in den SiS-Versionen der Boxen von "Shuttle XPC"-Barebones)

Berichte erwartet!

4.16. DirectFB

"DirectFB ist eine Grafikbibliothek, deren Zielplattform eingebettete Systeme sind. Sie bietet maximale Hardwarebeschleunigung bei minimalem Ressourcenverbrauch und minimalem Overhead." - Zitat von http://www.directfb.org.

Ich lasse die DirectFB-Features in dieser Sektion weg.

Obwohl MPlayer nicht als "Videoprovider" bei DirectFB unterstützt wird, bietet dieser Treiber Videowiedergabe mittels DirectFB. Die Wiedergabe ist - natürlich - hardwarebeschleunigt. Bei meiner Matrox G400 war der DirectFB genauso schnell wie XVideo.

Versuche immer die neueste Version von DirectFB zu verwenden. Du kannst DirectFB-Optionen mit der -dfbopts-Option auf der Kommandozeile angeben. Layer-Auswahl erfolgt durch Angabe als Teilargument, z.B. mit -vo directfb:2 (Layer -1 ist der Standardwert: automatische Layerauswahl).

4.17. DirectFB/Matrox (dfbmga)

Bitte lies die DirectFB-Sektion zu generellen Informationen über DiretcFB.

Dieser Videoausgabetreiber wird auf einer Matrox G400/G450/G550-Karten den CRTC2 (des zweiten Ausgangs) aktivieren und damit das Video unabhängig vom primären Ausgang anzeigen.

Anweisungen, um dies zum Laufen zu bringen, stehen direkt in der HOWTO oder der README auf der Homepage von Ville Syrjala.

Anmerkung

Die erste DirectFB-Version, mit der wir das zum Laufen gebracht haben, war 0.9.17 (sie ist fehlerhaft, benötigt den surfacemanager von oben erwähnter URL). Wie auch immer, eine Portierung des CRTC2-Codes für mga_vid ist bereits in Arbeit. Patches sind willkommen.

4.18. MPEG-Dekoderkarten

4.18.1. DVB-Output und -Input

MPlayer unterstützt Karten mit dem Siemens-DVB-Chipsatz von Herstellern wie Siemens, Technotrend, Galaxis oder Hauppauge. Die neuesten DVB-Treiber gibt's auf der Linux TV-Seite. Wenn du Transcodierung in Software machen willst, dann brauchst du eine CPU mit mindestens 1GHz.

configure sollte automatisch deine DVB-Karte erkennen. Wenn es das nicht tut, dann erzwinge DVB-Unterstützung mit

./configure --enable-dvb

Wenn die ost-Headerdateien nicht an ihrem normalen Platz liegen, dann gib explizit den Pfad zu ihnen an mit:

./configure --extra-cflags=DVB-Source-Verzeichnis/ost/include

Dann compiliere und installiere wie sonst auch.

GEBRAUCH.  Hardwaredecodierung von Streams, die MPEG-1/2 Video und/oder MPEG-Audio enthalten, geschieht mit diesem Kommando:

mplayer -ao mpegpes -vo mpegpes Datei.mpg|vob

Decodierung jeder Art Videostream verlangt Transcodierung zu MPEG-1, daher ist es langsam und den Ärger möglicherweise nicht wert, vor allem, wenn dein Computer langsam ist. Es kann folgenderweise gemacht werden:

mplayer -ao mpegpes -vo mpegpes DateieDatei.ext
mplayer -ao mpegpes -vo mpegpes -vf expand DateieDatei.ext

Beachte, dass DVB-Karten nur bestimmte Bildhöhen unterstützen: 288 und 576 für PAL und 240 und 480 für NTSC. Du musst das Bild vorher skalieren, wenn die Höhe nicht einer der oben erwähnten entspricht: -vf scale=width:height. DVB-Karten unterstützen eine Vielzahl horizontaler Auflösungen wie z.B. 720, 704, 640, 512, 480, 352 etc. Sie machen Hardwareskalierung in horizontaler Richtung, sodass du meist nicht in horizontaler Richtung skalieren musst. Bei einem 512x384-MPEG4 (DivX) (Verhältnis 4:3) kannst du folgendes probieren:

mplayer -ao mpegpes -vo mpegpes -vf scale=512:576

Wenn du einen Breitwandfilm hast und du ihn nicht auf die volle Höhe skalieren möchtest, dann kannst du den expand=w:h-Filter benutzen, um schwarze Balken hinzuzufügen. Um ein 640x384-MPEG4 (DivX) anzuschauen:

mplayer -ao mpegpes -vo mpegpes -vf expand=640:576 Datei.avi

Wenn deine CPU für 720x576-MPEG4 (DivX) zu langsam ist, dann skaliere herunter:

mplayer -ao mpegpes -vo mpegpes -vf scale=352:576 Datei.avi

Wenn sich die Geschwindigkeit nicht verbessert, dann skaliere auch in vertikaler Richtung:

mplayer -ao mpegpes -vo mpegpes -vf scale=352:288 Datei.avi

Für ein OSD und Untertitel kannst du das OSD-Feature des expand- Filters benutzen. Anstelle von expand=w:h oder expand=w:h:x:y benutzt du dafür expand=w:h:x:y:1 (der fünfte Parameter :1 schaltet die OSD-Anzeige an). Eventuell willst du das Bild ein wenig nach oben schieben, um unten mehr Platz für die Untertitel zu haben. Vielleicht willst du auch die Untertitel hochschieben, wenn sie ansonsten außerhalb des sichtbaren Bereiches des Fernsehers liegen. Das kannst du mit -subpos <0-100> erreichen, wobei -subpos 80 meistens eine gute Wahl darstellt.

Um Filme mit weniger/mehr als 25 Frames pro Sekunde auf einem PAL-Fernseher abzuspielen, oder wenn du eine langsame CPU hast, verwende die Option -framedrop.

Um das Höhen-/Breitenverhältnis des MPEG-4 (DivX) beizubehalten und trotzdem die optimalen Skalierungsparameter zu verweden (Hardwareskalierung in horizontaler Richtung und Softwareskalierung in vertikaler Richtung unter Beibehaltung des richtigen Höhen-/Breitenverhältnisses), benutze den neuen dvbscale-Filter:

for a  4:3 TV: -vf dvbscale,scale=-1:0,expand=-1:576:-1:-1:1
for a 16:9 TV: -vf dvbscale=1024,scale=-1:0,expand=-1:576:-1:-1:1

Digitales TV (DVB-Input-Modul).  Du kannst deine DVB-Karte zum Ansehen digitalen TVs verwenden.

Du solltest die Programme scan und szap/tzap/czap/azap installiert haben; sie sind alle im Treiberpaket enthalten.

Überprüfe, ob die Treiber sauber mit dem Programm wie etwa dvbstream arbeiten (das ist die Basis des DVB-Input-Moduls).

Jetzt solltest du eine Datei ~/.mplayer/channels.conf mit der von szap/tzap/czap/azap Syntax compilieren oder es von scan für dich compilieren lassen.

Hast du mehr als einen Kartentyp (z.B. Satellit, Antenne, Kabel und ATSC), kannst du deine Kanaldateien als ~/.mplayer/channels.conf.sat, ~/.mplayer/channels.conf.ter, ~/.mplayer/channels.conf.cbl, und ~/.mplayer/channels.conf.atsc respektive speichern, um MPlayer unbedingt darauf hinzuweisen, eher diese Dateien zu verwenden als ~/.mplayer/channels.conf, und du musst angeben, welche Karte du verwendest.

Stelle sicher, dass du nur frei ausgestrahlte Kanäle in deiner Datei channels.conf hast, oder MPlayer wird auf eine unverschlüsselte Übertragung warten.

In deinen Audio- und Videofeldern kannst du eine erweiterte Syntax anwenden: ...:pid[+pid]:... (für ein Maximum von 6 pids bei jedem); in diesem Fall wird MPlayer alle gezeigten pids enbinden, plus pid 0 (welche das PAT enthält). Binde ruhig in jede Spalte die PMT pid für den korrespondierenden Kanal ein (falls du ihn kennst). Du kannst auch 8192 angeben; dies wird alle pids auf dieser Frequenz wählen, und du kannst dann zwischen ihnen mit TAB wechseln. Das mag mehr Bandbreite benötigen, billige Karten übertragen jedoch alle Kanäle zumindest bis zum Kernel, daher macht es für diese keinen großen Unterschied. Andere mögliche Anwendungen sind: televideo pid, zweiter Audio-Track, etc.

Wenn sich MPlayer regelmäßig über

Zu viele Audiopakete im Puffer

beschwert oder wenn du eine zunehmende Desynchronisation zwischen Ton und Video feststellst, versuche den MPEG-TS-Demuxer von libavformat zu verwenden, indem du -demuxer lavf -lavfdopts probesize=128 der Kommandozeile hinzufügst.

Um den ersten der in deiner Liste vorhandenen Kanäle anzuzeigen, führe folgendes aus

  mplayer dvb://

Willst du einen bestimmten Kanal wie z.B. R1 ansehen, führe dies aus

  mplayer dvb://R1

Hast du mehr als eine Karte, musst du die Nummer der Karte, in der der Kanal zu sehen ist (z.B. 2), mit dieser Syntax angeben:

  mplayer dvb://2@R1

Um Kanäle zu wechseln, drücke die Tasten h (nächster) und k (vorheriger) oder verwende das OSD-Menü.

Wenn deine ~/.mplayer/menu.conf einen Eintrag <dvbsel> enthält, wie der in der Beispieldatei etc/dvb-menu.conf (die du zum Überschreiben der ~/.mplayer/menu.conf nutzen kannst), wird das Hauptmenü einen Untermenüeintrag anzeigen, der dir die Wahl des Kanal-Presets in deiner channels.conf erlaubt, womöglich gefolgt von einem Menü mit der Liste der verfügbaren Karten, falls mehr als eine von MPlayer genutzt werden kann.

Willst du ein Programm auf die Festplatte speichern, nimm

  mplayer -dumpfile r1.ts -dumpstream dvb://R1

Willst du ihn statt dessen in einem anderen Format aufnehmen (ihn neu encodieren), kannst du einen Befehl wie diesen ausführen

  mencoder -o r1.avi -ovc xvid -xvidencopts bitrate=800 -oac mp3lame -lameopts cbr:br=128 -pp=ci dvb://R1

Lies dir in der Manpage eine Liste von Optionen durch, die du an das DVB-Input-Modul übergeben kannst.

AUSBLICK.  Wenn du Fragen hast oder an der Diskussion über zukünftige Features teilnehmen willst, dann melde dich bei unserer MPlayer-DVB Mailingliste an. Denk bitte daran, dass dort Englisch gesprochen wird.

Für die Zukunft kannst du mit der Möglichkeit, das OSD und die Untertitel mit den eingebauten Funktionen der DVB-Karten anzuzeigen, mit flüssigerer Wiedergabe von Filmen mit weniger/mehr als 25 Bildern pro Sekunde und mit Echtzeit-Transcodierung zwischen MPEG-2 und MPEG-4 (partielle Dekompression) rechnen.

4.18.2. DXR2

MPlayer unterstützt hardwarebeschleunigte Wiedergabe mit der Creative DXR2-Karte.

Zuerst brauchst du einen richtig installierten DXR2-Treiber. Du kannst die Treiber und Installationshinweise im DXR2 Resource Center finden.

GEBRAUCH

-vo dxr2

Aktiviere TV-Ausgabe.

-vo dxr2:x11 oder -vo dxr2:xv

Aktiviere Overlay-Ausgabe unter X11.

-dxr2 <option1:option2:...>

Diese Option wird zur Kontrolle des DXR2-Treiber verwendet.

Der auf DXR2 genutzte Overlay-Chipset ist von sehr schlechter Qualität, die Standardeinstellungen sollten aber bei jedem funktionieren. Das OSD kann eventuell mit Overlay genutzt werden (nicht bei TV), indem es im colorkey eingetragen wird. Mit den Standardeinstellungen des colorkey bekommst du evtl. unterschiedliche Ergebnisse, gewöhnlich wirst du den colorkey rund um die Zeichen sehen oder einige anderen lustigen Effekte. Aber wenn du die colorkey-Einstellungen korrekt anpasst, solltest du in der Lage sein, akzeptable Resultate zu erzielen.

Lies bitte in der Manpage über die vorhandenen Optionen.

4.18.3. DXR3/Hollywood+

MPlayer unterstützt die hardwarebeschleunigte Wiedergabe mit den Karten Creative DXR3 und Sigma Designs Hollywood Plus. Beide Karten basieren auf dem em8300-MPEG-Decoderchip von Sigma Designs.

Als erstes brauchst du korrekt installierte DXR3/H+-Treiber, Version 0.12.0 oder neuer. Diese Treiber und weitere Installationsanweisungen findest du auf der Seite DXR3 & Hollywood Plus for Linux. configure sollte die Karte automatisch finden. Die Compilierung sollte auch problemlos funktionieren.

GEBRAUCH

-vo dxr3:prebuf:sync:norm=x:device

overlay aktiviert das Overlay anstelle des TV-Ausgangs. Dafür brauchst du ein korrekt konfiguriertes Overlaysetup. Am einfachsten konfigurierst du das Overlay mit dem Tool autocal. Starte danach MPlayer mit dxr3-Ausgabe und ohne Overlay anzuschalten. Starte dxr3view. Mit dxr3view kannst du die Overlay-Einstellungen verändern und siehst die Auswirkungen sofort. Eventuell wird dieses Feature irgendwann vom MPlayer-GUI unterstützt. Wenn du das Overlay richtig eingestellt hast, brauchst du dxr3view nicht mehr laufen zu lassen.

prebuf schaltet Prebuffering ein. Das ist ein Feature des em8300-Chips, das es ihm ermöglicht, mehr als nur ein Bild gleichzeitig zu speichern. Das bedeutet, dass MPlayer in diesem Modus versucht, den Puffer ständig mit Daten gefüllt zu halten. Wenn du einen langsamen Rechner hast, dann wird MPlayer wahrscheinlich die meiste Zeit über knapp oder genau 100% der CPU-Zeit belegen. Das ist vor allem dann der Fall, wenn du echte MPEG-Streams (z.B. DVDs, SVCDs etc.) abspielst, da MPlayer nicht nach MPEG encodieren muss und den Puffer sehr schnell wird füllen können.

Mit Prebuffering ist die Videowiedergabe viel weniger anfällig gegenüber anderen CPU-intensiven Programmen. Frames werden nur dann verworfen, wenn eine andere Anwendung für eine sehr lange Zeit die CPU belegt.

Wenn kein Prebuffering verwendet wird, dann ist der em8300 viel anfälliger gegenüber CPU-Last. Somit wird dringend empfohlen, MPlayers -framedrop-Option zu verwenden, um die A/V-Sync zu erhalten.

sync aktiviert die neue sync-Methode. Dieses Feature ist momentan noch experimentell. Bei dieser Methode beobachtet MPlayer ständig die interne Uhr des em8300-Chips. Weicht diese von MPlayers Uhr ab, so wird die des em8300-Chips zurückgesetzt, sodass dieser alle Frames verwirft, die hinterherhängen.

norm=x setzt den TV-Standard der DXR3-Karte, ohne dafür externe Programme wie em8300setup zu benötigen. Gültige Werte sind 5 = NTSC, 4 = PAL-60, 3 = PAL. Spezielle Standards sind 2 (automatische Erkennung mit PAL/PAL-60) und 1 (automatische Erkennung für PAL/NTSC), da sie den Standard in Abhängigkeit der FPS des Films setzen. norm = 0 (Standard) ändert den momentan eingestellten TV-Standard nicht.

device = Gerätenummer wählt die zu verwendene em8300-Karte, falls du mehrere davon hast.

Jede dieser Optionen kann auch weggelassen werden.

:prebuf:sync scheint sehr gut zu funktionieren, wenn du DivX abspielst. Es gab Berichte von Leuten, die Probleme mit prebuf bei der Wiedergabe von MPEG1/2-Dateien hatten. Du solltest es also zuerst ohne Optionen probieren. Wenn du Sync-Probleme hast, dann probier :sync aus.

-ao oss:/dev/em8300_ma-X

Audioausgabe, wobei X die Gerätenummer ist (0 bei nur einer Karte).

-af resample=xxxxx

Der em8300 kann keine Sampleraten niedriger als 44100Hz abspielen. Wenn die Samplerate weniger als 44100Hz beträgt, dann wähle 44100Hz oder 48000Hz, je nachdem, welche davon besser passt. Beispiel: Wenn der Film 22050Hz benutzt, dann wähle 44100Hz, da 44100 / 2 = 22050 ist. Bei 24000Hz nimmst du 48000Hz etc. Das funktioniert nicht mit der digitalen Audioausgabe (-ac hwac3).

-vf lavc

Wenn du Nicht-MPEG-Filme mit dem em8300 ansehen möchtest (z.B. DivX oder RealVideo), dann musst du einen MPEG1-Videofilter wie libavcodec (lavc) verwenden. Momentan gibt es keine Möglichkeit, die Anzahl der Bilder pro Sekunde des em8300 zu setzen, was bedeutet, dass sie fest bei 29.97 liegt. Aus diesem Grund solltest du -vf lavc=quality:25 verwenden, besonders dann, wenn du auch Prebuffering verwendest. Warum aber 25 und nicht 29.97? Tja, die Sache ist, dass das Bild bei 29.97 unruhig wird. Wir wissen leider nicht, warum das so ist. Wenn du Werte zwischen 25 und 27 benutzt, dann wird das Bild stabil. Momentan können wir das nur als gegeben hinnehmen.

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

Obwohl der DXR3-Treiber ein OSD über das MPEG1-/2-/4-Video projezieren kann, ist es qualitativ deutlich schlechter als MPlayers traditionelles OSD, und es hat diverse Probleme mit der Erneuerung der Anzeige. Der oben angegebene Befehl konvertiert das Video erst nach MPEG4 (das ist leider erforderlich) und wendet dann den expand-Filter an, der zwar das Bild nicht vergrößert (-1: = Standardwerte) aber dafür das normale OSD auf das Bild stanzt (die "1" am Ende).

-ac hwac3

Der em8300 unterstützt die Audiowiedergabe von AC3-Streams (Surroundsound) über den digitalen Ausgang der Karte. Schau oben bei der Option -ao oss nach. Sie muss angegeben werden, um den DXR3-Ausgang anstelle der Soundkarte anzugeben.

4.19. Andere Visualisierungshardware

4.19.1. Zr

Dieser Treiber ist ein Anzeigetreiber (-vo zr), der verschiedeene MJPEG-Aufnahme-/-Wiedergabekarten unterstützt. Getestet wurde er mit DC10+ und Buz, und er sollte auch mit der LML33 und der Original-DC10 funktionieren. Dieser Treiber encodiert jedes Bild nach JPEG und schickt es dann an die Karte. Für die Encodierung wird libavcodec benutzt und dementsprechend auch benötigt. Mit dem speziellen cinemara-Modus kannst du Filme auch tatsächlich im Breitbildformat anschauen, wenn du zwei Beamer und zwei MJPEG-Karten hast. Abhängig von der Qualität und Auflösung braucht dieser Treiber eine Menge CPU-Power. Benutze also besser die Option -framedrop, wenn deine Maschine zu langsam ist. Anmerkung: Mein AMD K6-2 350MHz ist durchaus in der Lage, Filme in VCD-Größe mit -framedrop wiederzugeben.

Dieser Treiber benutzt den Kerneltreiber, den du auf http://mjpeg.sf.net herunterladen kannst. Dieser muss also vorher schon funktionieren. configure erkennt automatisch vorhandene MJPEG-Karten. Wenn nicht, dann erzwinge zr mit

./configure --enable-zr

Die Ausgabe kann mit diversen Optionen gesteuert werden. Eine vollständige Liste findest du in der Manpage. Eine kurze Auflistung gibt dir auch

mplayer -zrhelp

Sachen wie das OSD und Skalierung werden nicht von diesem Treiber erledigt, aber sie können natürlich durch Filter realisiert werden. Beispiel: Angenommen, du hast einen Film mit einer Auflösung von 512x272, und du möchtest ihn im Vollbild auf deiner DC10+ anschauen. Du hast dann drei Möglichkeiten: den Film auf eine Breite von 768, 384 oder 192 zu skalieren. Aus Geschwindigkeits- und Qualitätsgründen würde ich empfehlen, den Film auf 384x204 mit dem bilinearen Algorithmus zu skalieren. Die Kommandozeile sieht dazu wie folgt aus:

mplayer -vo zr -sws 0 -vf scale=384:204 movie.avi

Das Beschneiden des Bildes kann mit dem crop-Filter geschehen oder vom Treiber selbst vorgenommen werden. Angenommen, der Film ist zu breit für die Anzeige deiner Buz, und du möchtest -zrcrop benutzen, um den Film schmaler zu machen. Dann verwendest du folgendes Kommando:

mplayer -vo zr -zrcrop 720x320+80+0 benhur.avi

Mit dem crop-Filter sieht es so aus:

mplayer -vo zr -vf crop=720:320:80:0 benhur.avi

Mehrfache Anwendung von -zrcrop aktiviert den cinerama-Modus. Das heißt, du kannst das Bild über mehrere Fernseher oder Beamer verteilen, um eine größere Anzeigefläche zu erreichen. Angenommen, du hast zwei Beamer. Der linke hängt an deiner Buz an /dev/video1, und der rechte hängt an deiner DC10+ an /dev/video0. Der Film hat eine Auflösung von 704x288. Nehmen wir weiter an, dass du den rechten Beamer schwarz/weiß betreiben möchtest, und dass du auf dem linken Beamer Bilder mit der Qualitätsstufe 10 haben möchtest. Dann benutzt du dafür das folgende Kommando:

mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
    -zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
        movie.avi

Wie du siehst, gelten die Optionen vor dem zweiten -zrcrop nur für die DC10+ und die Optionen nach dem zweiten -zrcrop nur für die Buz. Die maximale Anzahl an MJPEG-Karten, die am cinerama-Modus teilnehmen, liegt bei vier, sodass du dir eine 2x2-Videowand basteln kannst.

Zuletzt ein wirklich wichtiger Hinweis: Starte oder beende auf keinen Fall XawTV während der Wiedergabe, da das deinen Computer zum Absturz bringen wird. Du kannst aber problemlos ZUERST XawTV, DANN MPlayer starten, warten, bis MPlayer fertig ist und ZULETZT XawTV beenden.

4.19.2. Blinkenlights

Dieser Treiber kann Video mit dem Blinkenlights UDP-Protokoll wiedergeben. Wenn du nicht weißt, was Blinkenlights oder dessen Nachfolger Arcade ist, finde es heraus. Obwohl dies höchstwahrscheinlich der am wenigsten genutzte Videoausgabetreiber ist, den MPlayer zu bieten hat, so ist er ohne Zweifel der coolste. Schau dir einfach ein paar von den Blinkenlights-Dokumentationsvideos an. Auf dem Arcade-Video siehst du Blinkenlights-Ausgabetreiber um 00:07:50 in Aktion.

4.20. Unterstützung für die TV-Ausgabe

4.20.1. Matrox G400-Karten

Unter Linux hast du zwei Möglichkeiten, den TV-Ausgang deiner G400 anzuschalten:

Wichtig

Anweisungen für die Matrox G450/G550 und deren TV-Ausgänge findest du im nächsten Abschnitt!

XFree86

Mit dem alten Treiber und dem HAL-Modul, welches es auf der Matrox-Seite gibt. Damit bekommst du X auf dem Fernseher, aber keine Hardwarebeschleunigung wie unter Windows!

Der zweite Ausgang besitzt nur einen YUV-Framebuffer. Der BES (Back End Scaler, die YUV-Skalierungseinheit des G200/G400/G450/G550) funktioniert mit ihm nicht! Der Windows-Treiber umgeht das irgendwie, wahrscheinlich dadurch, dass er die 3D-Engine für die Skalierung und den YUV-Framebuffer zur Anzeige des skalierten Bildes verwendet. Wenn du unbedingt X benutzen willst, dann probier -vo x11 -fs -zoom, aber das wird LANGSAM sein und den Macrovision-Kopierschutz aktiviert haben. (Du kannst Macrovision mit diesem Perlscript umgehen.)

Framebuffer

Mit den matroxfb-Modulen in den 2.4er Kerneln. 2.2er Kernel kennen den TV-Ausgang noch nicht und sind somit hierfür nicht geeignet. Du musst ALLE matroxfb-spezifischen Features bei der Compilierung anschalten (bis auf MultiHead). Compiliere sie als Module! Du musst ebenfalls I2C anschalten.

  1. Gehe nach TVout und gib ./compile.sh ein. Installiere TVout/matroxset/matroxset in ein Verzeichnis, das in deinem PATH liegt.

  2. Wenn du fbset nicht installiert hast, installiere TVout/fbset/fbset in ein Verzeichnis, das in deinem PATH liegt.

  3. Wenn du con2fb nicht installiert hast, installiere TVout/con2fb/con2fb in ein Verzeichnis, das in deinem PATH liegt.

  4. Geh jetzt in das Verzeichnis TVout/ in den MPlayer-Quellen und führe dort ./modules als root aus. Deine Textmodusconsole wird danach in den Framebuffermodus umschalten, aus dem es keinen Weg zurück gibt!

  5. Editiere als nächstes das Script ./matroxtv. Es wird dir ein simples Menü präsentieren. Drücke 2 gefolgt von ENTER. Jetzt solltest du auf dem Fernseher das gleiche Bild wie auf dem Monitor sehen. Wenn das TV-Bild (PAL ist die Standardeinstellung) merkwürdige Streifen enthält, dann war das Script nicht in der Lage, die Auflösung richtig zu setzen (per Voreinstellung 640x512). Probiere andere im Menü angebotene Auflösungen aus und/oder experimentiere mit fbset.

  6. So. Die nächste Aufgabe ist es, den Cursor auf tty1 (oder woauchimmer) verschwinden zu lassen, und den Bildschirmschoner auszuschalten. Führ folgende Kommandos aus:

    echo -e '\033[?25l'
    setterm -blank 0

    oder

    setterm -cursor off
    setterm -blank 0

    Wahrscheinlich möchtest du das in ein Script packen und dabei gleich den Bildschirm löschen. Um den Cursor wieder anzuschalten:

    echo -e '\033[?25h'

    oder

    setterm -cursor on

  7. Yeah kewl. Starte die Wiedergabe mit

    mplayer -vo mga -fs -screenw 640 -screenh 512 Dateiname

    (Wenn du X benutzt, dann wechsle jetzt auf den matroxfb mit z.B. STRG+ALT+F1!) Ändere die 640 und 512, wenn du eine andere Auflösung verwendest.

  8. Genieße die ultra-schnelle und featurereiche Wiedergabe mit dem Matrox-TV-Ausgang (sogar noch besser als Xv)!

Matrox-TV-Ausgangskabel im Eigenbau.  Niemand übernimmt Verantwortung für irgendetwas oder jegliche Schäden, die durch diese Dokumentation entstehen.

Kabel für die G400.  Der vierte Pin des CRTC2-Steckers liefert das Composite Video-Signal. Erde liegt am sechsten, siebten und achten Pin. (Informationen von Balázs Rácz)

Kabel für die G450.  Der erste Pin des CRTC2-Steckers liefert das Composite Video-Signal. Erde liegt am fünften, sechsten, siebten und fünfzehnten (5, 6, 7, 15) Pin. (Information von Balázs Kerekes)

4.20.2. Matrox G450/G550-Karten

Unterstützung für den TV-Ausgang dieser Karten wurde erst kürzlich implementiert und ist noch nicht in den Standardkerneln enthalten. Momentan kann das mga_vid-Modul nicht benutzt werden, wenn ich recht informiert bin, da der G450/G550-Treiber nur in einer Konfiguration arbeitet: Der erste CRTC-Chip (mit den vielen Features) am ersten Display (meistens der Monitor), und der zweite CRTC (kein BES - Erläuterungen zum BES gibts in der G400-Sektion oben) am Fernseher. Somit kannst du momentan nur den fbdev-Ausgabetreiber von MPlayer benutzen.

Der erste CRTC kann momentan nicht an den zweiten Ausgang umgeleitet werden. Der Author des matroxfb-Kernelmoduls, Petr Vandrovec, wird auch das irgendwann unterstützen, indem die Ausgabe des ersten CRTC auf beiden Ausgängen angezeigt wird, wie es momentan auch für die G400 empfohlen wird (siehe oben).

Der dafür benötigte Kernelpatch und eine detaillierte Anleitung kann auf http://www.bglug.ca/matrox_tvout/ gefunden werden.

4.20.3. ATI-Karten

EINLEITUNG.  Momentan möchte ATI keinen einzigen ihrer TV-Ausgabe-Chips unter Linux unterstützen, da sie die Macrovision-Technologie lizensiert haben.

STATUS DER ATI-TV-AUSGABEUNTERSTÜTZUNG UNTER LINUX

  • ATI Mach64: Von GATOS unterstützt.

  • ASIC Radeon VIVO: Von GATOS unterstützt.

  • Radeon und Rage128: Von MPlayer unterstützt! Lies die VESA-Treiber- und VIDIX-Sektionen.

  • Rage Mobility P/M, Radeon, Rage 128, Mobility M3/M4: Von atitvout unterstützt.

Verwende bei anderen Karten einfach den VESA-Treiber ohne VIDIX. Dafür brauchst du aber eine schnelle CPU.

Nur eines musst du tun - das TV-Kabel vor dem Booten eingesteckt haben, da das BIOS sich nur einmal während der POST-Prozedur initialisiert.

4.20.4. nVidia

Zuerst musst du die Closed-Source-Treiber von http://nvidia.com herunterladen. Ich werde Installation und Konfiguration nicht im Detail beschreiben, da dies außerhalb der Aufgabe dieses Dokuments liegt.

Nachdem du sichergestellt hast, dass XFree86, XVideo und die 3D-Beschleunigung funktionieren, ändere die XF86Config, und passe das folgende Beispiel deiner Karte an:

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

Natürlich besteht der wichtige Teil aus den TwinView-Optionen.

4.20.5. NeoMagic

Der NeoMagic-Chip befindet sich auf zahlreichen Laptops, einige von ihnen sind mit einen einfachen analogen TV-Encoder ausgestattet, einige besitzen einen fortschrittlicheren.

  • Analoger Encoder-Chip: Es wurde berichtet, dass ein zuverlässiger TV-Ausgang mittels -vo fbdev oder -vo fbdev2 erreicht werden kann. Du musst vesafb in deinen Kernel compiliert haben und der Kernel-Befehlszeile folgende Parameter übergeben: append="video=vesafb:ywrap,mtrr" vga=791. Du solltest X starten, dann in den Consolen-Modus z.B. mit STRG+ALT+F1 wechseln. Misslingt der Start von X vor dem von MPlayer in der Console, wird das Video langsam und abgehackt (Erklärungen sind willkommen). Logge dich auf deiner Konsole ein und initialisiere dann folgenden Befehl:

    clear; mplayer -vo fbdev -zoom -cache 8192 dvd://

    Jetzt solltest du den Film im Konsolen-Modus laufen sehen. Er wird etwa die Hälfte des LCD-Bildschirms deines Laptops ausfüllen. Um auf TV zu wechseln, drücke dreimal Fn+F5. Getestet auf einem Tecra 8000, 2.6.15 Kernel mit vesafb, ALSA v1.0.10.

  • Chrontel 70xx Encoder-Chip: Zu finden im IBM Thinkpad 390E und möglicherweise anderen Thinkpads oder Notebooks.

    Du musst -vo vesa:neotv_pal für PAL oder -vo vesa:neotv_ntsc für NTSC verwenden. Es wird eine TV-Output-Funktion in folgenden 16bpp und 8bpp-Modi zur Verfügung stellen:

    • NTSC 320x240, 640x480 und evtl. auch 800x600.

    • PAL 320x240, 400x300, 640x480, 800x600.

    Der Modus 512x384 wird im BIOS nicht unterstützt. Du musst das Bild auf eine andere Auflösung skalieren, um die TV-Ausgabe zu aktivieren. Wenn du auf dem Schirm ein Bild in 640x480 oder in 800x600 siehst, jedoch nicht in 320x240 oder einer kleineren Auflösung, musst du zwei Tabellen in vbelib.c ersetzen. Siehe Funktion vbeSetTV für Details. Bitte kontaktiere in diesem Fall den Autor.

    Bekanntes Problem: Nur VESA, keine weiteren Schalter wie Helligkeit, Kontrast, Blacklevel, Flimmerfilter sind implementiert.

Kapitel 5. Portierungen

5.1. Linux

Die Hauptentwicklungsplattform ist Linux auf x86, obwohl MPlayer auf vielen anderen Linux-Portierungen funktioniert. Binary Packages von MPlayer stehen auf mehreren Quellen zur Verfügung. Jedoch wird keines dieser Packages unterstützt. Melde den Autoren die Probleme, nicht uns.

5.1.1. Debian-Packaging

Um ein Debian-Package zu bauen, führe folgenden Befehl im Source-Verzeichnis von MPlayer aus:

fakeroot debian/rules binary

Wenn du eigene Optionen an configure übergeben willst, kannst du die Umgebungsvariable DEB_BUILD_OPTIONS einrichten. Zum Beispiel, wenn du die GUI- und OSD-Menü-Unterstützung willst, die du gerne nutzen würdest:

DEB_BUILD_OPTIONS="--enable-gui --enable-menu" fakeroot debian/rules binary

Du kannst auch einige Variablen an Makefile übergeben. Zum Beispiel, wenn du mit gcc 3.4 compilieren willst, auch wenn er nicht der Standard-Compiler ist:

CC=gcc-3.4 DEB_BUILD_OPTIONS="--enable-gui" fakeroot debian/rules binary

Um den Sourcetree aufzuräumen, führe folgenden Befehl aus:

fakeroot debian/rules clean

Als root kannst du dann das .deb-Package wie immer installieren:

dpkg -i ../mplayer_version.deb

Christian Marillat hatte eine Weile lang inoffizielle Debian-Packages von MPlayer, MEncoder und unseren Binärcodecpaketen erstellt, du kannst sie von seiner Homepage mit apt-get herunterladen.

5.1.2. RPM-Packaging

Dominik Mierzejewski entwarf und wartet die inoffiziellen RPM-Packages von MPlayer für Red Hat und Fedora Core. Sie sind von seinem Repository verfügbar.

Mandrake/Mandriva RPM-Packages stehen auf P.L.F. zur Verfügung. SuSE verwendet eine verkrüppelte Version von MPlayer in seiner Distribution. Diese haben sie aus ihren neuesten Releases entfernt. Du bekommst funktionierende RPMs auf links2linux.de.

5.1.3. ARM

MPlayer läuft auf Linux PDAs mit ARM CPU, z.B. Sharp Zaurus, Compaq Ipaq. Der einfachste Weg, sich MPlayer zu besorgen ist, sich ihn von einer der OpenZaurus Package Feeds zu holen. Falls du ihn dir selbst compilieren willst, solltest du im mplayer- und im libavcodec-Verzeichnis der OpenZaurus Distribution Buildroot nachsehen. Diese haben stets die neueste Makefile und Patches, die zum Erstellen eines SVN-MPlayer verwendet werden. Brauchst du ein GUI-Frontend, kannst du xmms-embedded nutzen.

5.2. *BSD

MPlayer läuft auf allen bekannten BSD-Derivaten. Es stehen ports/pkgsrc/fink/etc-Versionen des MPlayer bereit, die möglicherweise leichter anzuwenden sind als unsere Originalquellen.

Um MPlayer zu erstellen, brauchst du GNU make (gmake - natives BSD make wird nicht funktionieren) und eine aktuelle Version der binutils.

Beschwert sich MPlayer, er könne /dev/cdrom oder /dev/dvd nicht finden, erstelle einen geeigneten symbolischen Link:

ln -s /dev/dein_cdrom_geraet /dev/cdrom

Um Win32-DLLs mit MPlayer zu nutzen, musst du den Kernel mit "option USER_LDT" recompilieren (es sei denn du lässt FreeBSD-CURRENT laufen, wobei dies die Standard-Einstellung ist).

5.2.1. FreeBSD

Besitzt deine CPU SSE, recompiliere deinen Kernel mit "options CPU_ENABLE_SSE" (FreeBSD-STABLE oder Kernel-Patches erforderlich).

5.2.2. OpenBSD

Aufgrund von Einschränkungen in verschiedenen Versionen von GAS (der GNU Assembler, Relocation vs MMX), wirst du in zwei Schritten compilieren müssen: Stell als erstes sicher, dass der nicht-native zuvor in deinem $PATH liegt und führe ein gmake -k aus. Sorge dann dafür, dass die native Version benutzt wird, und führe gmake aus.

Ab OpenBSD 3.4 ist der oben beschriebene Hack nicht länger nötig.

5.2.3. Darwin

Siehe Abschnitt Mac OS.

5.3. Kommerzielles Unix

MPlayer wurde auf einige kommerzielle Unix-Varianten portiert. Seit die Entwicklungsumgebungen auf diesen Systemen dahin tendieren, verschieden von denen freier Unixes zu sein, musst du möglicherweise einige manuelle Anpassungen vornehmen, um das Build lauffähig zu bekommen.

5.3.1. Solaris

MPlayer sollte auf Solaris 2.6 oder neuer funktionieren. Verwende den Audio-Treiber von SUN mit der Option -ao sun für den Sound.

Auf UltraSPARCs, profitiert MPlayer von deren VIS-Erweiterungen (äquivalent zu MMX), zur Zeit nur in libmpeg2, libvo und libavcodec, jedoch nicht in mp3lib. Du kannst dir eine VOB-Datei auf einer 400MHz CPU ansehen. Dazu muss mLib installiert sein.

Vorbehalt:

  • mediaLib wird in MPlayer momentan aufgrund Fehlerhaftigkeit per Voreinstellung deaktiviert. SPARC-Benutzer, die MPlayer mit mediaLib-Unterstützung bauen, haben große grüne Farbstiche gemeldet bei Video, das mit libavcodec en- und decodiert wurde. Du kannst es, wenn du möchtest, aktivieren mit:

     $ ./configure --enable-mlib 

    Du tust dies auf eigenes Risiko. x86-Benutzer sollten mediaLib niemals benutzen, da dies zu sehr schlechter Performance von MPlayer führt.

Um das Package zu erstellen, brauchst du GNU make (gmake, /opt/sfw/gmake), das native Solaris make wird nicht funktionieren. Ein typischer Fehler, den du bekommst, wenn du mit einem make von Solaris arbeitest statt mit einem GNU make:

% /usr/ccs/bin/make
make: Fatal error in reader: Makefile, line 25: Unexpected end of line seen

Auf Solaris SPARC, brauchst du den GNU C/C++ Compiler; es spielt keine Rolle, ob der GNU C/C++ Compiler mit oder ohne dem GNU Assembler compiliert ist.

Auf Solaris x86 brauchst du den GNU Assembler und den GNU C/C++ Compiler so konfiguriert, dass er den GNU Assembler verwendet! Der MPlayer-Code auf der x86-Plattform macht starken Gebrauch von MMX-, SSE- und 3DNOW!-Instruktionen, die nicht compiliert werden können, wenn man den Assembler von Sun /usr/ccs/bin/as verwendet.

Das configure-Script versucht herauszufinden, welches Assembler-Programm von deinem "gcc"-Befehl genutzt wird (falls die automatische Erkennung fehlschlägt, nimm die Option --as=/pfad/zum/installierten/gnu-as, um dem configure-Script zu zeigen, wo es GNU "as" auf deinem System finden kann).

Lösung für gebräuchliche Probleme:

  • Fehlermeldung von configure auf einem Solaris x86 System, wenn man GCC ohne GNU Assembler anwendet:

    % configure
    ...
    Checking assembler (/usr/ccs/bin/as) ... , failed
    Please upgrade(downgrade) binutils to 2.10.1...

    (Lösung: Installiere und verwende einen gcc, konfiguriert mit --with-as=gas)

    Ein typischer Fehler, den du bekommst, wenn du mit einem GNU C Compiler arbeitest, der GNU "as" nicht verwendet:

    % 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 kann eine Schutzverletzung auslösen, wenn mit win32codecs decodiert und encodiert wird:

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

    Das liegt an einer Änderung an sysi86() in Solaris 10 und prä-Solaris Nevada b31-Releases. Bei Solaris Nevada b32 wurde dieser Fehler behoben; trotzdem, Sun muss diese Lösung noch immer nach Solaris 10 rückportieren. Das MPlayer-Projekt hat Sun auf das Problem hingewiesen, und ein Patch für Solaris 10 ist gerade in Vorbereitung. Weitere Informationen über diesen Fehler können hier gefunden werden: http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6308413.

  • Aufgrund von Bugs in Solaris 8 kann es dazu kommen, dass du keine DVD-Disks größer 4 GB abspielen kannst:

    • Der sd(7D)-Treiber auf Solaris 8 x86 hat einen Bug, wenn er auf einen Diskblock >4GB auf einem Gerät zugreift, das eine logische blocksize != DEV_BSIZE verwendet (z.B. CD-ROM- und DVD-Medien). Wegen eines 32Bit int Overflows wird auf eine Disk-Adresse modulo 4GB zugegriffen (http://groups.yahoo.com/group/solarisonintel/message/22516). Dieses Problem existiert nicht in der SPARC-Version von Solaris 8.

    • Ein ähnlicher Bug is präsent im Dateisystem-Code (AKA ISO9660) von hsfs(7FS), hsfs unterstützt keine Partitionen/Disks größer als 4GB, auf alle Daten wird modulo 4GB zugegriffen (http://groups.yahoo.com/group/solarisonintel/message/22592). Dieses hsfs-Problem kann durch die Installation von Patch 109764-04 (sparc) / 109765-04 (x86) gefixt werden.

5.3.2. HP-UX

Joe Page unterhält ein detailliertes HP-UX MPlayer-HOWTO von Martin Gansser auf seiner Homepage. Mit diesen Instruktionen sollte das bauen hervorragend funktionieren. Die folgende Information wurde aus diesem HOWTO übernommen.

Du benötigst GCC 3.4.0 oder neuer, GNU make 3.80 oder neuer und SDL 1.2.7 oder neuer. HP cc wird kein lauffähiges Programm produzieren, frühere GCC-Versionen sind fehlerhaft. Für OpenGL-Funktionalität musst du Mesa installieren, und die gl- und gl2-Video-Ausgabetreiber sollten funktionieren, wenngleich die Geschwindigkeit sehr mies sein kann, abhängig von der CPU-Geschwindigkeit. Ein guter Ersatz für das eher armselige, native HP-UX-Soundsystem ist GNU esound.

Erzeuge das DVD-Gerät, scanne den SCSI-Bus mit:

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

Die Bildschirmausgabe zeigt ein Pioneer DVD-ROM an SCSI-Adresse 2. Die Karteninstanz für den Hardwarepfad 8/16 ist 1.

Erstelle einen Link von deinem Originalgerät zum DVD-Gerät.

# ln -s /dev/rdsk/c<SCSI-Bus-Instanz>t<SCSI Ziel-ID>d<LUN> /dev/<geraet>

Beispiel:

# ln -s /dev/rdsk/c1t2d0 /dev/dvd

Unten stehen lösungen für einige verbreitete Probleme:

  • Absturz beim Start mit folgender Fehlermeldung:

    /usr/lib/dld.sl: Unresolved symbol: finite (code) from /usr/local/lib/gcc-lib/hppa2.0n-hp-hpux11.00/3.2/../../../libGL.sl

    Dies bedeutet, dass die Funktion .finite(). nicht in der Standard-Bibliothek HP-UX math zur Verfügung steht. Statt dessen gibt es .isfinite().. Lösung: Benutze die neueste Mesa-Depotdatei.

  • Absturz beim Playback mit folgender Fehlermeldung:

    /usr/lib/dld.sl: Unresolved symbol: sem_init (code) from /usr/local/lib/libSDL-1.2.sl.0

    Lösung: Benutze die Option extralibdir von configure --extra-ldflags="/usr/lib -lrt"

  • MPlayer produziert eine Schutzverletzung (segfault) mit einer Meldung wie dieser:

    Pid 10166 received a SIGSEGV for stack growth failure.
    Possible causes: insufficient memory or swap space, or stack size exceeded maxssiz.
    Segmentation fault

    Lösung: Der HP-UX-Kernel hat eine Standard-Stackgröße von 8MB(?) pro Prozess. (11.0- und neuere 10.20-Patches lassen dich maxssiz bis auf 350MB für 32bit-Programme erhöhen). Du musst maxssiz erweitern und den Kernel recompilieren (und neu starten). Dazu kannst du SAM verwenden. (Überprüfe während des Neustarts den maxdsiz-Parameter für die maximale Anzahl Daten, die ein Programm nutzen darf. Er hängt von deiner Anwendung ab, ob der Standard von 64MB ausreicht oder nicht.)

5.3.3. AIX

MPlayer wird erfolgreich auf AIX 5.1, 5.2 und 5.3 erzeugt, verwendet man GCC 3.3 oder höher. Das Erzeugen von MPlayer auf AIX 4.3.3 und darunter wurde nicht getestet. Es wird dringend empfohlen, MPlayer mit GCC 3.4 oder höher zu erzeugen, oder es wird, falls du auf POWER5 arbeitest, GCC 4.0 benötigt.

Stelle sicher, dass du GNU make (/opt/freeware/bin/gmake) zum bauen von MPlayer nutzt, da du auf Probleme stossen wirst, wenn du /usr/ccs/bin/make anwendest.

Die CPU-Erkennung ist noch in Arbeit. Die folgenden Architekturen wurden getestet:

  • 604e

  • POWER3

  • POWER4

Folgende Architekturen wurden nicht getestet, sollten jedoch trotzdem funktionieren:

  • POWER

  • POWER2

  • POWER5

Sound über die Ultimedia Services wird nicht unterstützt, da Ultimedia in AIX 5.1 weggelassen wurde; deshalb ist die einzige Option, die Treiber des AIX Open Sound System (OSS) von 4Front Technologies auf http://www.opensound.com/aix.html zu verwenden. 4Front Technologies stellt die OSS-Treiber für AIX 5.1 für den nicht-kommerziellen Gebrauch frei zur Verfügung; wie auch immer, momentan gibt es keine Soundausgabetreiber für AIX 5.2 oder 5.3. Dies bedeutet, dass AIX 5.2 und 5.3 momentan keine MPlayer-Tonausgabe beherrschen.

Lösung für gebräuchliche Probleme:

  • Wenn du folgende Fehlermeldung von configure erhältst:

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

    Das liegt daran, dass AIX Namen für Zeichensätze benutzt, die nicht dem Standard entsprechen; daher wird die Konvertierung von MPlayer-Ausgaben zu anderen Zeichensätzen momentan nicht unterstützt. Die Lösung besteht darin, folgendes zu tun:

    $ ./configure --charset=noconv

5.3.4. QNX

Du musst SDL für QNX herunterladen und installieren. Dann starte MPlayer mit den Optionen -vo sdl:driver=photon und -ao sdl:nto, es sollte schnell laufen.

Der Output mit -vo x11 wird etwas langsamer sein als unter Linux, da QNX nur X-Emulation besitzt, was sehr langsam ist.

5.4. Windows

Ja, MPlayer läuft auf Windows unter Cygwin und MinGW. Es besitzt noch kein offizielles GUI, aber die Befehlszeilen-Version ist voll funktionstüchtig. Du solltest die MPlayer-cygwin Mailing-Liste für Hilfe und für neueste Informationen hernehmen. Offizielle Windows-Binaries können auf der Download-Seite gefunden werden. Installationspakete und einfache GUI-Frontends stehen auf externen Quellen bereit, wir haben sie in der Windows-Sektion unserer Projektseite zusammengestellt.

Wenn du die Verwendung der Befehlszeile vermeiden willst, hilft der simple Trick, eine Verknüpfung auf deinem Desktop zu erstellen, der einen ähnlichen Ausführungsabschnitt wie folgenden enthält:

c:\pfad\zur\mplayer.exe %1

Dies lässt MPlayer jeden Film abspielen, der über der Verknüpfung fallen gelassen wird. Füge -fs für den Vollbildmodus hinzu.

Die besten Ergebnisse werden mit dem nativen DirectX-Video-Ausgabetreiber (-vo directx) erzielt. Alternativen sind OpenGL und SDL, jedoch variiert die OpenGL-Performance stark von System zu System, und SDL ist dafür bekannt, Videos kaputt zu machen oder auf manchen Systemen abzurauchen. Wird das Bild zerstört, versuche, die Hardwarebeschleunigung mit -vo directx:noaccel abzuschalten. Lade dir die DirectX7-Headerdateien herunter, um den DirectX-Video-Ausgabetreiber zu compilieren. Desweiteren musst du DirectX 7 oder höher installiert haben, damit der DirectX-Video-Ausgabetreiber funktioniert.

VIDIX läuft jetzt unter Windows als -vo winvidix, obwohl es nach wie vor experimentell ist und ein wenig manuelles Setup benötigt. Lade dir die dhahelper.sys oder dhahelper.sys (mit MTRR-Unterstützung) herunter und kopiere sie ins Verzeichnis vidix/dhahelperwin deines MPlayer-Source-Baums. Öffne die Console und wechsle in dieses Verzeichnis. Gib dann

gcc -o dhasetup.exe dhasetup.c

ein und führe

dhasetup.exe install

als Administrator aus. Danach wirst du neu starten müssen. Bist du damit fertig, kopiere die .so-Dateien von vidix/drivers ins Verzeichnis mplayer/vidix relativ zu deiner mplayer.exe.

Für die besten Resultate sollte MPlayer einen Farbraum anwenden, den deine Grafikkarte hardwareseitig unterstützt. Leider melden viele Windows-Grafikkartetreiber fälschlich einige Farbräume als von der Hardware unterstützt. Um herauszufinden welche das sind, versuche

mplayer -benchmark -nosound -frames 100 -vf format=Farbraum vilm

wobei Farbraum jeder von der Option -vf format=fmt=help ausgegebene Farbraum sein kann. Findest du den von deiner Karte verarbeiteten Farbraum besonders schlecht, wird -vf noformat=farbraum sie daran hindern, diesen anzuwenden. Füge dies in deine config-Datei ein, um die Verwendung permanent zu unterbinden.

Es stehen spezielle Codec-Packs für Windows auf unserer Codec-Seite zu Verfügung, die das Abspielen von Formaten zu ermöglichen, für die es noch keinen nativen Support gibt. Leg die Codecs irgendwo in deinem Pfad ab oder übergib --codecsdir=c:/pfad/zu/deinen/codecs (alternativ nur auf Cygwin --codecsdir=/pfad/zu/deinen/codecs) an configure. Wir bekamen einige Berichte, dass Real-DLLs beschreibbar sein müssen, um MPlayer starten zu können, aber nur auf manchen Systemen (NT4). Versuche, sie beschreibbar zu machen, falls du Probleme hast.

Du kannst VCDs über die .DAT- oder .MPG-Dateien, die Windows auf VCDs anzeigt, abspielen. Das funktioniert wie folgt (an den Laufwerksbuchstaben deines CD-ROMs anpassen:

mplayer d:/mpegav/avseq01.dat

DVDs gehen ebenfalls, passe -dvd-device an den Laufwerksbuchstaben deines DVD-ROMs an:

mplayer dvd://<Titel> -dvd-device d:

Die Cygwin-/MinGW-Konsole ist sehr langsam. Die Umleitung der Ausgabe oder das Anwenden der Option -quiet soll laut Berichten die Performance auf einigen Systemen verbessern. Direktes Rendern (-dr) kann auch helfen. Ist das Playback ruckelig, versuche -autosync 100. Helfen dir einige dieser Optionen, kannst du sie ja in deine config-Datei eintragen.

Anmerkung

Auf Windows deaktiviert die CPU-Erkennung zur Laufzeit den SSE-Support wegen periodisch wiederkehrender und schwer zu ortender, SSE-bezogener Abstürze. Wünschst du SSE-Support unter Windows, musst du ohne CPU-Erkennung zur Laufzeit compilieren.

Hast du einen Pentium 4 und erlebst einen Absturz bei Verwendung von RealPlayer-Codecs, musst du den Support für Hyperthreading deaktivieren.

5.4.1. Cygwin

Du musst Cygwin 1.5.0 oder später laufen lassen, um MPlayer zu compilieren.

DirectX-Headerdateien werden gewöhnlich nach /usr/include/ oder /usr/local/include/ extrahiert.

Instruktionen und Dateien, um SDL unter Cygwin laufen zu lassen, können auf der libsdl-Seite gefunden werden.

5.4.2. MinGW

Das Installieren einer Version von MinGW, das MPlayer compilieren könnte zwar für gewöhnlich ziemlich trickreich sein, funktioniert jetzt aber hervorragend. Installiere einfach MinGW 3.1.0 oder neuer und MSYS 1.0.9 oder neuer und erzähle der nachträglichen Installation von MSYS, dass MinGW installiert ist.

Extrahiere die DirectX-Headerdateien nach /mingw/include/.

Die Unterstützung für MOV-komprimierte Header erfordert zlib, was MinGW standardmäßig nicht bereithält. Konfiguriere es mit --prefix=/mingw und installiere es vor dem Compilieren des MPlayer.

Komplette Anweisungen zum Erzeugen des MPlayer und der notwendigen Bibliotheken findest du in den MPlayer MinGW HOWTOs.

5.5. Mac OS

MPlayer läuft nicht auf Mac OS Versionen vor 10, sollte jedoch hervorragend auf Mac OS X 10.2 und darüber compilieren. Der vorgezogene Compiler ist die Apple-Version von GCC 3.x oder höher. Du kannst die grundlegende Compilierumgebung schaffen, indem du Xcode von Apple installierst. Besitzt du Mac OS X 10.3.9 oder später und QuickTime 7 kannst du den Videoausgabetreiber corevideo verwenden.

Leider ermöglicht es dir diese grundlegende Umgebung nicht, von allen netten Features von MPlayer Gebrauch zu machen. Beispielsweise müssen die Bibliotheken fontconfig und freetype auf deinem System installiert sein, damit das OSD eincompiliert werden kann. Im Gegensatz zu anderen Unices wie den meisten Linux- und BSD-Varianten besitzt OS X kein Paketsystem, das im System enthalten ist.

Es stehen mindestens zwei zur Wahl: Fink und MacPorts. Beide bieten in etwa denselben Funktionsumfang (z.B. eine Menge Pakete, von denen gewählt werden kann, Auflösung von Abhängigkeiten, die Möglichkeit, einfach Pakete hinzuzufügen/zu aktualisieren/zu entfernen, etc...). Fink bietet sowohl vorcompilierte Binärpakete als auch das Erstellen aus den Quelldateien, wohingegen MacPorts nur das Erstellen aus den Quellen anbietet. Der Autor dieser Anleitung hat MacPorts gewählt aus dem Grund, dass das grundlegende Setup etwas leichtgewichtiger war. Folgende Beispiele werden sich auf MacPorts beziehen.

Um zum Beispiel MPlayer mit OSD-Unterstützung zu compilieren:

sudo port install pkgconfig

Dies wird pkg-config installieren, was ein System für die Handhabung von Compiler-/Link-Flags für Bibliotheken ist. Das configure-Skript von MPlayer benutzt dies, um Bibliotheken angemessen zu erkennen. Dann kannst du fontconfig auf ähnliche Weise installieren:

sudo port install fontconfig

Dann kannst du fortfahren mit der Ausführung von MPlayers configure-Skript (beachte die Umgebungsvariablen PKG_CONFIG_PATH und PATH, so dass configure die mit MacPorts installierten Bibliotheken findet):

PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/ PATH=$PATH:/opt/local/bin/ ./configure

5.5.1. MPlayer OS X GUI

Du bekommst ein natives GUI für MPlayer zusammen mit für Mac OS X vorcompilierten MPlayer-Binaries vom MPlayerOSX-Projekt, sei aber gewarnt: Dieses Projekt ist nicht mehr aktiv.

Zum Glück wurde MPlayerOSX von einem Mitglied des MPlayer-Teams übernommen. Preview-Releases findet man auf unserer Download-Seite, und ein offizielles Release sollte bald herauskommen.

Um MPlayerOSX selbst von den Quellen zu bauen, brauchst du mplayerosx, das main und eine Kopie des main SVN-Moduls genannt main_noaltivec. mplayerosx ist das GUI-Frontend, main ist MPlayer und main_noaltivec ist MPlayer ohne AltiVec-Unterstützung.

Um ein Checkout der SVN-Module durchzuführen, benutze:

svn checkout svn://svn.mplayerhq.hu/mplayerosx/trunk/ mplayerosx
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/ main

Um MPlayerOSX zu bilden, musst du so etwas ähnliches einrichten:

MPlayer_source_verzeichnis
|
|--->main           (MPlayer SVN-Quelldateien)
|
|--->main_noaltivec (MPlayer SVN-Quelldateien konfiguriert mit --disable-altivec)
|
|--->mplayerosx     (MPlayer OS X SVN-Quelldateien)

Du musst zuerst main und main_noaltivec erzeugen.

Setze zu Beginn für maximale Rückwärtskompatibilität eine Umgebungsvariable:

export MACOSX_DEPLOYMENT_TARGET=10.3

Dann konfiguriere:

Wenn du für eine G4 oder eine neuere CPU mit AltiVec-Support konfigurierst, mache folgendes:

./configure --disable-gl --disable-x11

Wenn du für einen G3-getriebenen Rechner mit AltiVec konfigurierst, mache dies:

./configure --disable-gl --disable-x11 --disable-altivec

Du musst config.mak editieren und -mcpu und -mtune von 74XX auf G3 ändern.

Fahre fort mit

make

und gehe dann ins Verzeichnis mplayerosx, gib dort folgendes ein:

make dist

Dies wird ein komprimiertes .dmg-Archiv mit der gebrauchsfertigen Binary erzeugen.

Du kannst auch das Xcode 2.1 Projekt verwenden; das alte Projekt für Xcode 1.x läuft nicht mehr.

Kapitel 6. Allgemeiner Gebrauch von MEncoder

Eine komplette Liste der MEncoder-Optionen und Beispiele findest du in der Manpage. Eine Reihe praktischer Beispiele und detaillierter Anleitungen zur Anwendung verschiedener Encodier-Parameter findet du in den Encodier-Tipps (im Moment nur auf englisch), die aus verschiedenen Mailing-Listen-Threads von MPlayer-Nutzern zusammengestellt wurden. Durchsuche die Archive hier und für ältere Dinge besonders hier nach einer Fülle von Diskussionen über alle Aspekte und Probleme mit der Encodierung mittels MEncoder.

6.1. Auswahl der Codecs und Containerformate

Audio- und Videocodecs für die Encodierung werden mit den Optionen -oac und -ovc respektive gewählt. Gib zum Beispiel folgendes ein:

mencoder -ovc help

um alle von der MEncoder-Version auf deinem Rechner unterstützten Video-Codecs aufzulisten. Die folgenden Wahlmöglichkeiten stehen zur Verfügung:

Audiocodecs:

AudiocodecnameBeschreibung
mp3lameencodiere nach VBR-, ABR- oder CBR-MP3 mittels LAME
lavcverwende einen der Audiocodecs von libavcodec
faacFAAC AAC Audio-Encoder
toolameMPEG Audio Layer 2 Encoder
twolameMPEG Audio Layer 2 Encoder basierend auf tooLAME
pcmunkomprimiertes PCM-Audio
copynicht neu codieren, kopiere einfach nur komprimierte Frames

Video-Codecs:

VideocodecnameBeschreibung
lavcVerwende einen der Video-Codecs von libavcodec
xvidXvid, MPEG-4 Advanced Simple Profile (ASP) Codec
x264x264, MPEG-4 Advanced Video Coding (AVC), AKA H.264 Codec
nuvNuppelVideo, von Echtzeit-Anwendungen verwendet
rawunkomprimierte Video-Frames
copynicht neu codieren, kopiere einfach nur komprimierte Frames
framenoverwendet für 3-pass-Encodierung (nicht empfohlen)

Ausgabe-Containerformate werden mittels der Option -of gewählt. Gib folgendes ein

mencoder -of help

um alle von der MEncoder-Version auf deinem Rechner unterstützten Videocodecs aufzulisten. Die folgenden Wahlmöglichkeiten stehen zur Verfügung:

Containerformate:

Name des ContainerformatsBeschreibung
lavfeiner der von libavformat unterstützten Container
aviAudio-Video Interleaved
mpegMPEG-1 und MPEG-2 PS
rawvideoraw-Video-Stream (kein Muxen - nur ein Video-Stream)
rawaudioraw-Audio-Stream (kein Muxen - nur ein Audio-Stream)

Der AVI-Container ist das ursprüngliche Containerformat für MEncoder, was bedeutet, dass es der am besten gehandhabte ist und derjenige, für welchen MEncoder entworfen wurde. Wie oben angemerkt können weitere Containerformate verwendet werden, jedoch kann es bei deren Gebrauch zu Problemen kommen.

libavformat-Container:

Wenn du für das Muxen der Ausgabedatei libavformat verwendest (mittels -of lavf), wird das passende Containerformat entsprechend der Erweiterung der Ausgabedatei ermittelt. Du kannst ein bestimmtes Containerformat mit Hilfe der Option format von libavformat erzwingen.

libavformat ContainernameBeschreibung
mpgMPEG-1 und MPEG-2 PS
asfAdvanced Streaming Format
aviAudio-Video Interleaved
wavWaveform Audio
swfMacromedia Flash
flvMacromedia Flash Video
rmRealMedia
auSUN AU
nutNUT offener Container (experimentell und noch nicht Spec-konform)
movQuickTime
mp4MPEG-4 Format
dvSony Digital Video Container

Wie du siehst, erlaubt libavformat MEncoder, in eine beachtliche Vielfalt an Containern zu muxen. Leider solltest du wirklich Paranoia angesichts der resultierenden Datei schieben, da MEncoder nicht von Anfang an für die Unterstützung anderer Containerformate als AVI entworfen wurde. Überprüfe bitte sicherheitshalber, ob die Audio-/Video-Synchronisierung in Ordnung ist und ob die Datei von anderen Playern als MPlayer wiedergegeben werden kann.

Beispiel 6.1. Encodieren in das Macromedia Flash-Format

Erzeugen eines Macromedia Flash Videos, das in einem Web-Browser mit dem Macromedia Flash Plugin abgespielt werden kann:

          mencoder input.avi -o output.flv -of lavf \
          -oac mp3lame -lameopts abr:br=56 -ovc lavc \
          -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 \
          -srate 22050
        


6.2. Auswahl von Eingabedatei oder -gerät

MEncoder kann aus Dateien oder direkt von einer DVD- oder VCD-Disk encodieren. Schließe einfach den Dateinamen in der Befehlszeile mit ein, um von einer Datei zu ecodieren, oder dvd://Titelnummer bzw. vcd://Tracknummer zum Ecodieren von einem DVD-Titel oder VCD-Track. Wenn du bereits einmal eine DVD auf deine Festplatte kopiert hast (du kannst ein Tool wie etwa dvdbackup verwenden, auf den meisten Systemen verfügbar) und von der Kopie encodieren willst, solltest du nach wie vor die Syntax dvd:// benutzen, zusammen mit -dvd-device gefolgt vom Pfad zur kopierten DVD-Root. Die Optionen -dvd-device und -cdrom-device können auch dazu genutzt werden, die Pfade zu den Geräte-Nodes zu überschreiben, um direkt von der Disk zu lesen, falls die Standardoptionen /dev/dvd und /dev/cdrom auf deinem System nicht funktionieren.

Wenn du von einer DVD encodierst, ist es oft wünschenswert, ein zu encodierendes Kapitel oder einen Bereich von Kapiteln auszuwählen. Du kannst zu diesem Zweck die Option -chapter nutzen. Zum Beispiel wird -chapter 1-4 nur die Kapitel 1 bis 4 der DVD encodieren. Dies ist besonders nützlich, wenn du eine für zwei CDs bestimmte Encodierung mit 1400 MB durchführen willst, da du sicherstellen kannst, dass die Unterbrechung exakt an den Kapitelgrenzen stattfindet, anstatt mitten in einer Szene.

Besitzt du eine unterstützte TV-Capture-Karte, kannst du auch von einem TV-In-Gerät encodieren. Verwende tv://Kanalnummer als Dateinamen und -tv zur Konfiguration der zahlreichen Aufnahmeeinstellungen. Der DVB-Input funktioniert ähnlich.

6.3. Encodieren ins Sony PSP Video Format

MEncoder unterstützt das Encodieren in das Sony PSP Video Format, allerdings gibt es, abhängig von der Version der PSP Software, unterschiedliche Beschränkungen. Wer sicher gehen möchte, sollte folgende Beschränkungen beachten:

  • Bitrate: sollte 1500kbps nicht überschreiten, frühere Versionen unterstützten allerdings fast jede beliebige Bitrate, so lange der Header sagte, sie sei nicht zu hoch.

  • Dimensionen: die Breite und Höhe des PSP videos sollte ein Vielfaches von 16 sein, und das Produkt Breite * Höhe muss <= 64000 sein. Unter gewissen Umständen kann es der PSP möglich sein, höhere Auflösungen abzuspielen.

  • Audio: die Samplerate sollte für MPEG-4 Videos 24kHz, und für H.264 48kHz betragen.

Beispiel 6.2. Encodierung für PSP

          mencoder -ofps 30000/1001 -af lavcresample=24000 -vf harddup -of lavf \
          -oac lavc -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:acodec=libfaac \
          -lavfopts format=psp \
          input.video -o output.psp
        

Der Titel des Videos kann folgendermaßen angepasst werden: -info name=MovieTitle.


6.4. Encodieren von 2-pass-MPEG4 ("DivX")

Der Name kommt daher, dass diese Methode die Datei zweimal encodiert. Die erste Encodierung (synchronisierter Durchgang) erzeugt einige temporäre Dateien (*.log) mit einer Größe von ein paar Megabyte, lösche diese noch nicht (du kannst dabei die AVI löschen oder vielmehr einfach kein Video erstellen, indem du sie nach /dev/null umadressierst). Im zweiten Durchgang wird die 2-pass-Ausgabedatei erzeugt, indem die Bitraten-Daten der temporären Dateien genutzt werden. Die sich daraus ergebende Datei wird eine viel bessere Bildqualität besitzen. Wenn du das erste Mal davon gehört hast, solltest du einige im Netz verfügbare Handbücher zu Rate ziehen.

Beispiel 6.3. Kopieren eines Audio-Tracks

2-pass-Encodierung des zweiten Tracks einer DVD zu einer MPEG4 ("DivX") AVI-Datei während des gleichzeitigen Kopierens des Audio-Tracks.

          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
        


Beispiel 6.4. Encodieren eines Audio-Tracks

2-pass-Encodierung einer DVD nach einer MPEG4 ("DivX") AVI-Datei während des gleichzeitigen Encodierens des Audio-Tracks nach MP3. Sei bei der Anwendung dieser Methode vorsichtig, da sie in einigen Fällen zur Audio-/Video-Desynchronisierung führen kann.

          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.5. Encodieren ins MPEG-Format

MEncoder kann Ausgabedateien im Format MPEG (MPEG-PS) erzeugen. Gewöhnlich, wenn du MPEG1- oder MPEG2-Videos benutzt, tust du dies, weil du in ein erzwungenes Format wie SVCD, VCD oder DVD encodierst. Die spezifischen Anforderungen an diese Formate werden im Abschnitt Verwenden von MEncoder zum Erzeugen VCD/SVCD/DVD-konformer Dateien beschrieben.

Verwende die Option -of mpeg, um das Format der Ausgabedatei von MEncoder zu ändern.

Beispiel:

          mencoder input.avi -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video \
          -oac copy other_options -o output.mpg
        

Erzeugen einer für das Abspielen auf Systemen mit minimalem Multimedia-Support geeigneten MPEG1-Datei, wie etwa auf Standard-Windows-Installationen:

          mencoder input.avi -of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 \
          -o output.mpg -oac lavc -ovc lavc \
          -lavcopts acodec=mp2:abitrate=224:vcodec=mpeg1video:vbitrate=1152:keyint=15:mbd=2:aspect=4/3
        

Das gleiche bei Benutzung des MPEG-Muxers von libavformat:

          mencoder input.avi -o VCD.mpg -ofps 25 -vf scale=352:288,harddup -of lavf \
          -lavfopts format=mpg -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
        

Hinweis:

Wenn dich die Video-Qualität des zweiten Durchgangs aus irgendeinem Grund nicht zufrieden gestellt hat, kannst du deine Encodierung mit einer anderen Zielbitrate erneut durchlaufen lassen, vorausgesetzt, du hast die Statistikdateien des vorherigen Durchgangs gesichert. Dies ist möglich, weil das Primärziel der Statistikdateien die Aufzeichnung der Komplexität jedes Frames ist, was nicht allzusehr von der Bitrate abhängt. Du solltest daher beachten, dass du die besten Ergebnisse bekommst, wenn alle Durchgänge mit nicht zu sehr voneinander abweichenden Ziel-Bitraten durchlaufen werden.

6.6. Reskalierung von Filmen

Oft taucht die Notwendigkeit auf, die Größe der Bilder eines Films zu ändern. Das kann viele Gründe haben: das Anwachsen der Dateigröße, Netzwerkbandbreite etc. Die meisten Leute reskalieren gerade beim Konvertieren von DVDs oder SVCDs nach DivX AVI. Wenn du reskalieren willst, lies den Abschnitt Beibehalten des Seitenverhältnisses.

Der Skalierungsprozess wird vom scale-Video-Filter verarbeitet: -vf scale=Breite:Hoehe. Seine Qualität kann mit der Option -sws gesetzt werden. Ist sie nicht angegeben, wird MEncoder 2: bikubisch verwenden.

Anwendung:

mencoder input.mpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \
    -vf scale=640:480 -o output.avi

6.7. Kopieren von Streams

MEncoder kann Input-Streams auf zwei Arten verarbeiten: Encodiere oder kopiere sie. Dieser Abschnitt behandelt das Kopieren.

  • Videostream (Option -ovc copy): Damit kann man nette Sachen machen :) Wie etwa FLI oder VIVO oder MPEG1-Video in eine AVI-Datei legen (nicht konvertieren!)! Sicherlich kann nur MPlayer solche Dateien abspielen :) Und es hat tatsächlich keine wirkliche Daseinsberechtigung. Rational: Das Kopieren eines Video-Stream kann zum Beispiel dann nützlich sein, wenn nur der Audio-Stream encodiert werden muß (wie unkomprimiertes PCM nach MP3).

  • Audiostream (Option -oac copy): unkompliziert. Es ist möglich, eine externe Audio-Datei (MP3, WAV) herzunehmen und sie in einen Ausgabestream zu muxen. Nimm dazu die Option -audiofile Dateinamename.

Das Anwenden von -oac copy, um von einem Containerformat zum anderen zu kopieren, kann -fafmttag erfordern, um das Audio-Format-Tag der Originaldatei beizubehalten. Wenn du zum Beispiel eine NSV-Datei mit AAC-Audio in einen AVI-Container konvertierst, wird der Audio-Format-Tag fehlerhaft sein und muss geändert werden. codecs.conf enthält eine Liste von Audio-Format-Tags.

Beispiel:

mencoder input.nsv -oac copy -fafmttag 0x706D \
    -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o output.avi

6.8. Encodieren von mehreren Input-Bilddateien (JPEG, PNG, TGA, etc.)

MEncoder ist in der Lage, Filme aus einer oder mehreren JPEG-, PNG-, TGA- oder andere Bilddateien zu erzeugen. Mit einem einfachen framecopy kann es Dateien wie MJPEG (Motion JPEG), MPNG (Motion PNG) oder MTGA (Motion TGA) generieren.

Erläuterung des Prozesses:

  1. MEncoder decodiert das/die Input-Bild(er) mittels libjpeg (beim Decodieren von PNGs nimmt er libpng).

  2. MEncoder führt dann das decodierte Bild dem gewählten Video-Kompressor zu (DivX4, Xvid, FFmpeg msmpeg4, etc).

Beispiele.  Die Erklärung der Option -mf steht in der Manpage.

Erzeugen einer MPEG4-Datei aus allen im aktuellen Verzeichnis liegenden JPEG-Dateien:

mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc \
    -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

Erzeugen einer MPEG4-Datei aus einigen im aktuellen Verzeichnis liegenden JPEG-Dateien:

mencoder mf://frame001.jpg,frame002.jpg -mf w=800:h=600:fps=25:type=jpg \
    -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

Erzeugen einer MPEG4-Datei aus einer eindeutigen Liste von JPEG-Dateien (list.txt im aktuellem Verzeichnis enthält die Liste von Dateien, die als Quelle genutzt werden sollen, eine pro Zeile):

mencoder mf://@list.txt -mf w=800:h=600:fps=25:type=jpg \
    -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

Du kannst verschiedene Bildtypen mischen, dabei ist egal, welche Methode du verwendest — individuelle Dateinamen, Wildcard oder eine Datei mit einer Liste — vorausgesetzt natürlich, dass sie dieselben Abmessungen haben. Du kannst also den Titel von einer PNG-Datei nehmen und daran eine Diashow aus JPEG-Bildern anhängen.

Erzeugen einer Motion JPEG (MJPEG) Datei aus allen im aktuellen Verzeichnis liegenden JPEG-Dateien:

mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc copy -oac copy -o output.avi

Erzeugen einer unkomprimierten Datei aus allen PNG-Dateien im aktuellen Verzeichnis:

mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc raw -oac copy -ooutput.avi

Anmerkung

Die Breite muß ein Vielfaches von 4 sein, dies ist eine Einschränkung des RAW RGB AVI Formats.

Erzeugen einer Motion PNG (MPNG) Datei aus allen PNG-Dateien im aktuellen Verzeichnis:

mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc copy -oac copy -o output.avi

Erzeugen einer Motion TGA (MTGA) Datei aus allen TGA-Dateien im aktuellen Verzeichnis:

mencoder mf://*.tga -mf w=800:h=600:fps=25:type=tga -ovc copy -oac copy -o output.avi

6.9. Extrahieren von DVD-Untertiteln in eine VOBsub-Datei

MEncoder kann Untertitel aus einer DVD in VOBsub-formatierte Dateien extrahieren. Diese bestehen aus einem Paar von Dateien mit den Endungen .idx und .sub und sind für gewöhnlich in ein einzelnes .rar-Archiv gepackt. MPlayer kann diese mit den Optionen -vobsub und -vobsubid abspielen.

Du legst den Basisnamen der Ausgabedateien (z.B ohne die Erweiterung .idx oder .sub) mittels -vobsubout fest und den Index für diesen Untertitel der resultierenden Dateien mit -vobsuboutindex.

Stammt der Input nicht von einer DVD, solltest du -ifo verwenden, um die zur Konstruktion der resultierenden .idx-Datei benötigten .ifo-Datei anzugeben.

Stammt der Input nicht von einer DVD und besitzt du die .ifo-Datei nicht, musst du die Option -vobsubid anwenden, um ihn wissen zu lassen, welche Sprach-ID in die .idx-Datei eingefügt werden soll.

Jeder Start wird den laufenden Untertitel anhängen, falls die .idx- und .sub-Dateien bereits existieren. Also solltest du beide vor dem Start entfernen.

Beispiel 6.5. Kopieren zweier Untertitel aus einer DVD während einer 2-pass-Encodierung

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

Beispiel 6.6. Kopieren eines französichen Untertitels aus einer MPEG-Datei

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

6.10. Beibehalten des Seitenverhältnisses

Dateien von DVDs und SVCDs (z.B. MPEG1/2) enthalten einen Wert für das Seitenverhältnis, welcher beschreibt, wie der Player den Videostream skalieren soll, damit Menschen keine Eierköpfe kriegen (Beispiel: 480x480 + 4:3 = 640x480). Beim Encodieren zu AVI-(DivX)-Dateien musst du dir bewusst sein, dass AVI-Header diesen Wert nicht abspeichern. Das Reskalieren des Films ist ätzend und zeitaufwändig, da muss es doch einen besseren Weg geben!

Es gibt ihn.

MPEG4 besitzt ein einzigartiges Feature: Der Video-Stream kann sein benötigtes Seitenverhältnis enthalten. Ja, genau wie MPEG1/2 (DVD, SVCD) und H.263 Dateien. Bedauerlicherweise gibt es abgesehen von MPlayer wenige Video-Player, die dieses MPEG4-Attribut unterstützen.

Dieses Feature kann nur mit dem mpeg4-Codec von libavcodec verwendet werden. Vergiss nicht: Obwohl MPlayer die erzeugte Datei korrekt abspielen wird, könnten andere Player das verkehrte Seitenverhältnis benutzen.

Du solltest auf jeden Fall die schwarzen Bänder oberhalb und unterhalb des Filmbildes abschneiden. In der Manpage steht mehr zur Verwendung der Filter cropdetect und crop.

Anwendung:

mencoder sample-svcd.mpg -vf crop=714:548:0:14 -oac copy -ovc lavc \
    -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -o output.avi

Kapitel 7. Encodieren mit MEncoder

7.1. Erzeugen eines hochwertigen MPEG-4-Rips ("DivX") eines DVD-Films
7.1.1. Vorbereitung aufs Encodieren: Identifiziere Quellmaterial und Framerate
7.1.1.1. Identifizieren der Quellframerate
7.1.1.2. Identifizieren des Quellmaterials
7.1.2. Konstanter Quantisierungsparameter vs. Multipass
7.1.3. Randbedingungen für effizientes Encodieren
7.1.4. Abschneiden und Skalieren
7.1.5. Auswahl von Auflösung und Bitrate
7.1.5.1. Berechnen der Auflösung
7.1.6. Filtern
7.1.7. Interlacing und Telecine
7.1.8. Interlaced Video encodieren
7.1.9. Anmerkungen zur Audio-/Videosynchronisation
7.1.10. Auswahl des Videocodecs
7.1.11. Audio
7.1.12. Muxen
7.1.12.1. Verbessern der Mux- und A/V-Synchronisationszuverlässigkeit
7.1.12.2. Limitierungen des AVI-Containers
7.1.12.3. Muxen in den Matroska-Container
7.2. Wie mit telecine und interlacing in NTSC-DVDs umgehen
7.2.1. Einführung
7.2.2. Wie kann man sagen, welchen Typ Video man hat
7.2.2.1. Progressiv
7.2.2.2. Telecined
7.2.2.3. Interlaced
7.2.2.4. Gemischtes progressive und telecine
7.2.2.5. Gemischtes progressive und interlaced
7.2.3. Wie jede Kategorie encodieren
7.2.3.1. Progressive
7.2.3.2. Telecined
7.2.3.3. Interlaced
7.2.3.4. Gemischtes progressive und telecine
7.2.3.5. Gemischtes progressive und interlaced
7.2.4. Fußnoten
7.3. Encodieren mit der libavcodec Codecfamilie
7.3.1. Videocodecs von libavcodec
7.3.2. Audiocodecs von libavcodec
7.3.2.1. PCM/ADPCM-Format, begleitende Tabelle
7.3.3. Encodieroptionen von libavcodec
7.3.4. Beispiele für Encodierungseinstellungen
7.3.5. Maßgeschneiderte inter/intra-Matrizen
7.3.6. Beispiel
7.4. Encodieren mit dem Xvid-Codec
7.4.1. Welche Optionen sollte ich verwenden, um die besten Resultate zu erzielen?
7.4.2. Encodieroptionen von Xvid
7.4.3. Encodierung Profile
7.4.4. Encodierungseinstellungen Beispiele
7.5. Encodieren mit dem x264-Codec
7.5.1. Encodieroptionen von x264
7.5.1.1. Einführung
7.5.1.2. Optionen, die primär Geschwindigkeit und Qualität betreffen
7.5.1.3. Diverse Eigenschaften betreffende Optionen
7.5.2. Beispiele für Encodieroptionen
7.6. Encodieren mit der Video for Windows Codecfamilie
7.6.1. Von Video for Windows unterstützte Codecs
7.6.2. Benutzung von vfw2menc, um eine Datei für Codeceinstellungen zu erzeugen
7.7. MEncoder benutzen, um QuickTime-kompatible Dateien zu erstellen
7.7.1. Warum sollte jemand QuickTime-kompatible Dateien erstellen wollen?
7.7.2. Beschränkungen von QuickTime 7
7.7.3. Beschneidung der Ränder (Cropping)
7.7.4. Skalierung
7.7.5. A/V-Synchronisation
7.7.6. Bitrate
7.7.7. Encoding-Beispiel
7.7.8. Remuxen zu MP4
7.7.9. Metadata-Tags hinzufügen
7.8. Verwendung von MEncoder zum Erzeugen VCD/SVCD/DVD-konformer Dateien.
7.8.1. Formatbeschränkungen
7.8.1.1. Formatbeschränkungen
7.8.1.2. GOP-Größenbeschränkungen
7.8.1.3. Bitraten-Beschränkungen
7.8.2. Output-Optionen
7.8.2.1. Seitenverhältnis
7.8.2.2. Aufrechterhalten der A/V-Synchronisation
7.8.2.3. Sampleraten-Konvertierung
7.8.3. Verwenden des libavcodec zur VCD/SVCD/DVD-Encodierung
7.8.3.1. Einführung
7.8.3.2. lavcopts
7.8.3.3. Beispiele
7.8.3.4. Erweiterte Optionen
7.8.4. Encodieren von Audio
7.8.4.1. toolame
7.8.4.2. twolame
7.8.4.3. libavcodec
7.8.5. Zusammenfassung
7.8.5.1. PAL DVD
7.8.5.2. NTSC DVD
7.8.5.3. PAL AVI mit enthaltenem AC3 Audio nach DVD
7.8.5.4. NTSC AVI mit AC3-Ton nach DVD
7.8.5.5. PAL SVCD
7.8.5.6. NTSC SVCD
7.8.5.7. PAL VCD
7.8.5.8. NTSC VCD

7.1. Erzeugen eines hochwertigen MPEG-4-Rips ("DivX") eines DVD-Films

Eine häufig gestellte Frage ist "Wie mache ich den hochwertigsten Rip für eine gegebene Größe?". Eine weitere Frage ist "Wie mache ich den qualitativ bestmöglichen DVD-Rip? Die Dateigröße ist mir egal, ich will einfach nur die beste Qualität."

Die letzte Frage ist zumindest etwas falsch gestellt. Wenn du dir schließlich keine Gedanken um die Dateigröße machst, warum kopierst Du dann nicht einfach den kompletten MPEG-2-Videostream der DVD? Sicherlich, deine AVI wird am Ende 5GB groß sein, so oder so, jedoch ist dies mit Sicherheit deine beste Option, wenn du die beste Qualität erhalten willst und dich nicht um die Größe kümmerst.

Tatsache ist, der Grund eine DVD in MPEG-4 umzuencodieren ist gerade weil dir die Größe wichtig ist.

Es ist sehr schwierig, ein Rezept zum Erzeugen eines sehr hochwertigen DVD-Rips anzubieten. Es gilt mehrere Faktoren zu berücksichtigen, und du solltest dich mit diesen Details auskennen oder du wirst voraussichtlich am Ende von den Resultaten enttäuscht. Nachfolgend werden wir einige dieser Themen etwas näher untersuchen und uns danach ein Beispiel ansehen. Wir gehen davon aus, dass Du libavcodec zum Encodieren des Videos verwendest, obwohl diese Theorie genauso gut auf andere Codecs zutrifft.

Ist dies alles zu viel für dich, solltest du womöglich auf eins der vielen guten Frontends zurückgreifen, die in der MEncoder-Sektion unserer diesbezüglichen Projektseite zu finden sind. Auf diese Weise solltest du in der Lage sein, hochwertige Rips zu erhalten ohne viel nachdenken zu müssen, da die meisten dieser Tools dazu entworfen wurden, clevere Entscheidungen für dich zu treffen.

7.1.1. Vorbereitung aufs Encodieren: Identifiziere Quellmaterial und Framerate

Bevor du über das Encodieren eines Films nachdenkst, solltest du einige einleitende Schritte vornehmen.

Der erste und allerwichtigste Schritt vor dem Encodieren sollte sein, festzustellen, mit welchem Inhaltstyp du umgehst. Kommt dein Quellmaterial von einer DVD oder einem Rundfunk-/Kabel-/Satelliten-TV, wird es in einem von zwei Formaten abgespeichert: NTSC für Nord-Amerika und Japan, PAL für Europa usw. Es ist wichtig, sich klar zu machen, dass dies ganz einfach die Formatierung für die Präsentation auf einem Fernsehgerät ist und häufig nicht mit dem originalen Format des Films korrespondiert. Die Erfahrung zeigt, dass NTSC-Material schwieriger zu encodieren ist, da mehr Elemente in der Quelle zu identifizieren sind. Um eine geeignete Encodierung zu produzieren, solltest du das originale Format kennen. Fehler, dies sollte man berücksichtigen, führen zu diversen Fehlerstellen in deiner Encodierung, einschließlich hässlicher Kammartefakte (combing/interlacing) und doppelten oder gar verlorenen Frames. Abgesehen davon, dass sie unschön sind, beeinflussen diese Artefakte die Codierungseffizienz negativ: Du erhältst eine schlechtere Qualität pro Bitrateneinheit.

7.1.1.1. Identifizieren der Quellframerate

Hier ist eine Liste der verbreiteten Typen des Quellmaterials, in der Du diese und ihre Eigenschaften voraussichtlich finden wirst:

  • Standardfilm: Produziert für theatralische Anzeige bei 24fps.

  • PAL-Video: Aufgenommen mit einer PAL-Videokamera bei 50 Feldern pro Sekunde. Ein Feld besteht ganz einfach aus den ungerade oder gerade nummerierten Zeilen eines Frames. Das Fernsehen wurde entworfen, diese Felder als billige Form einer analogen Komprimierung im Wechsel zu aktualisieren. Das menschliche Auge kompensiert dies angeblich, aber wenn du Interlacing einmal verstanden hast, wirst du lernen, es auch auf dem TV-Bildschirm zu erkennen und nie wieder Spass am Fernsehen haben. Zwei Felder machen keinen kompletten Frame, da sie in einer 50-stel Sekunde zeitlich getrennt aufgenommen werden und so nicht Schlange stehen solange keine Bewegung da ist.

  • NTSC-Video: Aufgenommen mit einer NTSC-Videokamera bei 60000/1001 Feldern pro Sekunde oder 60 Feldern pro Sekunde zu Zeiten vor dem Farbfernsehen. Ansonsten ähnlich wie PAL.

  • Animation: Üblicherweise bei 24fps gezeichnet, kommt jedoch auch in Varianten mit gemischter Framerate vor.

  • Computer Graphics (CG): Kann irgendeine Framerate sein, jedoch sind einige üblicher als andere; 24 und 30 Frames pro Sekunde sind typisch für NTSC und 25fps ist typisch für PAL.

  • Alter Film: Diverse niedrigere Frameraten.

7.1.1.2. Identifizieren des Quellmaterials

Filme, die sich aus Frames zusammensetzen, werden den progressiven zugeordnet, während die aus unabhängigen Feldern bestehenden entweder interlaced (engl. für verschachteln) oder Video genannt werden - somit ist letzterer Terminus zweideutig.

Um das ganze noch komplizierter zu machen, sind manche Filme ein Gemisch aus einigen den oben beschriebenen Formen.

Das wichtigste Unterscheidungsmerkmal zwischen all diesen Formaten ist, dass einige Frame-basiert, andere wiederum Feld-basiert sind. Immer wenn ein Film für die Anzeige auf dem Fernseher vorbereitet wird (einschließlich DVD), wird er in ein Feld-basiertes Format konvertiert. Die verschiedenen Methoden, mit denen dies bewerkstelligt werden kann, werden zusammengenommen als "telecine" bezeichnet, von welchen das verrufene NTSC "3:2 pulldown" eine Abart darstellt. Sofern das Originalmaterial nicht Feld-basiert war (bei gleicher Feldrate), erhältst du einen Film in einem anderen Format als das Original.

Es gibt einige verbreitete Typen des pulldown:

  • PAL 2:2 pulldown: Das schönste von allen. Jeder Frame wird durch das wechselweise Extrahieren und Anzeigen der geradzahligen und ungeradzahligen Zeilen für die Dauer von zwei Feldern dargestellt. Hat das Originalmaterial 24fps, beschleunigt dieser Prozess den Film um 4%.

  • PAL 2:2:2:2:2:2:2:2:2:2:2:3 pulldown: Jeder 12-te Frame, anstatt nur jeder 2-te, wird für die Dauer von zwei Feldern dargestellt. Dies vermeidet die 4% Geschwindigkeitssteigerung, macht jedoch das Umkehren des Prozesses viel schwieriger. Es ist üblicherweise in Musical-Produktionen zu sehen, wo das Anpassen der Geschwindigkeit um 4% sicherlich das musikalische Ergebnis kaputt machen würde.

  • NTSC 3:2 telecine: Frames werden abwechselnd für die Dauer von 3 oder 2 Feldern angezeigt. Dies verleiht der Feldrate das 2.5-fache der originalen Framerate. Das Resultat wird dadurch auch leicht von 60 Feldern pro Sekunde auf 60000/1001 Felder pro Sekunde verlangsamt, um die NTSC-Felddrate beizubehalten.

  • NTSC 2:2 pulldown: Verwendet zur Darstellung von 30fps Material auf NTSC. Schön, genau wie das 2:2 PAL pulldown.

Es gibt auch Methoden zur Konvertierung zwischen NTSC- und PAL-Video, jedoch liegen diese Themen jenseits des Rahmens dieser Anleitung. Wenn du auf solch einen Film stößt und ihn encodieren willst, solltest du besser eine Kopie im originalen Format suchen. Die Konvertierung zwischen diesen beiden Formaten ist hochdestruktiv und kann nicht spurlos rückgängig gemacht werden, somit wird deine Encodierung außerordentlich darunter leiden, wenn sie aus einer konvertierten Quelle erzeugt wurde.

Wenn ein Video auf DVD gespeichert wird, werden fortlaufend Feldpaare als Frames gruppiert, auch wenn nicht beabsichtigt ist, diese gleichzeitig zu zeigen. Der bei DVD und digitalem TV verwendete MPEG-2-Standard bietet einen Weg für beides, die originalen progressiven Frames zu encodieren und die Anzahl der Felder, für die ein Frame gezeigt werden soll, im Header dieses Frames zu speichern. Wurde diese Methode angewandt, wird dieser Film oft als "soft telecined" beschrieben, da der Prozess eher nur den DVD-Player anweist, pulldown auf den Film anzuwenden, als den Film selbst abzuändern. Dieser Fall sollte möglichst bevorzugt werden, da er (eigentlich ignoriert) leicht vom Encoder rückgängig gemacht werden kann und da er die maximale Qualität beibehält. Wie auch immer, viele DVD- und Rundfunkproduktionsstudios verwenden keine passenden Encodierungstechniken, sie produzieren stattdessen Filme mit "hard telecine", bei denen Felder sogar in encodiertes MPEG-2 dupliziert werden.

Die Vorgehensweisen für den Umgang mit solchen Fällen werden später in diesem Handbuch behandelt. Wir lassen dich jetzt mit einigen Anleitungen zur Identifizierung der Materialtypen zurück, mit denen du es zu tun hast:

NTSC-Bereiche:

  • Wenn MPlayer angibt, dass die Framerate während des Betrachtens des Films zu 24000/1001 gewechselt hat und diese nie wieder zurückwechselt, handelt es sich meist mit Sicherheit um progressiven Inhalt, der "soft telecined" wurde.

  • Wenn MPlayer anzeigt, dass die Framerate zwischen 24000/1001 und 30000/1001 vor und zurück wechselt, und Du siehst hin und wieder Kammartefakte, dann gibt es mehrere Möglichkeiten. Die Segmente mit 24000/1001 fps sind meist mit Sicherheit progressiver Inhalt, "soft telecined", jedoch könnten die Teile mit 30000/1001 fps entweder "hard telecined" 24000/1001 fps Inhalt oder 60000/1001 Felder pro Sekunde NTSC-Video sein. Verwende die selben Richtwerte wie in den folgenden zwei Fällen, um zu bestimmen, um was es sich handelt.

  • Wenn MPlayer nie einen Frameratenwechsel anzeigt und jeder einzelne Frame mit Bewegung gekämmt (combed) erscheint, ist dein Film ein NTSC-Video bei 60000/1001 Feldern pro Sekunde.

  • Wenn MPlayer nie einen Frameratenwechsel anzeigt und zwei von fünf Frames gekämmt (combed) erscheinen, ist der Inhalt deines Films "hard telecined" 24000/1001 fps.

PAL-Bereiche:

  • Wenn du niemals irgend ein Combing siehst, ist dein Film 2:2 pulldown.

  • Siehst du alle halbe Sekunde abwechselnd ein- und ausgehendes Combing, dann ist dein Film 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.

  • Hast du immer während Bewegungen Combing gesehen, dann ist dein Film PAL-Video bei 50 Feldern pro Sekunde.

Tipp:

MPlayer kann das Filmplayback mittels der Option -speed verlangsamen oder Frame für Frame abspielen. Versuche -speed 0.2 zu verwenden, um den Film sehr lamgsam anzusehen oder drücke wiederholt die Taste ".", um jeweils einen Frame abzuspielen und identifiziere dann das Muster, falls du bei voller Geschwindigkeit nichts erkennen kannst.

7.1.2. Konstanter Quantisierungsparameter vs. Multipass

Es ist möglich, deinen Film in einer großen Auswahl von Qualitäten zu encodieren. Mit modernen Videoencodern und ein wenig Pre-Codec-Kompression (Herunterskalierung und Rauschunterdrückung), kann eine sehr gute Qualität bei 700 MB für einen 90-110-minütigen Breitwandfilm erreicht werden. Des Weiteren können alle Filme - sogar die längsten - mit nahezu perfekter Qualität bei 1400 MB encodiert werden.

Es gibt drei Annäherungen für das Encodieren eines Videos: konstante Bitrate (CBR), konstanter Quantisierungsparameter und Multipass (ABR, oder mittlere Bitrate).

Die Komplexität der Frames eines Filmes und somit die Anzahl der für deren Komprimierung erforderlichen Bits kann von einer Szene zur anderen außerordentlich variieren. Moderne Videoencoder können sich durch Variieren der Bitrate an diese Anforderungen anpassen. In einfachen Modi wie CBR kennen die Encoder jedoch nicht den Bitratenbedarf zukünftiger Szenen und sind somit nicht in der Lage, die angeforderte mittlere Bitrate über längere Zeitspannen zu überschreiten. Erweiterte Modi wie etwa Multipass-Encodierung können die Statistik früherer Durchgänge berücksichtigen; dies behebt das oben erwähnte Problem.

Anmerkung:

Die meisten Codecs, die ABR-Encodierung unterstützen, unterstützen nur die Encodierung in zwei Durchgängen (two pass) während einige andere wie etwa x264, Xvid und libavcodec Multipass unterstützen, was die Qualität bei jedem Durchgang leicht verbessert. Jedoch ist diese Verbesserung weder messbar noch ist sie nach dem 4-ten Durchgang oder so spürbar. Aus diesem Grund werden in diesem Abschnitt die Encoderierung mit 2 Durchläufen (two pass) und Multipass abwechselnd angewandt.

In jedem dieser Modi bricht der Videocodec (wie etwa libavcodec) den Videoframe in 16x16 Pixel Macroblöcke und wendet danach einen Quantisierer auf jeden Macroblock an. Je niedriger der Quantisierer desto besser die Qualität und desto höher die Bitrate. Die Methode, die der Filmencoder zur Bestimmung des auf einen gegebenen Macroblock anzuwendenden Quantisierer verwendet, variiert und ist in hohem Maße einstellbar. (Dies ist eine extrem übertriebene Vereinfachung des aktuellen Prozesses aber nützlich, um das Grundkonzept zu verstehen.)

Wenn du eine konstante Bitrate festlegst, wird der Videocodec das Video so encodieren, dass so viele Details wie notwendig und so wenig wie möglich ausgesondert werden, um unterhalb der vorgegebenen Bitrate zu bleiben. Wenn du dich wirklich nicht um die Dateigröße kümmerst, könntest du auch CBR verwenden und eine nahezu endlose Bitrate festlegen. (In der Praxis bedeutet dies einen Wert, der hoch genug ist, kein Limit aufzuwerfen wie 10000Kbit.) Ohne echte Einschränkung der Bitrate wird der Codec als Ergebnis den niedrigsten möglichen Quantisierer für jeden Macroblock anwenden (wie durch vqmin für libavcodec spezifiziert, Standardwert ist 2). Sobald du eine Bitrate festlegst, die niedrig genug ist, den Codec zur Anwendung eines höheren Quantisierers zu zwingen, bist Du nahezu sicher dabei, die Qualität deines Videos zu ruinieren. Um dies zu vermeiden, solltst du möglicherweise dein Video wie in der später in diesem Handbuch beschriebenen Methode reduzieren. Im Allgemeinen solltst du CBR vollkommen meiden, wenn dir Qualität wichtig ist.

Mit konstantem Quantisierer wendet der Codec denselben Quantisierer, wie durch die Option vqscale (für libavcodec) spezifiziert, auf jeden Macroblock an. Willst du einen Rip mit höchstmöglicher Qualität und ignorierst dabei wiederum die Bitrate, kannst du vqscale=2 verwenden. Dies wird dieselbe Bitrate und PSNR (peak signal-to-noise ratio) liefern wie CBR mit vbitrate=infinity und der Standardeinstellung vqmin=2.

Das Problem mit konstantem Quantisierer ist, dass der vorgegebene Quantisierer zum Einsatz kommt, egal ob der Macroblock ihn benötigt oder nicht. Dies heißt, es wäre möglich, einen höheren Quantisierer auf einen Macroblock anzuwenden, ohne sichtbare Qualität zu opfern. Warum die Bits für einen unnötig kleinen Quantisierer verschwenden? Deine CPU hat soundso viele Arbeitsgänge Zeit zur Verfügung, die Festplatte jedoch nur soundso viele Bits.

Bei einer Encodierung mit zwei Durchläufen (two pass), wird der erste Durchgang den Film so rippen, als würde CBR vorliegen, jedoch wird ein Log die Eigenschaften jedes Frames beibehalten. Diese Daten werden danach während des zweiten Durchgangs dazu verwendet, intelligente Entscheidungen zur Wahl des Quantisierers zu treffen. Während schneller Action oder hochdetaillierter Szenen werden womöglich höhere Quantisierer, während langsamen Bewegungen und Szenen mit weniger Details niedrigere Quantisierer verwendet. Normalerweise ist die Anzahl der Bewegungen wichtiger als die der Details.

Wenn du vqscale=2 verwendest, verschwendest du Bits. Wenn du vqscale=3 anwendest, wirst du keinen Rip mit bestmöglicher Qualität erhalten. Angenommen du rippst eine DVD mit vqscale=3 und das Resultat ist 1800Kbit. Wenn du in zwei Durchgängen mit vbitrate=1800 encodierst, wird das daraus resultierende Video eine bessere Qualität bei gleicher Bitrate haben.

Da du nun davon überzeugt bist, dass zwei Durchgänge (two pass) den besten Weg darstellen, stellt sich jetzt tatsächlich die Frage, welche Bitrate verwendet werden soll? Die Antwort ist, dass es nicht nur eine Antwort gibt. Idealerweise willst du eine Bitrate wählen, die die beste Balance zwischen Qualität und Dateigröße ergibt. Die kann abhängig vom Quellvideo variieren.

Interessiert die Größe nicht, stellen etwa 2000Kbit plus oder minus 200Kbit einen guten Ausgangspunkt für einen sehr hochqualitativen Rip dar. Bei einem Video mit schneller Action oder hohen Details, oder wenn du schlicht und ergreifend ein sehr kritisches Auge besitzst, könntest du dich für 2400 oder 2600 entscheiden. Bei einigen DVDs kannst du eventuell keinen Unterschied bei 1400Kbit feststellen. Um ein besseres Gefühl zu bekommen, ist es eine gute Idee, mit Szenen bei unterschiedlichen Bitraten herumzuexperimentieren.

Wenn du eine bestimmte Größe anvisierst, musst du die Bitrate irgendwie kalkulieren. Aber zuvor solltest du wissen, wieviel Platz du für den/die Audiotrack(s) reservieren musst, daher solltest Du diese(n) zuerst rippen. Du kannst die Bitrate mit folgender Gleichung berechnen: Bitrate = (zielgroesse_in_MByte - soundgroesse_in_MByte) * 1024 * 1024 / laenge_in_sek * 8 / 1000 Um zum Beispiel einen zweistündigen Film auf eine 702MB CD mit einem 60MB Audiotrack zu bekommen, sollte die Videobitrate folgendermaßen sein: (702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000 = 740kbps

7.1.3. Randbedingungen für effizientes Encodieren

Aufgrund der Natur der MPEG-Komprimierung gibt es zahlreiche Randbedingungen, denen du zum Erreichen maximaler Qualität folgen solltest. MPEG splittet das Video in Macroblöcke genannte 16x16 Quadrate auf, jeder davon zusammengesetzt aus 4 8x8 Blöcken mit Luma-(Intensitäts)-Informationen und zwei halb-auflösenden 8x8 Chroma-(Farb)-Blöcken (einer für die Rot-Cyan-Achse und der andere für die Blau-Gelb-Achse). Selbst wenn Breite und Höhe deines Films kein Vielfaches von 16 sind, wird der Encoder ausreichend 16x16 Macroblöcke zur Abdeckung des gesamten Bildbereichs verwenden und der Extraplatz wird verschwendet. Folglich ist es keine gute Idee, im Interesse der Maximierung der Qualität bei fester Dateigröße, Abmessungen zu verwenden, die kein Vielfaches von 16 sind.

Die meisten DVDs besitzen ein bestimmtes Maß schwarzer Balken an ihren Rändern. Diese dort zu belassen wird für die Qualität in mehrfacher Hinsicht sehr schädlich sein.

  1. MPEG-Kompression hängt in höchstem Maße von den Frequenzbereichs-Transformationen ab, insbesondere von der Discrete Cosine Transform (DCT), die der Fourier Transform ähnelt. Diese Art Encodierung ist für darstellende Muster und weiche Übergänge effizient, hat jedoch große Probleme mit scharfen Kanten. Um diese zu encodieren muss sie viel mehr Bits verwenden, oder es wird andernfalls ein als Ringing bekannter Artefakt auftreten.

    Die Discrete Frequency Transform (DCT) erfolgt separat auf jeden Macroblock (eigentlich auf jeden Block), somit trifft dieses Problem nur zu, wenn sich in einem Block eine scharfe Kante befindet. Beginnt dein schwarzer Rand exakt an den Grenzen zum Vielfachen von 16 Pixeln, stellt dies kein Problem dar. Seis drum, die schwarzen Ränder bei DVDs werden in den seltensten Fällen schön angeordnet, daher wirst du sie in der Praxis immer abschneiden müssen, um diesen Nachteil zu vermeiden.

Zusätzlich zu den Frequenzbereichs-Transformationen verwendet die MPEG-Kompression Bewegungsvektoren, um den Wechsel von einem Frame zum anderen darzustellen. Bewegungsvektoren arbeiten bei Inhalt, der von den Kanten eines Bildes her einfließt, normalerweise weniger effizient, da dieser im vorherigen Frame nicht vorhanden ist. Solange sich das Bild bis voll zur Kante des encodierten Bereichs hin vergrößert, haben Bewegungsvektoren kein Problem mit Inhalt, der sich aus den Kanten des Bildes hinausbewegt. Die Präsenz schwarzer Ränder kann jedoch Ärger machen:

  1. Die MPEG-Kompression speichert für jeden Macroblock einen Vektor, um ausfindig zu machen, welcher Teil des vorherigen Frames in diesen Macroblock als Basis zur Vorhersage des nächsten Frames kopiert werden soll. Nur die verbleibenden Unterschiede müssen encodiert werden. Überspannt der Macroblock die Kante des Bildes und enthält einen Teil des schwarzen Randes, werden Bewegungsvektoren aus anderen Teilen des Bildes den schwarzen Rand überschreiben. Dies bedeutet, dass jede Menge Bits entweder zur wiederholten Schwärzung des überschriebenen Randes aufgewendet werden müssen, oder es wird (eher) erst gar kein Bewegungsvektor genutzt und alle Änderungen innerhalb dieses Macroblocks müssen explizit encodiert werden. So oder so wird die Encodiereffizienz außerordentlich reduziert.

    Nochmal, dieses Problem trifft nur dann zu, wenn schwarze Ränder nicht an den Grenzen eines Vielfachen von 16 anstehen.

  2. Zuletzt noch was, angenommen wir haben einen Macroblock im Inneren des Bildes und ein Objekt bewegt sich aus Richtung Nähe der Kante des Bildes her in diesen Block hinein. Die MPEG-Encodierung kann nicht sagen "kopiere den Teil, der innerhalb des Bildes liegt, den schwarzen Rand aber nicht". Somit wird der schwarze Rand ebenfalls mit hinein kopiert und jede Menge Bits müssen zur Encodierung des Teils des Bildes, der dort angenommen wird, aufgewendet werden.

    Läuft das Bild ständig zur Kante des encodierten Bereichs hin, besitzt MPEG spezielle Optimierungen, um immer wieder dann die Pixel am Rand des Bildes zu kopieren, wenn ein Bewegungsvektor von außerhalb des encodierten Bereichs ankommt. Dieses Feature wird nutzlos, wenn der Film schwarze Ränder hat. Im Gegensatz zu den Problemen 1 und 2 hilft hier kein Anordnen der Ränder am Vielfachen von 16.

  3. Obwohl die Ränder komplett schwarz sind und sich nie ändern, ist zumindest ein minimaler Overhead damit verbunden, mehr Macroblöcke zu besitzen.

Aus all diesen Gründen wird empfohlen, schwarze Ränder komplett abzuschneiden. Mehr noch, liegt ein Bereich mit Rauschen/Verzerrung an der Kante des Bildes, steigert dessen Abschneiden ebenso die Encodiereffizienz. Videophile Puristen, die den Originalzustand so nah wie möglich sichern wollen, mögen dieses Abschneiden (cropping) beanstanden, wenn du jedoch nicht planst, bei konstantem Quantisierer zu encodieren, wird der Qualitätsgewinn, den Du durch dieses Abschneiden erreichst, beträchtlich über dem Verlust an Informationen an den Kanten liegen.

7.1.4. Abschneiden und Skalieren

Wiederaufruf der vorherigen Sektion, dass die letzte von Dir encodierte Bildgröße ein Vielfaches von 16 sein sollte (bei beidem, Breite und Höhe). Diese kann durch Abschneiden, Skalieren erreicht werden oder durch eine Kombination von beidem.

Beim Abschneiden gibt es ein paar Richtwerte, die befolgt werden müssen, um eine Zerstörung des Films zu vermeiden. Das normale YUV-Format, 4:2:0, speichert Chroma-(Farb)-Informationen in einer Unterstichprobe (subsampled), z.B. wird Chroma nur halb so oft in jede Richtung gesampelt wie Luma-(Intensitäts)-Informationen. Beobachte dieses Diagramm, in dem L Luma-Samplingpunkte bedeuten und C für Chroma steht.

LLLLLLLL
CCCC
LLLLLLLL
LLLLLLLL
CCCC
LLLLLLLL

Wie du sehen kannst, kommen Zeilen und Spalten des Bildes natürlich paarweise. Folglich müssen deine Abschneide-Offsets und Abmessungen geradzahlig sein. Sind sie dies nicht, wird Chroma nicht mehr korrekt mit Luma abgeglichen. In der Theorie ist es möglich, mit ungeraden Offsets abzuschneiden, jedoch erfordert dies ein Resampling von Chroma, was potentiell eine mit Verlust verbundene Operation bedeutet und vom Crop-Filter nicht unterstützt wird.

Weiterhin wird interlaced Video folgendermaßen gesampelt:

Oberes FeldUnteres Feld
LLLLLLLL        
CCCC        
        LLLLLLLL
LLLLLLLL        
        CCCC
        LLLLLLLL
LLLLLLLL        
CCCC        
        LLLLLLLL
LLLLLLLL        
        CCCC
        LLLLLLLL

Wie du erkennen kannst, wiederholt sich das Muster bis nach 4 Zeilen nicht. Somit müssen bei interlaced Video dein y-Offset und die Höhe für das Ausschneiden ein Vielfaches von 4 sein.

Die ursprüngliche DVD-Auflösung ist 720x480 für NTSC und 720x576 für PAL, es gibt jedoch ein Aspektkennzeichen, das spezifiziert, ob Vollbild (4:3) oder Breitwandfilm (16:9) vorliegt. Viele (wenn nicht die meisten) Breitwandfilm-DVDs sind nicht grundsätzlich 16:9, sondern entweder 1.85:1 oder 2.35:1 (Cinescope). Dies bedeutet, dass es schwarze Bänder im Video geben wird, die herausgeschnitten werden müssen.

MPlayer stellt einen Crop-Erkennungsfilter zur Verfügung, der das Ausschnittsrechteck (-vf cropdetect) bestimmt. Starte MPlayer mit -vf cropdetect, und er wird die Crop-Einstellungen zum Entfernen der Ränder ausgeben. du solltest den Film lange genug laufen lassen, damit die gesamte Bildfläche verwendet wird, um akkurate Crop-Werte zu erhalten.

Teste danach die Werte, die von MPlayer über die Befehlszeile mittels cropdetect ausgegeben wurden und passe das Rechteck nach deinen Bedürfnissen an. Der Filter rectangle kann dabei helfen, indem er dir erlaubt, das Rechteck interaktiv über dem Film zu positionieren. Vergiss nicht, den oben genannten Teilbarkeitsrichtwerten zu folgen, sodass du die Chroma-Ebenen nicht verkehrt anordnest.

In bestimmten Fällen könnte Skalieren nicht wünschenswert sein. Skalierung in vertikaler Richtung ist mit interlaced Video schwierig, und wenn du das Interlacing beibehalten willst, solltest du für gewöhnlich das Skalieren bleiben lassen. Hast du nicht vor zu skalieren, willst aber nach wie vor Abmessungen in einem Vielfachen von 16 verwenden, musst du über den Rand hinausschneiden. Schneide aber lieber nicht über den Rand hinaus, da schwarze Ränder sehr schlecht zu encodieren sind!

Weil MPEG-4 16x16 Macroblöcke nutzt, solltest du dich vergewissern, dass jede Abmessung des zu encodierenden Videos ein Vielfaches von 16 ist oder du verschlechterst andernfalls die Qualität, speziell bei niedrigeren Bitraten. Du kannst dies durch Abrunden der Breite und Höhe des Ausschnittsrechtecks hinunter auf den nächsten Wert eines Vielfachen von 16 erreichen. Wie früher bereits erklärt, wirst du beim Abschneiden das y-Offset um die Hälfte der Differenz der alten und neuen Höhe erhöhen wollen, sodass das daraus resultierende Video aus der Mitte des Frames genommen wird. Und stelle wegen der Art, wie ein DVD-Video gesampelt wird, sicher, dass das Offset eine gerade Zahl ist. (Verwende in der Tat - als eine Regel - nie ungerade Werte für irgendwelche Parameter beim Abschneiden oder Skalieren eines Videos) Wenn du dich beim Wegwerfen einiger extra Pixel nicht wohl fühlst, ziehst du es stattdessen vor, das Video zu skalieren. Wir werden uns dies im unten stehenden Beispiel mal ansehen. Du kannst den cropdetect-Filter sogar alles oben erwähnte für dich erledigen lassen, da dieser einen optionalen Parameter round besitzt, der standardmäßig gleich 16 ist.

Pass auch auf "halbschwarze" Pixel an den Kanten auf. Stelle sicher, dass du diese ebenfalls mit abschneidest oder du vergeudest dort Bits, wo sie doch besser anderswo verwendet werden sollten.

Nachdem nun alles gesagt ist, wirst du möglicherweise bei einem Video landen, dessen Pixel nicht ganz 1.85:1 oder 2.35:1, aber ziemlich nahe dran sind. Du könntest ein neues Seitenverhältnis manuell berechnen, aber MEncoder bietet eine Option für libavcodec genannt autoaspect, die das für dich erledigt. Skaliere dieses Video auf keinen Fall hoch, um die Pixel abzugleichen solange du keinen Festplattenplatz verschwenden willst. Das Skalieren sollte beim Playback gemacht werden und der Player wird das in der AVI gespeicherte Seitenverhältnis zur Bestimmung der besten Auflösung verwenden. Unglücklicherweise erzwingen nicht alle Player diese Auto-Skalierinformation, und deshalb willst du vielleicht trotzdem neu skalieren.

7.1.5. Auswahl von Auflösung und Bitrate

Wenn du nicht vor hast, im Modus mit konstantem Quantisier zu encodieren, musst du eine Bitrate auswählen. Das Konzept der Bitrate ist denkbar einfach. Sie ist die (mittlere) Anzahl Bits, die pro Sekunde zum Speichern des Films verbraucht werden. Normalerweise wird die Bitrate in Kilobit (1000 Bit) pro Sekunde gemessen. Die Größe deines Films auf der Platte ist die Bitrate multipliziert mit der Dauer des Films, plus einem kleinen "Overhead" (siehe zum Beispiel in der Sektion über den AVI-Container). Weitere Parameter wie Skalierung, Cropping, usw. werden die Dateigröße nicht ändern, solange du nicht auch die Bitrate veränderst!

Die Bitrate skaliert nicht proportional zur Auflösung. Dies bedeutet, eine Datei 320x240 mit 200 KBit/Sek wird nicht dieselbe Qualität aufweisen wie der gleiche Film bei 640x480 und 800 KBit/Sek! Dafür gibt es zwei Gründe:

  1. Wahrnehmbar: du bemerkst MPEG-Artefakte eher, wenn sie größer hochskaliert sind! Artefakte erscheinen bei einer Skalierung von Blöcken (8x8). Dein Auge wird in 4800 kleinen Blöcken nicht so leicht Fehler sehen wie es welche in 1200 großen Blöcken sieht (vorausgesetzt du skalierst beide auf Vollbild).

  2. Theoretisch: Wenn du ein Bild runterskalierst, aber nach wie vor die selbe Größe der (8x8) Blöcke zur Frequenzraumtransformation verwendest, bewegst Du mehr Daten in die Hochfrequenzbänder. Grob gesagt, jedes Pixel enthält mehr des Details als es dies zuvor tat. Somit enthält dein herunterskaliertes Bild 1/4 der Information in räumlichen Richtungen, es könnte immer noch einen hohen Anteil Information im Frequenzbereich enthalten (vorausgesetzt dass die hohen Frequenzen im originalen 640x480 Bild nicht ausgenutzt wurden).

Vergangene Leitfäden legten nahe, eine Bitrate und Auflösung zu wählen, die auf eine "Bits pro Pixel"-Näherung basieren, dies ist jedoch im allgemeinen aus oben genannten Gründen nicht gültig. Eine bessere Schätzung scheint zu sein, dass Bitraten proportional zur Quadratwurzel der Auflösung skalieren, sodass 320x240 und 400 KBit/Sek vergleichbar mit 640x480 bei 800 KBit/Sek wären. Dies wurde aber nicht mit theoretischer oder empirischer Strenge verifiziert. Desweiteren ist es in Anbetracht der Tatsache, dass Filme in Bezug auf Rauschen, Details, Bewegungsgrad usw. außerordentlich variieren, zwecklos, allgemeine Empfehlungen für die Bits pro Diagonallänge (dem Analog zu Bits pro Pixel unter Verwendung der Quadratwurzel) abzugeben.

So weit haben wir nun die Schwierigkeit der Wahl von Bitrate und Auflösung diskutiert.

7.1.5.1. Berechnen der Auflösung

Die folgenden Schritte werden dich in der Berechnung der Auflösung deiner Encodierung anleiten, ohne das Video allzusehr zu verzerren, indem verschiedene Typen von Informationen über das Quellvideo in Betracht gezogen werden. Zuerst solltest du die encodierte Auflösung berechnen: ARc = (Wc x (ARa / PRdvd )) / Hc

wobwei:

  • Wc und Hc die Breite und Höhe des zugeschnittenen Videos darstellen

  • ARa das angezeigte Seitenverhältnis ist, das üblicherweise 4/3 oder 16/9 beträgt

  • PRdvd das Pixelverhältnis der DVD ist, welches gleich 1.25=(720/576) für PAL-DVDs und 1.5=(720/480) für NTSC-DVDs beträgt

Dann kannst du die X- und Y-Auflösung berechnen, gemäß eines gewisse Faktors der Kompressionsqualität (CQ): ResY = INT(SQRT( 1000*Bitrate/25/ARc/CQ )/16) * 16 und ResX = INT( ResY * ARc / 16) * 16

Okay, aber was ist der CQ? Der CQ repräsentiert die Anzahl Bits pro Pixel und pro Frame der Encodierung. Grob ausgedrückt, je größer der CQ, desto geringer die Wahrscheinlichkeit, Encodierungsartefakte zu sehen. Trotz allem, wenn du eine Zielgröße für deinen Film hast (1 oder 2 CDs zum Beispiel), gibt es eine begrenzte Gesamtzahl an Bits, die du aufwenden kannst; deswegen ist es notwendig, einen guten Kompromiss zwischen Komprimierbarkeit und Qualität zu suchen.

Der CQ hängt von der Bitrate, der Effektivität des Videocodecs und der Filmauflösung ab. Um den CQ anzuheben, könntest du typischerweise den Film unter der Annahme herunterskalieren, dass die Bitrate mit der Funktion der Zielgröße und der Länge des Films berechnest, die ja konstant sind. Mit MPEG-4 ASP-Codecs wie Xvid und libavcodec, resultiert ein CQ unter 0.18 für gewöhnlich in einem ziemlich blockhaften Bild, weil nicht genug Bits zum Codieren der Information jedes Macroblocks vorhanden sind. (MPEG4, wie auch viele andere Codecs, gruppiert Pixel nach Blöcken verschiedener Pixel, um das Bild zu komprimieren; sind nicht genügend Bits vorhanden, werden die Kanten dieser Blöcke sichtbar.) Es ist daher weise, einen CQ im Bereich von 0.20 bis 0.22 für einen 1 CD-Rip und 0.26-0.28 für einen 2 CD-Rip mit Standard-Encodieroptionen zu nehmen. Höherentwickelte Encodieroptionen wie die hier für libavcodec und Xvid aufgelisteten sollten es möglich machen, dieselbe Qualität mit einem CQ im Bereich von 0.18 bis 0.20 für einen 1 CD-Rip und 0.24 bis 0.26 für einen 2 CD-Rip zu erreichen. Mit den MPEG-4 AVC-Codecs wie x264, kannst du einen CQ im Bereich von 0.14 bis 0.16 mit Standard-Encodieroptionen verwenden, und solltest bis auf 0.10 bis 0.12 mit den erweiterten Encodieroptionen von x264 runter gehen können.

Bitte nimm zur Kenntnis, dass der CQ lediglich eine richtungsweisendes Maß ist, da sie vom encodierten Inhalt abhängt. Ein CQ von 0.18 kann für einen Bergman-Film recht hübsch aussehen, im Gegensatz zu einem Film wie The Matrix, der jede Menge High-Motion-Szenen enthält. Auf der anderen Seite ist es nutzlos, den CQ höher als 0.30 zu schrauben, da du ohne spürbaren Qualitätsgewinn Bits vergeuden würdest. Beachte ebenso, dass wie früher in diesem Handbuch bereits angemerkt, niedrig auflösende Videos einen größeren CQ benötigen, um gut auszusehen (im Vergleich z.B. zur DVD-Auflösung).

7.1.6. Filtern

Zu lernen, wie man MEncoders Videofilter verwendet, ist essentiell, um gute Encodierungen zu produzieren. Jede Videoverarbeitung wird über Filter ausgeführt -- Ausschneiden, Skalieren, Farbanpassung, Rauschentfernung, Scharfzeichnen, Deinterlacing, telecine, inverses telecine und Deblocking, um nur ein paar davon aufzuzählen. Zusammen mit der gewaltigen Zahl unterstützter Inputformate, ist die Vielfalt der in MEncoder verfügbaren Filter eine seiner Hauptvorteile im Vergleich zu ähnlichen Programmen.

Filter werden in einer Kette über die Option -vf geladen:

-vf filter1=Optionen,filter2=Optionen,...

Die meisten Filter nehmen mehrere numerische, kommagetrennte Optionen entgegen, jedoch variiert die Syntax der Optionen von Filter zu Filter, also lies bitte die Manpage für Details zu den Filtern, die du verwenden willst.

Filter wirken auf das Video in der Reihenfolge ein, in der sie geladen werden. Zum Beispiel wird folgende Kette:

-vf crop=688:464:12:4,scale=640:464

zuerst den Bereich 688x464 aus dem Bild schneiden mit der oberen, linken Ecke bei (12,4) und danach das Ergebnis auf 640x464 herunter skalieren.

Bestimmte Filter müssen zu oder nahe dem Anfang der Filterkette geladen werden, um Vorteile aus den Informationen des Videodecoders zu ziehen, die ansonsten durch andere Filter verloren gehen oder ungültig gemacht würden. Die wichtigsten Beispiele sind pp (Nachbearbeitung (postprocessing), nur wenn es Deblock- oder Dering-Operationen durchführt), spp (ein weiterer Postprozessor zum Entfernen von MPEG-Artefakten), pullup (umgekehrtes telecine) und softpulldown (zur Konvertierung von soft telecine nach hard telecine).

Im Allgemeinen solltest du den Film so wenig wie möglich Filtern, um nahe an der originalen DVD-Quelle zu bleiben. Ausschneiden ist oft notwendig (wie oben beschrieben), vermeide aber das Skalieren von Videos. Obwohl das Herunterskalieren manchmal vorgezogen wird, um höhere Quantisierer zu verwenden, wollen wir beide diese Dinge vermeiden: Erinnere dich daran, dass wir von Anfang an beschlossen hatten, einen Kompromiss zwischen Bits und Qualität zu schließen.

Passe ebenso kein Gamma, Kontrast, Helligkeit, usw. an. Was auf deinem Display gut aussieht, sieht auf anderen eventuell nicht gut aus. Diese Anpassungen sollten nur im Playback vorgenommen werden.

Eine Sache, die du vielleicht machen willst, ist, das Video durch einen sehr feinen Entrauschfilter (Denoise) zu schicken, wie etwa -vf hqdn3d=2:1:2. Nochmals, es geht darum, die Bits einer besseren Verwendung zuzuführen: Warum Bits zum Encodieren des Rauschens verschwenden, wenn du dieses Rauschen auch während des Playback entfernen kannst? Die Parameter für hqdn3d zu erhöhen, wird überdies die Komprimierbarkeit erhöhen, erhöhst du jedoch die Werte zu sehr, riskierst Du eine Verringerung der Bildsichtbarkeit. Die oben vorgeschlagenen Werte (2:1:2) sind ziemlich konservativ; du solltest dich frei fühlen, mit höheren Werten herumzuexperimentieren und die Ergebnisse selbst zu beobachten.

7.1.7. Interlacing und Telecine

Nahezu alle Filme sind bei 24 fps aufgenommen. Weil NTSC 30000/1001 fps entspricht, müssen mit diesen 24 fps Videos einige Verarbeitungen durchgeführt werden, um sie mit der korrekten NTSC-Framerate laufen zu lassen. Der Prozess wird 3:2 pulldown genannt, allgemein telecine zugeordnet (weil pulldown des öfteren während des telecine-Prozesses angewandt wird), und naiv so beschrieben, dass er durch Verlangsamung des Films auf 24000/1001 fps und dem Wiederholen jeden vierten Frames arbeitet.

Keine spezielle Verarbeitung ist jedoch bei einem Video für PAL-DVDs durchzuführen, das bei 25 fps läuft. (Technisch gesehen kann PAL telecined werden, 2:2 pulldown genannt, dies ist jedoch in der Praxis nicht von Bedeutung.) Der 24 fps Film wird einfach mit 25 fps abgespielt. Das Resultat ist, dass der Film ein wenig schneller abläuft, doch solange du kein Alien bist, wirst du möglicherweise keinen Unterschied wahrnehmen. Die meisten PAL-DVDs haben pitch-korrigiertes Audio, dadurch hören sie sich bei 25 fps abgespielt korrekt an, obwohl der Audiotrack (und infolgedessen der gesamte Film) eine 4% kürzere Abspielzeit hat wie NTSC-DVDs.

Weil das Video in einer PAL-DVD nicht verändert wurde, musst du dich nicht viel um die Framerate sorgen. Die Quelle ist 25 fps und dein Rip wird 25 fps haben. Wenn du jedoch einen NTSC-DVD-Film rippst, musst du eventuell umgekehrtes telecine anwenden.

Für mit 24 fps aufgenommene Filme ist das Video auf der NTSC-DVD entweder telecined 30000/1001 oder hat andernfalls progressive 24000/1001 fps und es ist vorgesehen, on-the-fly vom DVD-Player telecined zu werden. Auf der anderen Seite sind TV-Serien üblicherweise nur interlaced, nicht telecined. Dies ist keine feste Regel: Einige TV-Serien sind interlaced (wie etwa Buffy die Vampirjägerin), wogegen andere eine Mixtur aus progressive und interlaced sind (so wie Angel oder 24) - wers kennt :).

Es wird strengstens empfohlen, die Sektion über Wie mit telecine und interlacing in NTSC-DVDs umgehen durchzulesen, um den Umgang mit den verschiedenen Möglichkeiten zu lernen.

Wenn du aber hauptsächlich nur Filme rippst, gehst du wahrscheinlich entweder mit 24 fps progressivem oder telecined Video um, in welchem Falle du den Filter pullup mittels -vf pullup,softskip verwenden kannst.

7.1.8. Interlaced Video encodieren

Ist der Film, den du encodieren willst, interlaced (NTSC-Video oder PAL-Video), wirst du wählen müssen, ob du ihn deinterlacen willst oder nicht. Während das Deinterlacing deinen Film zwar auf progressiven Scan-Displays wie Computermonitoren und Projektoren verwendbar macht, wird dich dies doch etwas kosten: Die Feldrate von 50 oder 60000/1001 Feldern pro Sekunde wird auf 25 oder 30000/1001 Frames pro Sekunde halbiert und annähernd die Hälfte der Informationen in deinem Film geht während Szenen mit signifikanter Bewegung verloren.

Deswegen wird empfohlen, wenn du aus Gründen hochqualitativer Archivierung encodierst, kein Deinterlacing durchzuführen. Du kannst den Film immer noch beim Playback deinterlacen, wenn du ihn auf progressiven Scan-Geräten anzeigst. Und zukünftige Player werden in der Lage sein, auf volle Feldrate zu deinterlacen, mit Interpolation auf 50 oder 60000/1001 komplette Frames pro Sekunde aus interlaced Video heraus.

Spezielle Sorgfalt solltest du bei der Arbeit mit interlaced Video walten lassen:

  1. Ausschneidehöhe und y-Offset müssen Vielfache von 4 sein.

  2. Jedes vertikale Skalieren muss im interlaced Modus durchgeführt werden.

  3. Nachbearbeitungs- (postprocessing) und Rauschunterdrückungsfilter (denoising) funktionieren eventuell nicht wie erwartet, wenn du nicht speziell darauf achtest, dass sie zu einem Zeitpunkt nur ein Feld verarbeiten, und sie können das Video kaputt machen, wenn sie inkorrekt angewendet werden.

Mit diesen Dingen im Kopf, hier das erste Beispiel:

mencoder capture.avi -mc 0 -oac lavc -ovc lavc -lavcopts \
vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224

Beachte die Optionen ilme und ildct.

7.1.9. Anmerkungen zur Audio-/Videosynchronisation

MEncoders Algorithmen der Audio-/Videosynchronisation wurden mit der Intention entwickelt, Dateien mit kaputter Sychronisation wieder herzustellen. In einigen Fällen können unnötiges Überspringen und Duplizieren von Frames und möglicherweise leichte A/V-Desynchronisation verursachen, auch wenn sie mit dem richtigen Input verwendet werden (gewiss, Probleme mit A/V-Synchronisation treffen nur zu, wenn du den Audiotrack während der Transcodierung des Videos verarbeitest oder kopierst, wozu auch nachhaltig ermutigt wird). Hierfür müsstest du mit der Option -mc 0 in die Grundeinstellung der A/V-Synchronisation wechseln oder diese in deine ~/.mplayer/mencoder Konfigurationsdatei eintragen, solange du ausschließlich mit guten Quellen arbeitest (DVD, TV-Capture, hochqualitativen MPEG-4-Rips usw.) und mit nicht-kaputten ASF/RM/MOV-Dateien.

Wenn du dich überdies gegen merkwürdige Frameübersprünge und -duplikationen absichern willst, kannst du beides verwenden, -mc 0 und -noskip. Dies verhindert jede A/V-Synchronisation und kopiert die Frames eins-zu-eins, somit kannst du sie nicht verwenden, falls du irgendwelche Filter verwendest, die unvorhersagbar Frames hinzufügen oder streichen oder falls deine Input-Datei eine variable Framerate besitzt! Deshalb wird eine allgemeine Anwendung von -noskip nicht empfohlen.

Die von MEncoder unterstützte sogenannte "3-pass" Audioencodierung soll laut Berichten A/V-Desynchronisation verursachen. Dies geschieht definitiv dann, wenn sie in Verbindung mit bestimmten Filtern verwendet wird, daher wird nicht empfohlen, den 3-pass-Audio-Modus anzuwenden. Dieses Feature ist nur aus Kompatibilitätsgründen übrig geblieben und für erfahrene Benutzer, die wissen, wann es sicher anzuwenden ist und wann nicht. Wenn du zuvor noch nie etwas vom 3-pass-Modus gehört hast, vergiss, dass wir es je erwähnt haben!

Es gab auch Berichte über A/V-Desynchronisation, wenn mit MEncoder von stdin encodiert wurde. Lass das bleiben! Verwende immer eine Datei oder ein CD/DVD/usw-Laufwerk als Input.

7.1.10. Auswahl des Videocodecs

Welcher Videocodec die beste Wahl ist, hängt von mehreren Faktoren wie Größe, Qualität, Streambarkeit, Brauchbarkeit und Popularität, manche davon weitgehend vom persönlichen Geschmack und technischen Randbedingungen ab.

  • Kompressionseffizienz: Es ist leicht zu verstehen, dass die meisten Codecs der neueren Generation dafür gemacht wurden, Qualität und Komprimierung zu verbessern. Deshalb behauptet der Autor dieses Handbuches und viele andere Leute, dass du nichts verkehrt machen kannst, [1] wenn du MPEG-4 AVC-Codecs wie x264 anstatt MPEG-4 ASP-Codecs wie libavcodec MPEG-4 oder Xvid wählst. (Zukunftsorientierte Codec-Entwickler interessiert eventuell Michael Niedermayers Meinung "why MPEG4-ASP sucks" zu lesen.) Ebenso solltest du mit MPEG-4 ASP eine bessere Qualität erhalten als mit MPEG-2-Codecs.

    Allerdings können neuere Codecs, die noch stark in der Entwicklung stecken, unter unentdeckten Bugs leiden, die die Encodierung ruinieren können. Dies nimmt man schlicht in Kauf, wenn man "bleeding edge"-Technologie verwendet.

    Außerdem erfordert der Umgang mit einem neuen Codec und sich mit dessen Optionen vertraut zu machen eine Zeit, bis du weißt, was alles anzupassen ist, um die erhoffte Bildqualität zu erreichen.

  • Hardware-Kompatibilität: Gewöhnlich dauert es bei neuen standalone Video-Playern lange, bis der Support für die neuesten Videocodecs eingebunden ist. Als ein Ergebnis unterstützen die meisten nur MPEG-1 (wie VCD, XVCD und KVCD), MPEG-2 (wie DVD, SVCD und KVCD) und MPEG-4 ASP (wie DivX, LMP4 von libavcodec und Xvid) (Vorsicht: Im Allgemeinen werden nicht alle MPEG-4 ASP-Features unterstützt). Sieh bitte in den technischen Spezifikationen deines Players nach (falls welche vorhanden sind) oder google nach mehr Informationen.

  • Beste Qualität pro Encodierzeit: Codecs, die es schon einige Zeit gibt (wie libavcodec MPEG-4 und Xvid), sind gewöhnlich heftig mit allen möglichen intelligenten Algorithmen und SIMD Assembly-Code optimiert. Das sind sie deshalb, weil sie darauf abzielen, das beste Verhältnis von Qualität pro Encodierzeit zu liefern. Jedoch haben sie oft einige sehr fortschrittliche Optionen, die, wenn aktiviert, das Encodieren bei marginalem Gewinn wirklich langsam machen.

    Wenn du es auf die Wahnsinnsgeschwindigkeit abzielst, solltest du in der Nähe der Standardeinstellungen des Videocodecs bleiben (obwohl du ruhig weitere Optionen ausprobieren solltest, die in anderen Sektionen dieses Handbuchs angesprochen werden).

    Vielleicht überlegst du auch, einen Codec auszuwählen, der mit Multi-Threading klarkommt, was nur für Benutzer von Rechnern mit mehreren CPUs von Nutzen ist. libavcodec MPEG-4 erlaubt dies zwar, aber die Geschwindigkeitsgewinne sind begrenzt und es gibt einen leicht negativen Effekt in Bezug auf die Bildqualität. Die Multi-Thread-Encodierung von Xvid, durch die Option threads aktiviert, kann zum Ankurbeln der Encodiergeschwindigkeit - um in typischen Fällen etwa 40-60% - bei wenn überhaupt geringer Bildverschlechterung verwendet werden. x264 erlaubt ebenfalls Multi-Thread-Encodierung, was das Encodieren momentan um 94% beschleunigt bei gleichzeitiger Verringerung des PSNR um einen Wert zwischen 0.005dB und 0.01dB.

  • Persönlicher Geschmack: Hier beginnt die Angelegenheit oft irrational zu werden: Aus den selben Gründen, aus denen manche über Jahre an DivX 3 hängen, während neuere Codecs bereits Wunder wirken, ziehen einige Leute Xvid oder libavcodec MPEG-4 dem x264 vor.

    Du solltest dir dein eigenes Urteil bilden; lass dich nicht von Leuten vollquasseln, die auf den einen Codec schwören. Nimm ein paar Beispiel-Clips von Originalquellen und vergleiche die verschiedenen Encodier-Optionen und Codecs, um den einen zu finden, mit dem du am besten klarkommst. Der beste Codec ist der, den du beherrschst und der in deinen Augen auf deinem Display am besten aussieht. [2]!

Sieh dazu bitte in der Sektion Auswahl der Codecs und Containerformate nach der Liste der unterstützten Codecs.

7.1.11. Audio

Audio ist ein leichter zu lösendes Problem: Wenn du Wert auf Qualität legst, lass es einfach so wie es ist. Gerade AC3 5.1 Streams sind meist 448Kbit/s und jedes Bit wert. Möglicherweise gerätst du in Versuchung, Audio in hochwertiges Vorbis umzuwandeln, aber nur weil du heute keinen A/V-Receiver für AC3-pass-through besitzt, bedeutet dies nicht, dass du nicht morgen doch einen hast. Halte deine DVD-Rips zukunftssicher, indem du den AC3-Stream beibehältst. Du behältst den AC3-Stream entweder, indem du ihn während der Encodierung direkt in den Video-Stream kopierst. Du kannst den AC3-Stream aber auch extrahieren, um ihn in Container wie NUT oder Matroska zu muxen.

mplayer source_file.vob -aid 129 -dumpaudio -dumpfile sound.ac3

dumpt Audiotrack Nummer 129 aus der Datei source_file.vob (NB: DVD-VOB-Dateien verwenden gewöhnlich andere Audionummerierungen, was bedeutet, dass der VOB-Audiotrack 129 der 2-te Audiotrack der Datei ist) in die Datei sound.ac3.

Aber manchmal hast du wirklich keine andere Wahl als den Sound weiter zu komprimieren, sodass mehr Bits fürs Video aufgewendet werden können. Die meisten Leute entscheiden sich für eine Audiokomprimierung mit MP3- oder Vorbis-Audiocodecs. Wobei letzterer ein sehr platzsparender Codec ist, MP3 wird von Hardware-Playern besser unterstützt, wobei sich dieser Trend auch ändert.

Verwende nicht -nosound beim Encodieren einer Datei, die Audio enhält, sogar wenn du Audio später separat encodierst und muxt. Zwar kann es im Idealfall manchmal funktionieren, wenn du -nosound verwendest, wahrscheinlich um einige Probleme in deinen Encodier-Befehlszeileneinstellungen zu verbergen. In anderen Worten, einen Soundtrack während dem Encodieren zu haben, stellt sicher, vorausgesetzt du siehst keine Meldungen wie Too many audio packets in the buffer, dass du in der Lage sein wirst, eine korrekte Synchronisation zu erhalten.

Du brauchst MEncoder zur Verarbeitung des Sounds. Du kannst zum Beispiel den originalen Soundtrack während dem Encodieren mit -oac copy kopieren oder ihn mittels -oac pcm -channels 1 -srate 4000 in eine "leichte" 4 kHz Mono WAV-PCM konvertieren. Anderenfalls wird er - in einigen Fällen - eine Videodatei erzeugen, die nicht mit Audio synchron läuft. So was kommt vor, wenn die Anzahl der Videoframes in der Quelldatei nicht mit der Gesamtlänge der Audioframes zusammenpasst oder immer dann, wenn Unstetigkeiten/Splices vorhanden sind, wo Audioframes oder extra Audioframes fehlen. Der korrekte Weg, mit dieser Art Problem umzugehen, ist Stille (silence) einzufügen oder Audio an diesen Punkten wegzuschneiden. Seis drum, MPlayer kann das nicht, also wenn du AC3-Audio demuxt und es in einer separaten Anwendung encodierst (oder es mit MPlayer in eine PCM dumpst), die Splices bleiben inkorrekt und der einzige Weg sie zu korrigieren ist, Videoframes an diesem Splice zu streichen bzw. zu duplizieren. Solange MEncoder Audio beim Encodieren des Videos sieht, kann er dieses Streichen/Duplizieren erledigen (was gewöhnlich OK ist, da es bei voller Schwärze/Szenenwechsel stattfindet), aber wenn MEncoder Audio nicht erkennen kann, wird er einfach alle Frames so wie sie ankommen verarbeiten und sie werden einfach nicht zum endgültigen Audiostream passen, wenn du beispielsweise deinen Audio- und Videotrack in eine Matroska-Datei mergst.

Zuallererst wirst du den DVD-Sound in eine WAV-Datei konvertieren müssen, die der Audiocodec als Input nutzen kann. Zum Beispiel:

mplayer source_file.vob -ao pcm:file=destination_sound.wav -vc dummy -aid 1 -vo null

wird den zweiten Audiotrack aus der Datei source_file.vob in die Datei destination_sound.wav dumpen. Vielleicht willst du den Sound vor dem Encodieren normalisieren, da DVD-Audiotracks gemeinhin bei niedriger Lautstärke aufgenommen sind. Du kannst beispielsweise das Tool normalize verwenden, das in den meisten Distributionen zur Verfügung steht. Wenn du Windows nutzt, kann ein Tool wie BeSweet denselben Job erledigen. Du wirst entweder nach Vorbis oder MP3 komprimieren. Zum Beispiel:

oggenc -q1 destination_sound.wav

wird destination_sound.wav mit der Encodierqualität 1 encodieren, was annähernd 80Kb/s ergibt und die Minimalqualität darstellt, mit der du encodieren solltest, wenn du Wert auf Qualität legst. Nimm bitte zur Kenntnis, dass MEncoder aktuell keine Vorbis-Audiotracks in die Output-Datei muxen kann, da er nur AVI- und MPEG-Container als Output unterstützt, wobei es beim Audio-/Videoplayback zu Synchronisationproblemen mit einigen Playern führen wird, wenn die AVI-Datei VBR-Audiostreams wie z.B. Vorbis enthält. Keine Bange, dieses Dokument wird dir zeigen, wie du das mit Third-Party-Programmen hinbekommst.

7.1.12. Muxen

Nun da du dein Video encodiert hast, wirst du es höchstwahrscheinlich mit einem oder mehr Audiotracks in einen Movie-Container wie etwa AVI, MPEG, Matroska oder NUT muxen. MEncoder ist aktuell nur in der Lage, Audio und Video nativ in MPEG- und AVI-Containerformate auszugeben. Zum Beispiel:

mencoder -oac copy -ovc copy -o output_movie.avi -audiofile input_audio.mp2 input_video.avi

würde die Video-Datei input_video.avi und die Audio-Datei input_audio.mp2 in die AVI-Datei output_movie.avi mergen. Dieser Befehl funktioniert mit MPEG-1 Layer I, II und III Audio (eher bekannt als MP3), WAV und auch mit ein paar weiteren Audioformaten.

MEncoder zeichnet sich aus durch experimentellen Support für libavformat, das eine Programmbibliothek des FFmpeg-Projekts ist, welches das Muxen und Demuxen einer Vielzahl von Containern unterstützt. Zum Beispiel:

mencoder -oac copy -ovc copy  -o output_movie.asf -audiofile input_audio.mp2 input_video.avi -of lavf -lavfopts format=asf

wird das selbe machen, wie das obere Beispiel, außer dass der Output-Container ASF sein wird. Bitte nimm zur Kenntnis, dass dieser Support hochexperimentell ist (aber von Tag zu Tag besser wird) und nur funktionieren wird, wenn du MPlayer mit aktiviertem Support für libavformat kompiliert hast (was meint, dass eine Pre-Packaged Binary Version in den meisten Fällen nicht funktionieren wird).

7.1.12.1. Verbessern der Mux- und A/V-Synchronisationszuverlässigkeit

Es kann vorkommen, dass du ernsthafte A/V-Synchronisationsprobleme hast während du versuchst, deine Video- und einige Audiotracks zu muxen, wobei es nichts ändert, wenn du das Audiodelay anpasst, du bekommst nie eine korrekte Synchronisation zu Stande. Dies kann vorkommen, wenn du manche Videofilter verwendest, die einige Frames weglassen oder duplizieren, wie etwa die inverse telecine-Filter. ich kann dich nur dazu ermutigen, den harddup-Videofilter ans Ende der Filterkette anzuhängen, um solcherlei Problemen aus dem Weg zu gehen.

Ohne harddup verlässt sich MEncoder, wenn er einen Frame duplizieren will, darauf, dass der Muxer eine Marke auf den Container setzt, sodass der letzte Frame nochmals angezeigt wird, um während des Schreibens des aktuellen Frames synchron zu bleiben. Mit harddup wird MEncoder statt dessen einfach den zuletzt angezeigten Frame nochmal in die Filterkette einschieben. Dies bedeutet, dass der Encoder exakt denselben Frame zweimal entgegen nimmt und komprimiert. Dies ergibt eine etwas größere Datei, verursacht jedoch keine Probleme beim Demuxen oder Remuxen in ein anderes Containerformat.

Du kommst auch nicht um den Einsatz von harddup im Zusammenhang mit Containerformaten herum, die nicht allzu fest mit MEncoder verlinkt sind, wie etwa diejenigen, welche von libavformat unterstützt werden, der keine Frameduplikation auf Container-Level unterstützt.

7.1.12.2. Limitierungen des AVI-Containers

Obwohl es das am breitesten unterstützte Containerformat nach MPEG-1 ist, besitzt AVI auch einige gravierende Nachteile. Der vielleicht offensichtlichste ist der Overhead. Für jeden Block der AVI-Datei werden 24 Byte auf Header und Indizes verschwendet. Dies heißt übersetzt etwas mehr als 5 MB pro Stunde oder 1-2.5% Overhead für einen 700 MB Film. Das sieht nicht nach viel aus, könnte aber die Differenz zwischen einem Video mit 700 KBit/Sek oder 714 KBit/Sek bedeuten, und jedes bisschen mehr an Qualität zählt.

Zu dieser schockierenden Ineffizienz kommen bei AVI noch folgende wesentlichen Einschränkungen:

  1. Nur Inhalt mit festen fps kann gespeichert werden. Dies ist insbesondere dann einschränkend, wenn das Originalmaterial, das du encodieren willst, gemischter Inhalt ist, zum Beispiel ein Mix aus NTSC-Video und Filmmaterial. Eigentlich gibt es Hacks, die es ermöglichen, Inhalt mit gemischter Framerate in einer AVI unterzubringen, diese vergrößern jedoch den (ohnehin großen) Overhead fünffach oder mehr und sind somit ungeeignet.

  2. Audio in AVI-Dateien muss entweder konstante Bitrate (CBR) oder konstante Framegröße haben (also alle Frames decodieren zur selben Anzahl Samples). Unglücklicherweise erfüllt Vorbis, der effektivste Codec, keine dieser Anforderungen. Deshalb wirst du einen weniger effizienten Codec wie MP3 oder AC3 verwenden müssen, wenn du planst, einen Film in AVI zu speichern.

Nachdem ich nun all dies erzählt habe, muss ich anmerken, momentan unterstützt MEncoder keinen Output mit variablen fps oder Vorbis-Encodierung. Deswegen magst du dies nicht als Einschränkung ansehen, falls MEncoder das einzige Tool ist, das du nutzt, um deine Ecodierungen zu produzieren. Es ist dennoch möglich, MEncoder nur zur Videoencodierung zu verwenden und danach externe Tools, um Audio zu encodieren und in ein anderes Containerformat zu muxen.

7.1.12.3. Muxen in den Matroska-Container

Matroska ist ein freies, offenes Containerformat, das darauf abzielt, eine Menge erweiterter Features bereitzustellen, mit denen ältere Container wie AVI nicht umgehen können. Zum Beispiel unterstützt Matroska Audioinhalt mit variabler Bitrate (VBR), variable Frameraten (VFR), Kapitel, Dateianhänge, Fehlererkennung Error Detection Code (EDC) und modern A/V-Codecs wie "Advanced Audio Coding" (AAC), "Vorbis" oder "MPEG-4 AVC" (H.264), so gut wie nichts womit AVI etwas anfangen kann.

Die zum Erzeugen von Matroska-Dateien erforderlichen Tools werden zusammen mkvtoolnix genannt und stehen für die meisten Unix-Plattformen wie auch Windows zur Verfügung. Weil Matroska ein offener Standard ist, findest du vielleicht andere Tools, die sich besser für dich eignen, aber da mkvtoolnix das am meisten Verbreitete ist und von Matroska selbst unterstützt wird, werden wir nur dessen Anwendung einbeziehen.

Möglicherweise der einfachste Weg, mit Matroska anzufangen, ist MMG zu verwenden, das grafische Frontend, das mit mkvtoolnix daherkommt, und dem guide to mkvmerge GUI (mmg) zu folgen.

Du kannst Audio und Video-Dateien auch per Befehlszeile muxen:

mkvmerge -o output.mkv input_video.avi input_audio1.mp3 input_audio2.ac3

würde die Video-Datei input_video.avi und die zwei Audio-Dateien input_audio1.mp3 und input_audio2.ac3 in die Matroska-Datei output.mkv mergen. Matroska, wie zuvor beschrieben, ist in der Lage, noch viel mehr als das zu tun, wie etwa multiple Audiotracks (inklusive Feintuning der Audio-/Videosynchronisation), Kapitel, Untertitel, Splitting, usw... Sieh bitte in den Dokumentationen dieser Anwendungen nach mehr Details.

7.2. Wie mit telecine und interlacing in NTSC-DVDs umgehen

7.2.1. Einführung

Was ist telecine?  Wenn du nicht viel von dem verstehst, was in diesem Dokument beschrieben wird, lies den Wikipedia-Artikel über Telecine. Dies ist eine verständliche und einigermaßen umfassende Beschreibung dessen, was telecine ist.

Eine Anmerkung zu Zahlen.  Viele Dokumente, einschließlich des oben verlinkten Handbuchs, beziehen sich auf den Wert Felder pro Sekunde von NTSC-Video als 59.94 und den korrespondierenden Frames pro Sekunde als 29.97 (für telecined und interlaced) und 23.976 (für progressiv). Zur Vereinfachung runden manche dieser Dokumente sogar auf 60, 30 und 24 auf.

Streng genommen sind alle diese Zahlen Näherungswerte. Das schwarz/weiße NTSC-Video war exakt 60 Felder pro Sekunde, später wurde jedoch 60000/1001 gewählt, um die Farbdaten anzupassen, solange man gleichzeitig zu Schwarz/weiß-Fernsehen kompatibel blieb. Digitales NTSC-Video (so wie auf einer DVD) hat ebenfalls 60000/1001 Felder pro Sekunde. Hieraus wird interlaced und telecined Video als 30000/1001 Frames pro Sekunde enthaltend abgeleitet; progressive Video hat 24000/1001 Frames pro Sekunde.

Ältere Versionen der MEncoder-Dokumentation und viele archivierten Posts in Mailing-Listen beziehen sich auf 59.94, 29.97 und 23.976. Alle MEncoder-Dokumentationen wurden insofern aktualisiert, dass sie fraktionale Werte verwenden, und du solltest dies auch tun.

-ofps 23.976 ist inkorrekt. -ofps 24000/1001 sollte statt dessen benutzt werden.

Wie telecine angewandt wird.  Jedes Video, das zur Anzeige auf einem NTSC-Fernseh-Set vorgesehen ist, muss 60000/1001 Felder pro Sekunde haben. Für TV-Filme und Shows hergestellt sind sie häufig direkt mit 60000/1001 Feldern pro Sekunde aufgenommen, die Mehrheit der Kinofilme jedoch mit 24 oder 24000/1001 Frames pro Sekunde. Wenn cinematische Movie-DVDs gemastert werden, wird das Video danach fürs Fernsehen mittels eines telecine genannten Prozesses konvertiert.

Auf einer DVD wird das Video eigentlich nie als 60000/1001 Felder pro Sekunde abgelegt. Für ein Video, das ursprünglich 60000/1001 war, wird jedes Feldpaar zu einem Frame kombiniert, was dann 30000/1001 Frames pro Sekunde ergibt. Hardware-DVD-Player lesen dann ein im Videostream eingebettetes Kennzeichen aus, um zu bestimmen, ob die gerade oder ungerade nummerierten Zeilen das erste Feld formen sollen.

Üblicherweise bleibt ein Inhalt mit 24000/1001 Frames pro Sekunde so wie er ist, wenn er für eine DVD encodiert wird, und der DVD-Player muss das Telecining on-the-fly bewerkstelligen. Manchmal jedoch wird das Video telecined bevor es auf der DVD gespeichert wird; selbst wenn es ursprünglich 24000/1001 Frames pro Sekunde war, wird es 60000/1001 Felder pro Sekunde. Wenn es auf der DVD gespeichert wird, werden Feldpaare zu 30000/1001 Frames pro Sekunde kombiniert.

Wenn man das aus 60000/1001 Feldern pro Sekunde geformten Einzelframes erzeugte Video betrachtet, ist telecined oder anderenfalls Interlacing klar sichtbar woimmer Bewegung auftritt, da ein Feld (sagen wir, die geradzahlig nummerierten Zeilen) einen Moment zur Zeit 1/(60000/1001) Sekunden später als das andere repräsentiert. Spielt man ein interlaced Video auf einem Computer ab, sehen beide hässlich aus, weil der Monitor eine höhere Auflösung besitzt und weil das Video Frame für Frame anstatt Feld für Feld angezeigt wird.

Anmerkungen

  • Dieser Abschnitt gilt nur für NTSC-DVDs und nicht für PAL.

  • Die MEncoder-Beispielzeilen überall im Dokument sind nicht zum eigentlichen Gebrauch vorgesehen. Sie sind schlicht das bloße Minimum, das zum Encodieren der betreffenden Videokategorie benötigt wird. Wie mache ich gute DVD-Rips oder wie feintune ich libavcodec auf maximale Qualität gehören nicht zum Umfang dieses Dokuments.

  • Es gibt ein paar Fußnoten speziell für dieses Handbuch, die so ähnlich verlinkt sind: [1]

7.2.2. Wie kann man sagen, welchen Typ Video man hat

7.2.2.1. Progressiv

Progressive Video wurde ursprünglich mit 24000/1001 fps gefilmt und ohne Änderung auf der DVD abgespeichert.

Wenn du eine progressive DVD in MPlayer abspielst, wird MPlayer folgende Zeile ausgeben, sobald das Abspielen des Films beginnt:

 demux_mpg: 24000/1001 fps progressive NTSC content detected, switching framerate.

Von diesem Punkt an vorwärts sollte demux_mpg nie erzählen, es finde "30000/1001 fps NTSC content."

Wenn du progressives Video ankuckst, solltest du nie irgendein Interlacing sehen. Sei trotzdem vorsichtig, weil manchmal ein winziges bisschen telecine dort hineingemischt wurde, wo du es nicht erwartest. Ich bin TV-Serien-DVDs begegnet, die eine Sekunde telecine bei jedem Szenenwechsel haben oder an extrem zufälligen Stellen. Ich hatte mir einmal eine DVD angesehen, die eine progressive erste Hälfte besaß, und die zweite Hälfte war telecined. Willst duwirklich gründlich sein, kannst du den kompletten Film scannen:

mplayer dvd://1 -nosound -vo null -benchmark

Das Verwenden von -benchmark veranlasst MPlayer, den Film so schnell er es nur kann abzuspielen; dies dauert je nach Hardware trotzdem noch eine Weile. Jedesmal wenn demux_mpg einen Frameratenwechsel meldet, wird dir die Zeile unmittelbar darüber die Zeit zeigen, bei welcher der Wechsel auftrat.

Manchmal wird progressive Video auf DVDs "soft telecine" zugeordnet, weil es dazu vorgesehen ist, vom DVD-Player telecined zu werden.

7.2.2.2. Telecined

Telecined Video war ursprünglich mit 24000/1001 aufgenommen, wurde aber telecined, bevor es auf die DVD geschrieben wurde.

MPlayer meldet keine (nie) Frameratenwechsel, wenn er telecined Video abspielt.

Beim Betrachten eines telecined Videos wirst du Interlacing-Artefakte sehen, die zu "blinken" scheinen: sie erscheinen wiederholt und verschwinden wieder. Du kannst dir das so genauer hinschauen

  1. mplayer dvd://1
  2. Suche einen Teil mit Bewegung.

  3. Benutze die Taste ., um jeweils einen Frame vorwärts zu rücken.

  4. Schau auf das Muster der interlaced und progressive aussehenden Frames. Ist das Muster, das du siehst PPPII,PPPII,PPPII,... dann ist das Video telecined. Siehst du andere Muster, dann wurde das Video womöglich mittels einiger Nicht-Standard-Methoden telecined; MEncoder kann ein Nicht-Standard-telecine nicht verlustfrei nach progressive konvertieren. Siehst du überhaupt keine Muster, ist es höchstwahrscheinlich interlaced.

Manchmal wird telecined Video auf DVDs "hard telecine" zugeordnet. Da hard telecine bereits 60000/1001 Felder pro Sekunde hat, spielt der DVD-Player das Video ohne irgendeine Manipulation ab.

Ein anderer Weg, zu sagen, ob deine Quelle telecined ist oder nicht, ist die Quelle mit den Befehlszeilenoptionen -vf pullup und -v abzuspielen, um nachzusehen, wie pullup zu den Frames passt. Ist die Quelle telecined, solltest du in der Befehlszeile ein 3:2 Muster mit abwechselnd 0+.1.+2 und 0++1 anzeigen. Diese Technik hat den Vorteil, dass du die Quelle nicht zu beobachten brauchst, um sie zu identifizieren, was von Nutzen sein könnte, falls du den Encodiervorgang automatisieren willst oder besagte Prozedur ferngesteuert mittels einer langsamen Verbindung vornehmen willst.

7.2.2.3. Interlaced

Interlaced Video wurde ursprünglich als 60000/1001 Felder pro Sekunde aufgenommen und auf der DVD als 30000/1001 Frames pro Sekunde abgespeichert. Der interlacing-Effekt (oft "combing" genannt) ist ein Ergebnis von Kammpaaren von Feldern in Frames. Jedes Feld wird einzeln als 1/(60000/1001) Sekunden angenommen, und wenn sie simultan angezeigt werden, wird der Unterschied offensichtlich.

Wie bei telecined Video sollte MPlayer niemals einen Frameratewechsel beim Abspielen des interlaced Inhalts melden.

Wenn du ein interlaced Video genau ansiehst, in dem du dich mit der Taste . durch die Frames bewegst, wirst du sehen, dass jeder einzelne Frame interlaced ist.

7.2.2.4. Gemischtes progressive und telecine

Alle "gemischten progressive und telecine" Videos wurden ursprünglich als 24000/1001 Frames pro Sekunde aufgenommen, jedoch werden einige Teile telecined beendet.

Spielt MPlayer diese Kategorie ab, wird er (oft wiederholt) zwischen "30000/1001 fps NTSC" und "24000/1001 fps progressive NTSC" zurück und vor wechseln. Beobachte die untere Hälfte von MPlayers Ausgabe, um diese Meldungen anzusehen.

Du solltest die Sektion "30000/1001 fps NTSC" überprüfen, um sicher zu gehen, dass sie auch wirklich telecine sind und nicht einfach interlaced.

7.2.2.5. Gemischtes progressive und interlaced

In "gemischtem progressive und interlaced" Inhalt wurde progressive und interlaced Video zusammengeklebt.

Diese Kategorie sieht aus wie "gemischtes progressive und telecine", bis du die Sektion 30000/1001 fps untersuchst und feststellst, dass sie das telecine-Muster nicht haben.

7.2.3. Wie jede Kategorie encodieren

Wie ich anfangs angemerkt hatte, sind die MEncoder-Beispielzeilen unten eigentlich nicht zur Anwendung bestimmt; sie demonstrieren nur die Minimalparameter zur korrekten Encodierung jeder Kategorie.

7.2.3.1. Progressive

Progressive Video erfordert kein spezielles Filtern, um es zu encodieren. Der einzige Parameter, den du gewiss anwenden solltest ist -ofps 24000/1001. Andernfalls wird MEncoder versuchen, bei 30000/1001 fps zu encodieren und Frames duplizieren.

mencoder dvd://1 -oac copy -ovc lavc -ofps 24000/1001

Dennoch ist es öfters der Fall, dass ein Video, das progressive aussieht, eigentlich kurze Teile telecine eingemischt hat. Solange du dir nicht sicher bist, ist es am sichersten, das Video als gemischtes progressive und telecine. zu behandeln. Der Performance-Verlust ist gering [3].

7.2.3.2. Telecined

Telecine kann umgekehrt werden, um den originalen 24000/1001-Inhalt zu erhalten, indem man einen Prozess verwendet, der inverse-telecine genannt wird. MPlayer enthält verschiedene Filter, um dies zu erreichen; der beste Filter, pullup wird in der Sektion Gemischtes progressive und telecine beschrieben.

7.2.3.3. Interlaced

In den meisten praktischen Fällen ist es nicht möglich, ein komplett progressives Video aus interlaced Inhalt zu erhalten. Der einzige Weg, dies ohne den Verlust der Hälfte der vertikalen Auflösung zu erreichen, ist das Verdoppeln der Framerate, und man kann versuchen zu "schätzen", wie die korrespondierenden Zeilen für jedes Feld vervollständigt werden sollten (dies hat Nachteile - siehe Methode 3).

  1. Das Video in interlaced Form encodieren. Normalerweise richtet Interlacing verheerenden Schaden für die Fähigkeit des Encoders an, gut zu komprimieren, libavcodec hat jedoch zwei eigens für das ein wenig bessere Abspeichern von interlaced Video gedachte Parameter: ildct und ilme. Auch wenn die Verwendung von mbd=2 dringend zu empfehlen ist [2], weil es Macroblöcke wie nicht-interlaced an Stellen encodiert, an denen keine Bewegung stattfindet. Beachte, dass -ofps hier NICHT notwendig ist.

    mencoder dvd://1 -oac copy -ovc lavc -lavcopts ildct:ilme:mbd=2

  2. Nutze einen Deinterlacing-Filter vor dem Encodieren. Es stehen verschiedene dieser Filter zur Auswahl, jeder mit seinen eigenen Vor- und Nachteilen. Ziehe mplayer -pphelp und mplayer -vf help zu Rate, um zu sehen, welche verfügbar sind (suche nach "deint"), lies Michael Niedermayers Deinterlacing-Filter-Vergleich und durchsuche die MPlayer-Mailinglisten, um Diskussionen über die zahlreichen Filter zu finden. Nochmals, die Framerate ändert sich nicht, also kein -ofps. Deinterlacing sollte außerdem nach dem Zuschneiden (cropping) [1] und vor dem Skalieren angewandt werden.

    mencoder dvd://1 -oac copy -vf yadif -ovc lavc

  3. Unglücklicherweise arbeitet diese Option im Zusammenhang mit MEncoder fehlerhaft; sie sollte mit MEncoder G2 gut funktionieren, den gibts aber noch nicht. Du könntest Abstürze erleben. Seis drum, der Zweck von -vf tfields ist es, einen vollen Frame aus jedem Feld zu erzeugen, was eine Framerate von 60000/1001 ergibt. Der Vorteil dieses Lösungsansatzes ist, dass nie irgendwelche Daten verloren gehen; dennoch, da jeder Frame aus nur einem Feld kommt, müssen die fehlenden Zeilen irgendwie interpoliert werden. Es gibt keine sehr guten Methoden, die fehlenden Daten zu generieren, und so wird das Resultat ein bisschen aussehen, als hätte man irgendeinen Deinterlacing-Filter verwendet. Die fehlenden Zeilen zu generieren erzeugt auch weitere Probleme, einfach weil sich die Menge an Daten verdoppelt. Somit sind höhere Encodier-Bitraten nötig, um die Qualität beizubehalten und mehr CPU-Power wird für beides, Encodieren und Decodieren, aufgewendet. Das Attribut tfields hat mehrere verschiedene Optionen dafür, wie die fehlenden Zeilen jedes Frames erzeugt werden. Wenn du diese Methode nutzt, dann nimm Bezug auf das Handbuch und wähle, welche Option auch immer am besten für dein Material aussieht. Beachte, dass du wenn tfields verwendet wird, sowohl -fps als auch -ofpsspezifizieren musst, um die doppelte Framerate der originalen Quelle zu erhalten.

    mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc -fps 60000/1001 -ofps 60000/1001

  4. Wenn du vorhast, dramatisch herunterzuskalieren, kannst du nur eins der beiden Felder extrahieren und encodieren. Sicherlich, du wirst die Hälfte der vertikalen Auflösung verlieren, aber wenn du planst, bis auf 1/2 des Originals herunter zu skalieren, macht der Verlust so gut wie gar nichts aus. Das Resultat wird eine progressive Datei mit 30000/1001 Frames pro Sekunde sein. Die Prozedur ist, -vf field zu verwenden, dann die Ränder abzuschneiden [1] und angemessen zu skalieren. Vergiss nicht, dass du die Skalierung anpassen musst, um das Halbieren der vertikalen Auflösung zu kompensieren.

    mencoder dvd://1 -oac copy -vf field=0 -ovc lavc

7.2.3.4. Gemischtes progressive und telecine

Um progressive und telecine Video komplett in progressive Video umzuwandeln, müssen die telecined Teile inverse-telecined werden. Die drei Wege, dies zu erreichen, werden unten beschrieben. Beachte, dass du inverse-telecine immer vor der Reskalierung durchführen solltest; es sei denn, du weißt wirklich, was du tust; mache inverse-telecine auch vor dem Entfernen der Ränder [1]. -ofps 24000/1001 wird hier benötigt, weil das Output-Video 24000/1001 Frames pro Sekunde werden soll.

  • -vf pullup wurde entworfen, um auf telecined Material inverse-telecine anzuwenden, während die progressiven Daten unangetastet bleiben. Damit dies richtig funktioniert, muss pullup vom softskip-Filter gefolgt werden, sonst wird MEncoder abstürzen. pullup ist trotz allem die sauberste und akkurateste Methode, die zum Encodieren von beidem telecine und "gemischtem progressive und telecine" zur Verfügung steht.

    mencoder dvd://1 -oac copy -vf pullup,softskip -ovc lavc -ofps 24000/1001

  • Eine ältere Methode ist, anstatt inverse-telecine auf die telecined Teile anzuwenden, telecine auf nicht-telecined Teile und dann inverse-telecine auf das ganze Video anzuwenden. Hört sich verwirrend an? softpulldown ist ein Filter, der ein Video durchgeht und die komplette Datei telecined macht. Lassen wir auf softpulldown entweder detc oder ivtc folgen, wird das Endergebnis vollkommen progressiv. -ofps 24000/1001 wird benötigt.

    mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001

  • Ich habe -vf filmdint selbst verwendet, aber lies hier, was D Richard Felker III zu erzählen hat:

    Es ist OK, aber IMO versucht er zu oft eher ein deinterlace als ein inverse telecine durchzuführen (ganz wie Settop-DVD-Player & progressive TVs), was ein hässliches Flimmern erzeugt und andere Artefakte. Wenn du vorhast, es anzuwenden, musst du zumindest einige Zeit darauf verwenden, die Optionen zu tunen und zuerst den Output zu beobachten, damit du auch sicher sein kannst, dass du nichts vermasselst.

7.2.3.5. Gemischtes progressive und interlaced

Es gibt zwei Optionen für den Umgang mit dieser Kategorie, jede von beiden stellt einen Kompromiss dar. Du solltest basierend auf Dauer/Stelle jedes Typs entscheiden.

  • Behandle es wie progressive. Die interlaced Teile werden interlaced aussehen und einige der interlaced Felder müssen weggelassen werden, was ein wenig zu Sprüngen führt. Du kannst einen Nachbearbeitungsfilter verwenden, wenn du willst, aber dies wird die progressive-Anteile geringfügig verringern.

    Diese Option sollte definitiv nicht verwendet werden, wenn du eventuell Video auf einem interlaced Gerät anzeigen willst (mit einer TV-Karte zum Beispiel). Wenn du interlaced Frames in einem Video mit 24000/1001 Frames pro Sekunde hast, werden diese zusammen mit den progressive Frames telecined. Die Hälfte der interlaced "Frames" werden für die Dauer von drei Feldern (3/(60000/1001) Sekunden) angezeigt, was einen flimmernden "Zeitrücksprung"-Effekt zur Folge hat, der ziemlich schlecht aussieht. Solltest du dies dennoch versuchen, musst du einen Deinterlacing-Filter wie lb oder l5 anwenden.

    Es wäre auch keine gute Idee für eine progressive Anzeige. Es wird Paare aufeinander folgender interlaced Felder auslassen, was eine Unstetigkeit zur Folge hat, die eher sichtbar ist als mit der zweiten Methode, die einige progressive Frames zweimal anzeigt. Ein interlaced Video mit 30000/1001 Frames pro Sekunde ist bereits ein bisschen abgehackt, weil es wirklich mit 60000/1001 Felder pro Sekunde angezeigt werden sollte, sodass sich die doppelten Frames nicht zu sehr abzeichnen.

    Egal welchen Weg du wählst, es ist das beste, deinen Inhalt zu berücksichtigen und wie du ihn anzeigen willst. Ist dein Video zu 90% progressive und du hast nie vor, es auf einem TV-Bildschirm anzuzeigen, solltest du einen progressive-Ansatz wählen. Ist es nur halb-progressive, willst du es eventuell so encodieren, als sei alles interlaced.

  • Behandle es wie interlaced. Einige Frames des progressive-Anteils müssen dupliziert werden, was zu Sprüngen führt. Nochmal, Deinterlacing-Filter können die progressive-Anteile leicht verringern.

7.2.4. Fußnoten

  1. Über das Zuschneiden (cropping):  Videodaten auf DVDs werden in einem YUV 4:2:0 genannten Format abgelegt. In einem YUV-Video, werden Helligkeit und Chrominanz separat gespeichert. Da das menschliche Auge ein bisschen weniger empfindlich auf Farbe reagiert als auf Helligkeit, ist in einem YUV 4:2:0 Bild nur ein Chrominanz-Pixel für alle vier Helligkeits-Pixel vorhanden. In einem progressive Bild, besitzt jedes Quadrat von vier luma-Pixeln (zwei auf jeder Seite) ein gemeinsames chroma-Pixel. Du musst progressive YUV 4:2:0 zu geradzahligen Auflösungen zurechtschneiden und geradzahlige Offsets verwenden. Zum Beispiel ist crop=716:380:2:26 OK, crop=716:380:3:26 aber nicht.

    Wenn du es mit interlaced YUV 4:2:0 zu tun hast, ist die Situation ein wenig komplizierter. Anstatt dass immer vier luma-Pixel im Frame sich ein chroma-Pixel teilen, teilen sich immer vier luma-Pixel in jedem Feld ein chroma-Pixel. Wenn Felder zur Formung eines Frames interlaced werden, ist jede Scanzeile ein Pixel hoch. Jetzt liegen anstatt je vier luma-Pixel in einem Quadrat immer zwei Pixel nebeneinander und die anderen zwei Pixel liegen zwei Scanzeilen weiter unten nebeneinander. Die zwei luma-Pixel in der dazwischen liegenden Scanzeile sind vom anderen Feld und teilen sich somit ein anderes chroma-Pixel mit zwei luma-Pixeln zwei Scanzeile entfernt. All diese Konfusion macht es notwendig, vertikale Ausschneide-Abmessungen und Offsets zu haben, die ein Vielfaches von vier sind. Horizontal kann geradzahlig bleiben.

    Für telecined Video empfehle ich, das Zuschneiden nach dem inverse telecining stattfinden zu lassen. Ist das Video einmal progressive, musst du nur noch mit geraden Zahlen zuschneiden. Wenn du wirklich die leichte Beschleunigung haben willst, die zuerst zuzuschneiden möglicherweise bietet, musst du vertikal mit einem Vielfachen von vier zuschneiden, oder der inverse-telecine Filter wird keine korrekten Daten haben.

    Für interlaced (nicht telecined) Video musst du immer mit einem Vielfachen von vier zuschneiden, es sei denn, du verwendest -vf field vor dem Schneiden.

  2. Über Encodier-Parameter und Qualität:  Nur weil ich hier mbd=2 vorschlage, heißt das nicht, dass es woanders benutzt werden soll. Zusammen mit trell ist mbd=2 eine der Optionen von libavcodec, welche die Qualität am deutlichsten heben, und du solltest stets das letzte der beiden anwenden, außer das Abfallen der Encodiergeschwindigkeit ist abschreckend hoch (z.B. Encodierung in Echtzeit). Es gibt eine Menge anderer Optionen für libavcodec, die die Encodierqualität verbessern (und die Encodiergeschwindigkeit verringern), dies liegt aber jenseits des Rahmens dieses Dokuments.

  3. Über die Performance von pullup:  Pullup kann sicher (zusammen mit softskip) auf progressive Video angewandt werden und ist für gewöhnlich eine gute Idee, es sei denn, die Quelle wurde definitiv als vollkommen progressive verifiziert. Der Performaceverlust ist in den meisten Fällen gering. Bei einer Minimalencodierung macht pullup MEncoder 50% langsamer. Das Hinzufügen von Soundverarbeitung und erweiterten lavcopts überschattet diesen Unterschied und drückt den Performanceabfall, der mit dem Verwenden von pullup verbunden war, runter auf 2%.

7.3. Encodieren mit der libavcodec Codecfamilie

libavcodec stellt einfache Encodierung für eine Menge interessanter Video- und Audioformate zur Verfügung. Du kannst folgende Codecs encodieren (mehr oder weniger aktuell):

7.3.1. Videocodecs von libavcodec

Name des VideocodecsBeschreibung
mjpeg Motion-JPEG
ljpeg Verlustfreies JPEG
jpegls JPEG LS
targa Targa-Bild
gif GIF-Bild
png PNG-Bild
bmp BMP-Bild
h261 H.261
h263 H.263
h263p H.263+
mpeg4 ISO Standard MPEG-4 (DivX, Xvid-kompatibel)
msmpeg4 Pre-Standard MPEG-4 Variante von MS, v3 (AKA DivX3)
msmpeg4v1 Pre-Standard MPEG-4 von MS, v1
msmpeg4v2 Pre-Standard MPEG-4 von MS, v2 (in alten ASF-Dateien verwendet)
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 Verlustfreie (lossless) Kompression
ffvhuff FFmpeg-modifizierter huffyuv, verlustfrei
asv1 ASUS Video v1
asv2 ASUS Video v2
vcr1 ATI VCR1 codec
ffv1 FFmpeg's verlustfreier (lossless) Videocodec
svq1 Sorenson Video 1
flv Sorenson H.263, der in Flash Video benutzt wird
flashsv Flash Screen Video
dvvideo Sony Digital Video
snow FFmpeg's experimenteller Wavelet-basierter Codec
zbmv Zip Blocks Motion Video
cljr Cirrus Logic AccuPak Codec

Die erste Spalte enthält die Codecnamen, die nach der Konfiguration vcodec übergeben werden müssen, wie: -lavcopts vcodec=msmpeg4

Ein Beispiel mit MJPEG-Komprimierung:

mencoder dvd://2 -o title2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy

7.3.2. Audiocodecs von libavcodec

Name des AudiocodecsBeschreibung
ac3Dolby Digital (AC-3)
adpcm_*Adaptive PCM-Formate - siehe begleitende Tabelle
flacFree Lossless Audio Codec (FLAC)
g726G.726 ADPCM
libamr_nb3GPP Adaptive Multi-Rate (AMR) narrow-band
libamr_wb3GPP Adaptive Multi-Rate (AMR) wide-band
libfaacAdvanced Audio Coding (AAC) - verwendet FAAC
libgsmETSI GSM 06.10 full rate
libgsm_msMicrosoft GSM
libmp3lameMPEG-1 audio layer 3 (MP3) - verwendet LAME
mp2MPEG-1 Audio Layer 2
pcm_*PCM-Formate - siehe begleitende Tabelle
roq_dpcmId Software RoQ DPCM
sonicexperimenteller verlustbehafteter FFmpeg-Codec
soniclsexperimenteller verlustfreier FFmpeg-Codec
vorbisVorbis
wma1Windows Media Audio v1
wma2Windows Media Audio v2

Die erste Spalte enthält die Codecnamen, die nach der Konfiguration acodec übergeben werden müssen, wie: -lavcopts acodec=ac3

Ein Beispiel mit AC3-Kompression:

mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy

Im Gegensatz zu den Videocodecs von libavcodec machen dessen Audiocodecs keinen weisen Gebrauch von den Bits, die ihnen übergeben werden, da es ihnen an einem minimalen psychoakustischen Modell fehlt (falls überhaupt eins vorhanden ist), wodurch sich die meisten anderen Codec-Implementierungen auszeichnen. Beachte jedoch, dass all diese Audiocodecs sehr schnell sind und überall dort hervorragend arbeiten, wo MEncoder mit libavcodec kompiliert wurde (was meistens der Fall ist) und nicht von externen Programmbibliotheken abhängt.

7.3.2.1. PCM/ADPCM-Format, begleitende Tabelle

PCM/ADPCM CodecnameBeschreibung
pcm_s32lesigned 32-bit little-endian
pcm_s32besigned 32-bit big-endian
pcm_u32leunsigned 32-bit little-endian
pcm_u32beunsigned 32-bit big-endian
pcm_s24lesigned 24-bit little-endian
pcm_s24besigned 24-bit big-endian
pcm_u24leunsigned 24-bit little-endian
pcm_u24beunsigned 24-bit big-endian
pcm_s16lesigned 16-bit little-endian
pcm_s16besigned 16-bit big-endian
pcm_u16leunsigned 16-bit little-endian
pcm_u16beunsigned 16-bit big-endian
pcm_s8signed 8-bit
pcm_u8unsigned 8-bit
pcm_alawG.711 A-LAW
pcm_mulawG.711 μ-LAW
pcm_s24daudsigned 24-bit D-Cinema Audioformat
pcm_zorkActivision Zork Nemesis
adpcm_ima_qtApple QuickTime
adpcm_ima_wavMicrosoft/IBM WAVE
adpcm_ima_dk3Duck DK3
adpcm_ima_dk4Duck DK4
adpcm_ima_wsWestwood Studios
adpcm_ima_smjpegSDL Motion JPEG
adpcm_msMicrosoft
adpcm_4xm4X Technologies
adpcm_xaPhillips Yellow Book CD-ROM eXtended Architecture
adpcm_eaElectronic Arts
adpcm_ctCreative 16->4-bit
adpcm_swfAdobe Shockwave Flash
adpcm_yamahaYamaha
adpcm_sbpro_4Creative VOC SoundBlaster Pro 8->4-bit
adpcm_sbpro_3Creative VOC SoundBlaster Pro 8->2.6-bit
adpcm_sbpro_2Creative VOC SoundBlaster Pro 8->2-bit
adpcm_thpNintendo GameCube FMV THP
adpcm_adxSega/CRI ADX

7.3.3. Encodieroptionen von libavcodec

Idealerweise möchtest du eventuell in der Lage sein, dem Encoder einfach zu sagen, er soll in den "hochqualitativen" Modus wechseln und weiter machen. Das wäre vermutlich nett, aber unglücklicherweise schwer zu implementieren, da verschiedene Encodieroptionen unterschiedliche Qualitätsresultate hervorbringen, abhängig vom Quellmaterial. Das liegt daran, dass die Komprimierung von den visuellen Eigenschaften des fraglichen Videos abhängt. Zum Beispiel haben Anime und Live-Action sehr unterschiedliche Eigenschaften und benötigen aus diesm Grund verschiedene Optionen, um optimale Encodierung zu erreichen. Die gute Neuigkeit ist, dass einige Optionen wie mbd=2, trell und v4mv nie ausgelassen werden sollten. Siehe unten nach der detaillierten Beschreibung allgemeiner Encodieroptionen.

Anzupassende Optionen:

  • vmax_b_frames: 1 oder 2 ist gut, abhängig vom Film. Beachte, dass du, falls deine Encodierung von DivX5 decodierbar sein muss, den Support für "closed GOP" aktivieren musst, indem du die libavcodec-Option cgop verwendest, du musst jedoch Szenenerkennung deaktivieren, was wiederum keine gute Idee ist, da es die Ecodierungseffizienz etwas angreift.

  • vb_strategy=1: hilft in Szenen mit viel Bewegung (high-motion). Bei manchen Videos wird vmax_b_frames der Qualität schaden, vmax_b_frames=2 zusammen mit vb_strategy=1 hilft jedoch.

  • dia: Bewegungssuchbereich. Größer ist besser als kleiner. Negative Werte sind ein komplett anderer Maßstab. Gute Werte sind -1 für ein schnelle oder 2-4 für langsame Encodierung.

  • predia: Bewegungssuche Vorabdurchlauf (pre-pass). Nicht so wichtig wie dia. Gute Werte sind 1 (Standard) bis 4. Erfordert preme=2, um wirklich was zu nützen.

  • cmp, subcmp, precmp: Vergleichsfunktion zur Bewegungseinschätzung. Experimentiere mit Werten von 0 (Standard), 2 (hadamard), 3 (dct) und 6 (Ratenverzerrung). 0 ist am schnellsten und ausreichend für precmp. Für cmp und subcmp ist 2 gut bei Anime, und 3 ist gut bei Live-Action. 6 kann leicht besser sein oder auch nicht, ist aber langsam.

  • last_pred: Anzahl der Bewegungsvorhersagen, die vom vorherigen Frame genommen werden sollen. 1-3 oder so hilft bei geringer Geschwindigkeitseinbuße. Höhere Werte sind langsam bei keinerlei Zusatzgewinn.

  • cbp, mv0: Kontrolliert die Auswahl von Macroblöcken. Kleine Geschwindigkeitseinbußen bei kleinem Qualitätsgewinn.

  • qprd: adaptive Quantisierung basierend auf der Komplexität des Macroblocks. Kann hilfreich sein oder schaden, abhängig vom Video und anderen Optionen. Dies kann Artefakte verursachen, es sei denn, du setzt vqmax auf einen halbwegs kleinen Wert (6 ist gut, vielleicht so langsam wie 4); vqmin=1 sollte ebenfalls helfen.

  • qns: sehr langsam, speziell wenn kombiniert mit qprd. Diese Option veranlasst den Encoder, durch Kompressionsartefakte entstandenes Rauschen zu minimieren anstatt das encodierte Video strikt der Quelle anzupassen. Verwende dies nicht, es sei denn du, hast bereits alles andere so weit wie möglich optimiert und die Resultate sind immer noch nicht gut genug.

  • vqcomp: Frequenzkontrolle optimieren. Welche Werte gut sind, hängt vom Film ab. Du kannst dies sicher so lassen wie es ist, wenn du willst. Wird vqcomp verringert, werden mehr Bits auf Szenen mit geringer Komlexität gelegt, wird es erhöht, legt es diese Bits auf Szenen mit hoher Komlexität (Standard: 0.5, Bereich: 0-1. empfohlener Bereich: 0.5-0.7).

  • vlelim, vcelim: Setzt die Schwelle für die Eliminierung einzelner Koeffizienten bei Helligkeits- und Farbanteilen. Sie werden in allen MPEG-ähnlichen Algorithmen getrennt encodiert. Die Idee hinter diesen Optionen ist, einige gute Heuristiken zu verwenden, um zu bestimmen, wenn ein Wechsel innerhalb eines Blocks kleiner als der der von dir festgelegte Schwellenwert ist und in solch einem Fall den Block einfach so zu encodieren als fände "kein Wechsel" statt. Das spart Bits und beschleunigt womöglich die Encodierunng. vlelim=-4 und vcelim=9 scheinen gut für Live-Filme zu sein, helfen aber scheinbar nicht bei Anime; beim Encodieren einer Animation solltest du sie womöglich unverändert lassen.

  • qpel: Bewegungsabschätzung auf ein viertel Pixel (quarter pel). MPEG-4 verwendet als Voreinstellung eine Halbpixel-Genauigkeit für die Bewegungssuche, deswegen hat diese Option einen Overhead, da mehr Informationen in der encodierte Datei untergebracht werden. Der Kompressionsgewinn/-verlust hängt vom Film ab, ist aber in der Regel nicht sonderlich effektiv bei Anime. qpel zieht immer eine signifikante Erhöhung der CPU-Decodierzeit nach sich (+25% in der Praxis).

  • psnr: wirkt sich eigentlich nicht auf das Encodieren aus, schreibt jedoch eine Log-Datei mit Typ/Größe/Qualität jedes Frames und gibt am Ende die Summe des PSNR Signal-zu-Rauschabstands (Peak Signal to Noise Ratio) aus.

Optionen, mit denen besser nicht herumgespielt werden sollte:

  • vme: Der Standardwert ist der beste.

  • lumi_mask, dark_mask: Psychovisuell adaptive Quantisierung. Du solltest nicht im Traum daran denken, mit diesen Optionen herumzuspielen, wenn dir Qualität wichtig ist. Vernünftige Werte mögen in deinem Fall effektiv sein, aber sei gewarnt, dies ist sehr subjektiv.

  • scplx_mask: Versucht, Blockartefakte zu verhindern, Postprocessing ist aber besser.

7.3.4. Beispiele für Encodierungseinstellungen

Die folgenden Einstellungen sind Beispiele verschiedener Kombinationen von Encodierungsoptionen, die den Kompromiss Geschwindigkeit gegenüber Qualität bei gleicher Zielbitrate beeinflussen.

Alle Encodierungseinstellungen wurden auf einem Beispielvideo mit 720x448 @30000/1001 fps getestet, die Zielbitrate war 900kbps und der Rechner war ein AMD-64 3400+ mit 2400 MHz im 64bit-Modus. Jede Encodiereinstellung zeichnet sich aus durch die gemessene Encodiergeschwindigkeit (in Frames pro Sekunde) und den PSNR-Verlust (in dB) im Vergleich zu Einstellungen für "sehr hohe Qualität". Bitte habe Verständnis, dass du abhängig von deiner Quelldatei, deinem Rechnertyp und Entwicklungsfortschritten sehr unterschiedliche Resultate erzielen wirst.

BeschreibungEncodieroptionenGeschwindigkeit (in fps)Relativer PSNR-Verlust (in dB)
Sehr hohe Qualitätvcodec=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=26fps0dB
Hohe Qualitätvcodec=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:turbo15fps-0.5dB
Schnellvcodec=mpeg4:mbd=2:trell:v4mv:turbo42fps-0.74dB
Echtzeitvcodec=mpeg4:mbd=2:turbo54fps-1.21dB

7.3.5. Maßgeschneiderte inter/intra-Matrizen

Mit diesem Feature von libavcodec bist du in der Lage, eigene inter- (I-Frames/Keyframes) und intra-Matrizen (P-Frames/predicted Frames) zu setzen. Es wird von vielen Codecs unterstützt: mpeg1video und mpeg2video sollen damit funktionieren.

Eine typische Anwendung dieses Features ist, die von den KVCD-Specifikationen bevorzugten Matrizen zu setzen.

Die KVCD "Notch" Quantisierungsmatrix:

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

Anwendung:

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

Jetzt hast du gerade eben deine brandneue Kopie von Harry Potter und die Kammer des Schreckens gekauft (natürlich die Breitbildedition), und du willst diese DVD so rippen, dass du sie deinem Home Theatre PC hinzufügen kannst. Dies ist eine Region-1-DVD, also ist sie NTSC. Das unten stehende Beispiel wird auch auf PAL zutreffen, nur dass du -ofps 24000/1001 weglässt (weil die Ausgabeframerate die gleiche ist wie die Eingabeframerate), und logischerweise werden die Ausschnittsabmessungen anders sein.

Nach dem Start von mplayer dvd://1, verfolgen wir den detailliert in der Sektion Wie mit telecine und interlacing in NTSC-DVDs umgehen beschriebenen Prozess und entdecken, dass es progressive Video mit 24000/1001 fps ist, was bedeutet, dass wir keinen inverse telecine-Filter wie pullup oder filmdint anwenden müssen.

Als Nächstes wollen wir das passende Ausschnittsrechteck bestimmen, also verwenden wir den cropdetect-Filter:

mplayer dvd://1 -vf cropdetect

Stelle sicher, dass du einen voll gefüllten Frame anstrebst (wie zum Beispiel eine helle Szene, nach den Eröffnungs-Credits und Filmlogos), und dass du diese Ausgabe in MPlayers Konsole siehst:

crop area: X: 0..719  Y: 57..419  (-vf crop=720:362:0:58)

Wir spielen den Film dann mit diesem Filter ab, um seine Korrektheit zu testen:

mplayer dvd://1 -vf crop=720:362:0:58

Und wir sehen, dass er einfach perfekt aussieht. Als Nächstes vergewissern wir uns, dass Breite und Höhe ein Vielfaches von 16 sind. Die Breite ist gut, aber die Höhe ist es nicht. Da wir in der 7-ten Klasse in Mathe nicht gefehlt haben, wissen wir, dass das am nähesten liegende Vielfache von 16 kleiner als 362 der Wert 352 ist (Taschenrechner ist erlaubt).

Wir könnten einfach crop=720:352:0:58 verwenden, aber es wäre nett, ein bisschen von oben und ein bisschen von unten wegzunehmen, sodass wir zentriert bleiben. Wir haben die Höhe um 10 Pixel schrumpfen lassen, aber wir wollen das y-Offset nicht um 5 Pixel erhöhen, da dies eine ungerade Zahl ist und die Qualität nachteilig beeinflussen würde. Statt dessen werden wir das y-Offset um 4 Pixel erhöhen:

mplayer dvd://1 -vf crop=720:352:0:62

Ein anderer Grund, Pixel von beidem - oben und unten - abzuschnipseln ist, dass wir sicher gehen wollen, jegliches halbschwarze Pixel eliminiert zu haben, falls welche existieren. Beachte, falls das Video telecined ist, stelle sicher, dass der pullup-Filter (oder für welchen umgekehrten telecine-Filter auch immer du dich entschieden hast) in der Filterkette auftaucht, bevor du zuschneidest. Ist es interlaced, deinterlace es vor dem Zuschneiden. (Wenn du dich entscheidest, interlaced Video beizubehalten, dann vergewissere dich, dass das vertikale crop-Offset ein Vielfaches von 4 ist.)

Wenn du wirklich besorgt um den Verlust dieser 10 Pixel bist, ziehst du statt dessen etwa das Herunterskalieren der Abmessungen auf das am nächsten liegende Vielfache von 16 vor. Die Filterkette würde dann etwa so aussehen:

-vf crop=720:362:0:58,scale=720:352

Das Video auf diese Art herunter zu skalieren wird bedeuten, dass eine kleine Menge Details verloren geht, obwohl es vermutlich nicht wahrnehmbar sein wird. Hoch zu skalieren führt zu niedrigerer Qualität (es sei denn, du erhöhst die Bitrate). Ausschneiden sondert sämtliche dieser Pixel aus. Es ist ein Kompromiss, den du unter allen Umständen in Betracht ziehen solltest. Zum Beispiel, wenn das DVD-Video für das Fernsehen hergestellt wurde, solltest du vertikales Skalieren vermeiden, da das Zeilensampling mit der Art und Weise korrespondiert, für die der Inhalt ursprünglich aufgenommen wurde.

Bei der Überprüfung sehen wir, dass unser Film ordentlich Action enthält und sehr viele Details, also wählen wir 2400Kbit für unsere Bitrate.

Wir sind nun bereit, die 2-pass Encodierung durchzuführen. Erster Durchlauf:

mencoder dvd://1 -ofps 24000/1001 -oac copy -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2 -ovc lavc \
  -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=1 \
  -o Harry_Potter_2.avi

Und der zweite Durchlauf ist derselbe, außer dass wir vpass=2 festlegen:

mencoder dvd://1 -ofps 24000/1001 -oac copy -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2 -ovc lavc \
  -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=2 \
  -o Harry_Potter_2.avi

Die Optionen v4mv:mbd=2:trell werden die Qualität außerordentlich erhöhen, auf Kosten der Encodierdauer. Es gibt einen kleinen Grund, diese Optionen auszulassen, wenn das Primärziel die Qualität ist. Die Optionen cmp=3:subcmp=3:mbcmp=3 wählen eine Vergleichsfunktion, die eine höhere Qualität liefert als die Standardeinstellungen. Du darfst mit diesem Parameter rumexperimentieren (ziehe die Manpage zu möglichen Werten zu Rate) da verschiedene Funktionen abhängig vom Quellmaterial einen starken Einfluss auf die Qualität haben. Wenn du zum Beispiel meinst, dass libavcodec zu viele Blockartefakte produziert, könntest du ja das experimentelle NSSE als Vergleichsfunktion via *cmp=10 wählen.

Für diesen Film wird das resultierende AVI 138 Minuten lang und nahezu 3GB groß sein. Und weil du erzählt hast, dass eine große Datei nichts ausmacht, ist dies eine perfekt akzeptierbare Größe. Wolltest du sie aber kleiner haben, könntest du eine niedrigere Bitrate hernehmen. Erhöhte Bitraten haben verminderte Rückgaben, während wir also deutlich eine Verbesserung von 1800Kbit nach 2000Kbit sehen, ist es oberhalb 2000Kbit nicht so auffällig. Fühl dich frei solange herum zu experimentieren bis du glücklich bist.

Weil wir das Quellvideo durch einen Denoise-Filter geschickt haben, könntest du einige davon während des Playbacks wieder hinzufügen wollen. Dies zusammen mit dem Nachbearbeitungsfilter spp verbessert die Wahrnehmung der Qualität drastisch und hilft dabei, blockhafte Artefakte aus dem Video zu eliminieren. Mit MPlayers Option autoq kannst du den Nachbearbeitungsaufwand des spp-Filters abhängig von der verfügbaren CPU variieren. An dieser Stelle kannst du auch Gamma- und/oder Farbkorrektur zur besten Anpassung an dein Display verwenden, wenn du willst. Zum Beispiel:

mplayer Harry_Potter_2.avi -vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3

7.4. Encodieren mit dem Xvid-Codec

Xvid ist eine freie Programmbibliothek zum Encodieren von MPEG-4 ASP-Videostreams. Bevor du mit zu encodieren beginnst, musst du MEncoder so einstellen, dass er es unterstützt.

Dieses Handbuch beabsichtigt, sich vorwiegend durch dieselbe Art von Informationen auszuzeichnen wie x264's Encodier-Handbuch. Beginne deshalb damit, den ersten Teil dieses Handbuchs zu lesen.

7.4.1. Welche Optionen sollte ich verwenden, um die besten Resultate zu erzielen?

Bitte beginne mit der Durchsicht der Xvid-Sektion von MPlayers Manpage. Diese Sektion ist als Ergänzung zur Manpage zu verstehen.

Die Standardeinstellungen von Xvid sind bereits ein guter Kompromiss zwischen Geschwindigkeit und Qualität, deshalb kannst du ruhig bei ihnen bleiben, wenn nachfolgender Abschnitt dich allzusehr ins Grübeln bringt.

7.4.2. Encodieroptionen von Xvid

  • vhq Diese Einstellung betreffen den Entscheidungsalgorithmus für Macroblöcke, wobei gilt, je höher die Einstellung desto weiser die Entscheidung. Die Standardeinstellung kann für jede Encodierung sicher verwendet werden, während höhere Einstellungen immer für PSNR hilfreich, jedoch signifikant langsamer sind. Nimm bitte zur Kenntnis, dass ein besserer PSNR nicht notwedigerweise bedeutet, dass das Bild besser aussehen wird, aber er zeigt dir, dass du näher am Original bist. Wird er deaktiviert, beschleunigt dies die Encodierung spürbar; wenn Geschwindigkeit ein Kriterium für dich ist, kann dieser Kompromiss es wert sein.

  • bvhq Dies erledigt dieselbe Arbeit wie vhq, macht dies jedoch bei B-Frames. Es hat einen vernachlässigbar kleinen Einfluss auf die Geschwindigkeit, und verbessert geringfügig die Qualität (um etwa +0.1dB PSNR).

  • max_bframes Eine höhere Anzahl von erlaubten hintereinander folgenden B-frames verbessert gewöhnlich die Komprimierbarkeit, obwohl dies auch zu mehr Blockartefakten führt. Die Standardeinstellung ist ein guter Kompromiss zwischen Komprimierbarkeit und Qualität, aber wenn du Bitraten-hungrig bist kannst du sie bis auf 3 hochschrauben. Du kannst sie auch auf 1 oder 0 verringern, wenn du auf perfekte Qualität abzielst, wenngleich du in diesem Fall sicherstellen solltest, dass deine Zielbitrate hoch genug ist, um zu gewährleisten, dass der Encoder nicht die Quantisierer höher setzen muss, um den Wert zu erreichen.

  • bf_threshold Dies kontrolliert die B-Frame-Empfindlichkeit des Encoders, wobei ein höherer Wert dazu führt, dass mehr B-Frames angewendet werden (und umgekehrt). Diese Einstellung muss zusammen mit max_bframes verwendet werden; bist du Bitraten-hungrig, solltest du beides erhöhen, max_bframes und bf_threshold, während du max_bframes erhöhen und bf_threshold verringern kannst, sodass der Encoder B-Frames nur an Stellen anwendet, die diese auch wirklich brauchen. Eine niedrigere Zahl an max_bframes und ein höherer Wert bei bf_threshold ist möglicherweise keine kluge Wahl, da dies den Encoder zwingt, B-Frames in Stellen zu setzen, die nicht davon profitieren würden und dies daher die visuelle Qualität reduziert. Wie auch immer, wenn du mit Standalone-Playern kompatibel bleiben musst, die nur alte DivX-Profile unterstützen (der wiederum höchstens einen aufeinander folgenden B-Frame unterstützt), wäre dies dein einziger Weg, die Komprimierbarkeit mittels B-Frames zu verbessern.

  • trellis Optimiert den Quantisierungsprozess um einen optimalen Kompromiss zwischen PSNR und Bitrate zu erhalten, was signifikant Bit-sparend wirkt. Diese Bits können woanders im Video wieder verwendet werden und verbessern die visuelle Gesamtqualität. Du solltest es immer eingeschaltet lassen, da sein Einfluss auf die Qualität gewaltig ist. Gerade wenn du Geschwindigkeit haben willst, darfst du es nicht deaktivieren, solange du nicht vhq und alle anderen CPU-hungrigeren Optionen auf ein Minimum heruntergesetzt hast.

  • hq_ac Aktiviert die Vorhersagemethode für einen besseren Koeffizientenaufwand, was die Dateigröße leicht um etwa 0.15 bis 0.19% reduziert (was mit einer PSNR-Erhöhung um weniger als 0.01dB einhergeht), während es eine vernachlässigbar kleine Einwirkung auf die Geschwindigkeit hat. Es empfiehlt sich deshalb, dies immer eingeschaltet zu lassen.

  • cartoon Entworfen, um Kartoon-Inhalt besser zu encodieren, und hat keine Auswirkung auf die Geschwindigkeit, da es lediglich die Heuristiken zur Bestimmung des Modus für diese Art Inhalt abstimmt.

  • me_quality Diese Einstellung ist da, um die Präzision der Bewegungseinschätzung zu kontrollieren. Je höher me_quality, desto präziser wird die Schätzung der Originalbewegung sein, und desto besser wird der resultierende Ausschnitt die Originalbewegung einfangen.

    Die Standardeinstellung ist in jedem Fall die beste; folglich ist es nicht empfehlenswert, sie herunter zu drehen, es sei denn du hast es wirklich auf Geschwindigkeit abgesehen, da alle durch eine gute Bewegungseinschätzung gesparten Bits woanders verwendet würden, was die Gesamtqualität verbessern würde. Gehe deshalb nie unter 5, selbst wenn es der letzte Ausweg sein sollte.

  • chroma_me Verbessert die Bewegungsabschätzung dadurch, dass auch die chroma-(Farb)-Informationen einbezogen werden, wobei me_quality alleine nur luma (Graustufen) verwendet. Dies verlangsamt die Encodierung um 5-10%, verbessert aber die visuelle Qualität durch Reduzieren von Blockeffekten ein wenig und reduziert die Dateigröße um rund 1.3%. Wenn du Geschwindigkeit haben willst, solltest du diese Option deaktivieren, bevor du anfängst zu überlegen, me_quality zu reduzieren.

  • chroma_opt Ist dafür vorgesehen, die chroma-Bildqualität rund um reine weiße/schwarze Kanten zu verbessern, eher noch als die Kompression zu verbessern. Dies kann dabei helfen, den "Rote Stufen"-Effekt zu reduzieren.

  • lumi_mask Versucht, weniger Bitrate auf den Teil eines Bildes zu übergeben, der vom menschlichen Auge nicht gut zu sehen ist, was dem Encoder erlauben sollte, die eingesparten Bits auf wichtigere Teile des Bildes anzuwenden. Die durch diese Option gewonnene Encodierungsqualität hängt in hohem Maße von persönlichen Vorlieben und von Monitortyp und dessen Einstellungen ab (typischerweise wird es nicht gut aussehen, wenn er hell oder ein TFT-Monitor ist).

  • qpel Hebt die Anzahl Kandidaten der Bewegungsvektoren durch Erhöhung der Präzision der Bewegungsabschätzung von einem halben Pixel (halfpel) auf ein viertel Pixel (quarterpel) an. Die Idee dahinter ist, bessere Bewegungsvektoren zu finden, was wiederum die Bitrate reduziert (deshalb wird die Qualität verbessert). Bewegungsvektoren mit viertel Pixel Präzision brauchen ein paar Extrabits für die Codierung, die Bewegungsvektoren ergeben aber nicht immer ein (viel) besseres Resultat. Sehr oft verbraucht der Codec dennoch Bits für die Extrapräzision, jedoch wird im Gegenzug eine geringe oder keine Extraqualität gewonnen. Unglücklicherweise gibt es keinen Weg, den möglichen Gewinn von qpel vorzuaussagen, also musst du eigentlich mit und ohne encodieren, um sicher zu gehen.

    qpel kann fast die doppelte Encodierzeit in Anspruch nehmen und erfordert etwa 25% mehr Verarbeitungsleistung fürs Decodieren. Es wird nicht von allen Standalone-Playern unterstützt.

  • gmc Versucht, Bits beim Schwenken von Szenen einzusparen, indem es einen einzelnen Bewegungsvektor für den gesamten Frame verwendet. Dies erhöht fast immer den PSNR, verlangsamt aber signifikant die Encodierung (genauso wie die Decodierung). Deshalb solltest du es nur nutzen, wenn du vhq auf das Maximum gestellt hast. Xvids GMC ist höher entwickelt als das von DivX, wird aber nur von ein paar Standalone-Playern unterstützt.

7.4.3. Encodierung Profile

Xvid unterstützt Encodierungsprofile über die Option profile, die dazu verwendet werden, den Eigenschaften des Xvid-Videostreams Restriktionen so aufzuerlegen, dass es überall dort abgespielt werden kann, wo das gewählte Profil unterstützt wird. Die Restriktionen beziehen sich auf Auflösungen, Bitraten und bestimmte MPEG-4-Features. Die folgende Tabelle zeigt, was jedes Profil unterstützt.

 EinfachEinfach erweitertDivX
Profilname0123012345HandheldPortable NTSCPortable PALHome Theater NTSCHome Theater PALHDTV
Breite [Pixel]1761763523521761763523523527201763523527207201280
Höhe [Pixel]144144288288144144288288576576144240288480576720
Framerate [fps]15151515303015303030153025302530
Max. mittlere Bitrate [kbps]646412838412812838476830008000537.648544854485448549708.4
Höchstwert mittlere Bitrate über 3 Sek. [kbps]          800800080008000800016000
Max. B-Frames0000      011112
MPEG-Quantisierung    XXXXXX      
Adaptive Quantisierung    XXXXXXXXXXXX
Interlaced Encodierung    XXXXXX   XXX
Viertelpixel    XXXXXX      
Globale Bewegungskompensierung    XXXXXX      

7.4.4. Encodierungseinstellungen Beispiele

Die folgenden Einstellungen sind Beispiele unterschiedlicher Kombinationen von Encodierungsoptionen, die den Kompromiss zwischen Geschwindigkeit gegenüber Qualität bei gleicher Zielbitrate betreffen.

Alle Encodierungseinstellungen wurden auf einem Beispielvideo mit 720x448 @30000/1001 fps getestet, die Zielbitrate war 900kbps, und der Rechner war ein AMD-64 3400+ mit 2400 MHz im 64bit-Modus. Jede Encodierungseinstellung zeichnet sich aus durch die gemessene Encodiergeschwindigkeit (in Frames pro Sekunde) und den PSNR-Verlust (in dB) im Vergleich zu Einstellungen für "sehr hohe Qualität". Bitte hab Verständnis, dass du abhängig von deiner Quelldatei, deinem Rechnertyp und Entwicklungsfortschritten sehr unterschiedliche Resultate erzielen wirst.

BeschreibungEncodieroptionenGeschwindigkeit (in fps)Relativer PSNR-Verlust (in dB)
Sehr hohe Qualitätchroma_opt:vhq=4:bvhq=1:quant_type=mpeg16fps0dB
Hohe Qualitätvhq=2:bvhq=1:chroma_opt:quant_type=mpeg18fps-0.1dB
Schnellturbo:vhq=028fps-0.69dB
Echtzeitturbo:nochroma_me:notrellis:max_bframes=0:vhq=038fps-1.48dB

7.5. Encodieren mit dem x264-Codec

x264 ist eine freie Programmbibliothek zum Encodieren von H.264/AVC-Videostreams. Bevor du mit zu encodieren beginnst, musst du MEncoder so einstellen, dass er es unterstützt.

7.5.1. Encodieroptionen von x264

Bitte beginne mit der Durchsicht der x264-Sektion von MPlayers Manpage. Diese Sektion ist als Anhang zur Manpage vorgesehen. Hier wirst du Schnellhinweise dazu finden, welche Optionen am wahrscheinlichsten die meisten Leute interessieren. Die Manpage ist knapper gehalten, aber auch vollständiger, und zeigt oft viel bessere technische Details.

7.5.1.1. Einführung

Dieses Handbuch berücksichtigt zwei Hauptkategorien der Encodieroptionen:

  1. Optionen, die hauptsächlich Encodierdauer gegenüber Qualität abwägen

  2. Optionen, die zur Erfüllung zahlreicher persönlicher Vorlieben und spezieller Anforderungen nützlich sind

Letztendlich kannst nur du entscheiden, welche Optionen für deine Zwecke am besten geeignet sind. Die Entscheidung für die erste Klasse der Optionen ist die einfachste: Du musst nur entscheiden, ob du denkst, dass Qualitätsunterschiede Geschwindigkeitsunterschiede rechtfertigen. Für die zweite Klasse der Optionen sind die Vorzüge weitaus subjektiver, und mehr Faktoren können involviert sein. Beachte, dass manche der Optionen für "persönliche Vorlieben und spezielle Anforderungen" noch große Auswirkungen auf Geschwindigkeit oder Qualität haben können, das ist aber nicht, wozu sie primär benutzt werden. Ein paar der Optionen für "persönliche Vorlieben" können sogar Änderungen verursachen, die für manche Leute besser aussehen aber schlechter für andere.

Bevor du fortfährst, musst du verstehen, dass dieses Handbuch nur eine Qualitätsmetrik verwendet: globaler PSNR. Für eine kurze Erklärung, was PSNR ist, schau dir den Wikipedia-Artikel zu PSNR an. Globaler PSNR ist die letzte gemeldete PSNR-Nummer, wenn du die Option psnr in x264encopts einbindest. Jedesmal wenn du eine Forderung nach PSNR liest, ist eine der Annahmen hinter dieser Forderung, dass gleiche Bitraten verwendet werden.

Nahezu alle dieser Handbuchkommentare unterstellen, dass du 2-pass anwendest. Beim Vergleich der Optionen gibt es zwei Hauptgründe, 2-pass-Encodierung zu nutzen. Der erste ist, 2-pass bringt rund 1dB PSNR, was einen sehr großen Unterschied ausmacht. Der zweite ist, Optionen zu testen, indem man direkte Qualitätsvergleiche zu 1-pass-Encodierung anstellt, führt einen einen wichtigen verwirrenden Faktor ein: die Bitrate variiert bei jeder Encodierung oft signifikant. Es ist nicht immer einfach zu sagen, ob Qualitätsänderungen vorwiegend auf geänderte Optionen zurückzuführen sind oder ob sie meist essentielle, zufällige Unterschiede in der erhaltenen Bitrate reflektieren.

7.5.1.2. Optionen, die primär Geschwindigkeit und Qualität betreffen

  • subq: Von den Optionen, die dir erlauben, einen Kompromiss zwischen Geschwindigkeit und Qualität einzugehen, sind subq und frameref (siehe unten) gewöhnlich die bei weitem wichtigsten. Wenn du dich für die Optimierung von entweder Geschwindigkeit oder Qualität interessierst, sind diese die ersten, die du in Erwägung ziehen solltest. Bei der Dimension Geschwindigkeit, interagieren die Optionen frameref und subq ziemlich stark miteinander. Die Erfahrung zeigt, dass mit einem Referenzframe subq=5 (die Standardeinstellung) das ganze etwa 35% mehr Zeit in Anspruch nimmt als subq=1. Mit 6 Referenzframes wächst der Nachteil auf 60%. Der Effekt, den subq auf den PSNR ausübt, scheint ziemlich konstant zu sein, ungeachtet der Anzahl der Referenzframes. Typischerweise erreicht subq=5 einen 0.2-0.5 dB höheren globalen PSNR im Vergleich zu subq=1. Dies ist gewöhnlich ausreichend, um sichtbar zu werden.

    subq=6 ist langsamer und führt bei erträglichen Kosten zu besserer Qualität. Im Vergleich zu subq=5 gewinnt sie gewöhnlich 0.1-0.4 dB globalen PSNR mit Geschwindigkeitseinbußen, die sich zwischen 25%-100% bewegen. Im Unterschied zu anderen Levels von subq hängt das Verhalten von subq=6 nicht sehr von frameref und me ab. Statt dessen hängt die Effektivität von subq=6 größtenteils von der Anzahl der verwendeten B-Frames ab. Im Normalgebrauch bedeutet dies, subq=6 hat einen großen Einfluss auf Geschwindigkeit und Qualität in komplexen, stark bewegten Szenen, kann aber auch einen geringen Effekt in Szenen mit wenig Bewegung haben. Beachte, dass dennoch empfohlen wird, bframes immer auf etwas anderes als null zu setzen (siehe unten).

    subq=7 ist der langsamste Modus mit der höchsten Qualität. Im Vergleich zu subq=6 erreicht er normalerweise zwischen 0.01-0.05 dB Zuwachs des globalen PSNR bei Geschwindigkeitseinbußen variierend von 15%-33%. Da der Kompromiss zwischen Zeit gegenüber Qualität recht gering ist, solltest du ihn nur benutzen, wenn du jedes mögliche Bit einsparen möchtest und Encodierzeit keine Rolle spielt.

  • frameref: frameref ist per Voreinstellung auf 1 gesetzt, jedoch solltest du deshalb nicht darauf schließen, dass es unbedingt auf 1 gesetzt sein muss. Allein die Erhöhung von frameref auf 2 bringt rund 0.15dB PSNR mit einem Geschwindigkeitsnachteil von 5-10%; dies sieht nach einem guten Kompromiss aus. frameref=3 bringt rund 0.25dB PSNR mehr als frameref=1, was einen sichtbaren Unterschied machen sollte. frameref=3 ist rund 15% langsamer als frameref=1. Leider setzen vermindernde Rückgaben schnell ein. frameref=6 kann erwartungsgemäß nur 0.05-0.1 dB mehr als frameref=3 bei zusätzlichen 15% Geschwindigkeitsnachteil. Oberhalb frameref=6 sind die Qualitätsgewinne für gewöhnlich sehr klein (obwohl du während der ganzen Diskussion im Kopf behalten solltest, dass sie abhängig von deiner Quelle stark variieren können). In einem ziemlich typischen Fall wird frameref=12 den globalen PSNR um ein bisschen mehr als 0.02dB gegenüber frameref=6 verbessern, bei Geschwindigkeitseinbußen von 15%-20%. Bei so hohen frameref-Werten ist das wirklich einzig Gute, dass man sagen kann, dass ein weiteres Anheben dieses Wertes ziemlich sicher nie den PSNR schädigen wird, jedoch sind zusätzliche Qualitätsvorteile sogar kaum messbar, geschweige denn wahrnehmbar.

    Beachte:

    Das Erhöhen von frameref auf unnötig hohe Werte kann und tut dies üblicherweise auch die Codiereffizienz schädigen, wenn du CABAC ausschaltest. Mit eingeschaltetem CABAC (das Standardverhalten) scheint die Möglichkeit, frameref "zu hoch" zu setzen, gegenwärtig zu weit entfernt um sich Sorgen zu machen, und in der Zukunft werden womöglich Optimierungen diese Möglichkeit ganz und gar ausschließen.

    Wenn du auf Geschwindigkeit abzielst, ist ein vernünftiger Kompromiss, im ersten Durchgang niedrigere subq- und frameref-Werte zu nehmen, und sie danach im zweten Durchgang zu erhöhen. Typischerweise hat dies einen vernachlässigbar negativen Effekt auf die Encodierqualität: Du wirst womöglich unter 0.1dB PSNR verlieren, was viel zu klein für einen sichtbaren Unterschied sein sollte. Trotzdem, unterschiedliche Werte für frameref können auf verschiedene Weise die Frametypenbestimmung beeinflussen. Höchstwahrscheinlich sind dies außerordentlich seltene Fälle, willst du jedoch wirklich sicher gehen, ziehe in Betracht, ob dein Video entweder Vollbild- respektive Einblendungsmuster oder sehr große temporäre Überdeckungen enthält, was einen I-Frame erzwingen könnte. Passe frameref des ersten Durchgangs so an, dass es groß genug ist, die Dauer des Einblendungszyklus (oder der Überdeckungen) zu enthalten. Zum Beispiel, wenn die Szene zwischen zwei Bildern über eine Zeitspanne von drei Frames rückwärts und vorwärts springt, setze frameref des ersten Durchgangs auf 3 oder höher. Dieser Sachverhalt kommt vermutlich extrem selten in Videomaterial mit Live Action vor, erscheint aber manchmal bei eingefangenen Computerspiel-Sequenzen.

  • me: Diese Option dient der Wahl der Suchmethode der Bewegungseinschätzung. Diese Option zu verändern stellt einen überschaubaren Kompromiss zwischen Qualität und Geschwindigkeit dar. me=dia ist nur ein paar Prozent schneller als die Standardsuche, auf Kosten von unter 0.1dB globalem PSNR. Die Standardeinstellung (me=hex) ist ein angemessener Kompromiss zwischen Qualität und Geschwindigkeit. me=umh bringt ein wenig unter 0.1dB globalem PSNR, mit Geschwindigkeitsnachteil, der abhängig von frameref variiert. Bei hohen frameref-Werten (z.B. 12 oder so) ist me=umh etwa 40% langsamer als die Standardeinstellung me=hex. Mit frameref=3 fällt der Geschwindigkeitsnachteil auf 25%-30%.

    me=esa verwendet eine gründliche, für die praktische Anwendung zu langsame Suche.

  • partitions=all: Diese Option aktiviert die Verwendung von 8x4, 4x8 und 4x4 Unterteilungen in den vorhergesagten Macroblöcken (zusätzlich zu den Standardunterteilungen). Sie zu aktivieren führt zu einem recht beständigen Geschwindigkeitsverlust von 10%-15%. Sie ist ziemlich nutzlos bei Quellen, die nur langsame Bewegungen enthalten, obwohl in manchen Quellen mit sehr viel Bewegung und vielen kleinen, sich bewegenden Objekten Zugewinne von etwa 0.1dB erwartet werden können.

  • bframes: Wenn du gewohnt bist, mit anderen Codecs zu encodieren, hast du womöglich empfunden, dass B-Frames nicht immer nützlich sind. Bei H.264 wurde dies geändert: es gibt neue Techniken und Blocktypen, die in B-Frames möglich sind. Für gewöhnlich kann selbst ein einfältiger Algorithmus zur Wahl der B-Frames einen signifikanten PSNR-Vorteil bringen. Es ist interessant festzustellen, dass die Anwendung von B-Frames normalerweise den zweiten Durchgang ein bisschen beschleunigt, und er kann auch eine Encodierung mit einfachem Durchgang etwas schneller machen, wenn adaptive B-Frame-Bestimmung deaktiviert ist.

    Mit deaktivierter adaptiver B-Framebestimmung (nob_adapt von x264encopts) ist der optimale Wert für diese Einstellung normalerweise nicht mehr als bframes=1, andernfalls leiden Szenen mit sehr viel Bewegung darunter. Mit aktivierter adaptiver B-Framebestimmung (das Standardverhalten) ist es sicher, höhere Werte zu verwenden; der Encoder wird die Anwendung von B-Frames in Szenen reduzieren, in denen sie die Kompression schädigen könnten. Der Encoder zieht es selten vor, mehr als 3 oder 4 B-Frames zu verwenden; diese Option höher zu setzen wird einen geringen Effekt haben.

  • b_adapt: Beachte: Dies ist standardmäßig eingeschaltet.

    Ist diese Option aktiviert, wird der Encoder einen einigermaßen schnellen Entscheidungsprozess zur Reduzierung der Anzahl B-Frames in Szenen anwenden, die nicht viel von ihnen profitieren würden. Du kannst b_bias dazu verwenden, zu optimieren wie froh der Encoder über B-Frames sein soll. Der Geschwindigkeitsnachteil adaptiver B-Frames ist gegenwärtig ziemlich bescheiden, und genauso ist der potentielle Qualitätsgewinn. Es sollte aber normalerweise nicht schaden. Beachte, dass dies nur Geschwindigkeit und Frametypenbestimmung im ersten Durchgang betrifft. b_adapt und b_bias haben keinen Effekt auf nachfolgende Durchgänge.

  • b_pyramid: Du kannst diese Option genauso gut aktivieren, falls du >=2 B-Frames verwendest; wie die Manpage dir sagt, erreichst du eine kleine Qualitätsverbesserung bei keinerlei Geschwindigkeitseinbuße. Beachte, dass diese Videos von libavcodec-basierten Decodern älter als etwa 5. März 2005 nicht gelesen werden können.

  • weight_b: In typischen Fällen gibt es nicht viel Gewinn mit dieser Option. Trotzdem, in überblendenden oder ins Schwarze übergehenden Szenen liefert die gewichtete Vorhersage ziemlich große Einsparungen bei der Bitrate. In MPEG-4 ASP wird ein Übergang ins Schwarze gewöhnlich am besten als eine Serie aufwändiger I-Frames codiert; das Verwenden einer gewichteten Vorhersage in B-Frames macht es möglich, wenigstens manche von diesen in viel kleinere B-Frames zu wandeln. Der Verlust an Encodierzeit ist minimal, da keine extra Bestimmungen vorgenommen werden müssen. Auch werden die CPU-Anforderungen des Encoders, im Gegensatz zu den Einschätzungen mancher Leute, von gewichteter Vorhersage nicht sonderlich beeinflusst, ansonsten bleibt alles gleich.

    Leider hat der aktuelle Algorithmus zur adaptiven B-Frame-Bestimmung eine starke Tendenz, B-Frames während des Fadens zu verhindern. Bis sich dies ändert, kann es eine gute Idee sein, nob_adapt zu deinen x264encopts hinzuzufügen, falls du erwartest, dass Fades einen großen Effekt in deinem jeweiligen Videoclip erzeugen.

  • threads: Diese Option erlaubt es, mehrere Threads zu erstellen, um parallel auf mehreren CPUs zu encodieren. Du kannst die Anzahl der Threads manuell wählen oder, besser, setze threads=auto und lasse x264 erkennen, wie viele CPUs verfügbar sind, und die passende Anzahl Threads automatisch wählen. Wenn du eine Multi-Prozessor-Maschine hast, solltest du wirklich in Erwägung ziehen, dies zu benutzen, da es die Encodiergeschwindigkeit linear in der Anzahl der CPU-Kerne (ca. 94% pro CPU-Kern) erhöhen kann, bei sehr geringem Qualitätsverlust (ca. 0.005dB bei Dualprozessor, ca. 0.01dB bei einer Quad-Prozessor-Maschine).

7.5.1.3. Diverse Eigenschaften betreffende Optionen

  • 2-pass-Encodierung: Oben wurde vorgeschlagen, immer 2-pass-Encodierung anzuwenden. Es gibt aber durchaus Gründe, dies nicht zu tun. Beispielsweise bist du, wenn du Live-TV aufnimmst und in Echtzeit encodierst, gezwungen, einen einzigen Durchgang zu verwenden. Auch ist ein Durchgang offensichtlich schneller als zwei Durchgänge; wenn du exakt die gleichen Optionen bei beiden Durchgängen anwendest, ist das Encodieren in zwei Durchgängen mindestens zweimal so langsam.

    Noch gibt es sehr gute Gründe, in zwei Durchgängen zu encodieren. Zum einen ist Ratenkontrolle in einem Durchgang kein Allheilmittel. Sie trifft oft eine unvernünftige Auswahl, weil sie das große Bild nicht sehen kann. Zum Beispiel angenommen, du hast ein zwei Minuten langes Video bestehend aus zwei ausgeprägten Hälften. Die erste Hälfte besitzt eine 60 Sekunden dauernde Szene mit sehr viel Bewegung, die einzeln für sich etwa 2500kbps benötigt, um anständig auszusehen. Direkt daruffolgend kommt eine viel weniger anspruchsvolle 60 Sekunden lange Szene, die bei 300kbps gut aussieht. Angenommen du forderst in der Theorie 1400kbps an, was beiden Szenen ausreichend entgegenkommen würde. Die Ratenkontrolle in einem Durchgang wird in diesem Fall ein paar "Fehler" machen. Zuallererst wird es in beiden Segmenten 1400kbps anpeilen. Das erste Segment könnte schwer überquantisiert enden, was es unakzeptabel und unangemessen blockhaft aussehen lässt. Das zweite Segment wird schwer unterquantisiert sein; es sieht vielleicht perfekt aus, aber der Bitratenverlust dieser Perfektion wird komplett unangemessen sein. Noch schwerer vermeidbar ist das Problem am Übergang beider Szenen. Die ersten Sekunden der Hälfte mit wenig Bewegung wird enorm überquantisiert sein, weil die Ratenkontrolle noch die Art Anforderung an die Bitrate erwartet, der sie in der ersten Hälfte des Videos begegnet war. Diese "Fehlerperiode" der extrem überquantisierten Szene mit wenig Bewegung wird fürchterlich schlecht aussehen, und wird sogar weniger als die 300kbps in Anspruch nehmen als das, was sie genommen hätte, um annehmbar auszusehen. Es gibt Mittel und Wege, diese Fälle des Encodierens in einem Durchgang zu mildern, diese werden allerdingst dahin tendieren, die fehlerhaften Vorhersagen der Bitraten zu häufen.

    Multipass-Ratenkontrolle kann gegenüber der eines einzigen Durchgangs enorm große Vorteile bieten. Indem sie die im ersten Encodierungsdurchlauf gesammelte Statistik verwendet, kann der Encoder mit angemessener Genauigkeit den Aufwand (in Bit) abschätzen, den das Encodieren jeden gegebenen Frames bei jedem gegebenen Quantisierer erfordert. Dies erlaubt eine viel rationalere, besser geplante Zuweisung von Bits zwischen den bithungrigen Szenen mit viel Bewegung und denen bescheidenen mit wenig Bewegung. Siehe qcomp unten für einige Ideen darüber, wie man diese Zuweisungen nach seinem Geschmack optimiert.

    Darüber hinaus brauchen zwei Durchgänge zweimal so lang wie ein Durchgang. Du kannst die Optionen im ersten Durchgang auf höhere Geschwindigkeit und niedrigere Qualität optimieren. Wenn du deine Optionen geschickt wählst, kannst du einen sehr schnellen ersten Durchgang hinkriegen. Die resultierende Qualität im zweiten Durchgang wird geringfügig niedriger ausfallen, weil die Größenvorhersage weniger akkurat ist, jedoch ist die Qualitätsdifferenz normalerweise viel zu klein, um sichtbar zu sein. Versuche zum Beispiel subq=1:frameref=1 zu x264encopts des ersten Durchgangs hinzuzufügen. Verwende dann im zweiten Durchgang langsamere, hochwertigere Optionen: subq=6:frameref=15:partitions=all:me=umh

  • Encodierung mit drei Durchgängen? x264 bietet die Möglichkeit, eine beliebige Anzahl aufeinander folgender Durchgänge auszuführen. Wenn du pass=1 im ersten Durchgang spezifizierst, dann verwende pass=3 im nachfolgenden Durchgang, der nachfolgende Durchgang wird beides tun, die Statistik des vorhergehenden Durchgangs lesen und seine eigene Statistik schreiben. Ein zusätzlicher Durchgang, der diesem folgt, wird eine sehr gute Basis haben, von der aus er hochpräzise Vorhersagen der Framegrößen bei einem gewählten Quantisierer machen kann. In der Praxis ist der damit erzielte gesamte Qualitätsgewinn gewöhnlich nahezu null, und ziemlich wahrscheinlich resultiert ein dritter Durchgang in einem geringfügig schlechteren globalen PSNR als der Durchgang davor. In der typischen Anwendung helfen drei Durchgänge, wenn du entweder eine schleche Vorhersage der Bitraten oder schlecht aussehende Szenenübergänge beim Verwenden nur eines Durchlaufs bekommst. Dies passiert mit ziemlicher Wahrscheinlichkeit bei extrem kurzen Clips. Ebenso gibt es ein paar Spezialfälle, in denen drei (oder mehr) Durchgänge erfahrenen Nutzern dienlich sind, aber um es kurz zu machen, dieses Handbuch behandelt die Diskussion solcher speziellen Fälle nicht.

  • qcomp: qcomp wägt die Anzahl der für "aufwändige" Frames mit viel Bewegung vorgesehenen Bits gegen die für "weniger aufwändige" Frames mit wenig Bewegung ab. Bei einem Extrem zielt qcomp=0 auf eine echte konstante Bitrate ab. Typischerweise würde dies Szenen mit viel Bewegung vollkommen ätzend aussehen lassen, während Szenen mit wenig Bewegung womöglich absolut perfekt aussehen, jedoch öfter mehr Bitrate verwenden würden, als sie es für lediglich sehr gutes Aussehen bräuchten. Beim anderen Extrem erreicht qcomp=1 nahezu konstante Quantisierungsparameter (QP). Ein konstanter QP sieht nicht schlecht aus, die meisten Leute meinen aber, es sei vernünftiger, etwas Bitrate aus den extrem aufwändigen Szenen zu nehmen (wobei dort der Qualitätsverlust micht ganz so augenfällig ist) und sie wieder den Szenen zuzuweisen, die bei sehr guter Qualität leichter zu encodieren sind. qcomp ist per Voreinstellung auf 0.6 gesetzt, was für den Geschmack mancher Leute etwas zu langsam sein könnte (0.7-0.8 werden im Allgemeinen auch verwendet).

  • keyint: keyint ist einzig und allein zur Abwägung der Durchsuchbarkeit der Datei gegenüber der Codiereffiziez da. Als Standardwert ist keyint auf 250 gesetzt. In Material mit 25fps garantiert dies, auf 10 Sekunden genau suchen zu können. Wenn du meinst, es wäre wichtig und nützlich, auf 5 Sekunden genau suchen zu können, setze es auf keyint=125; dies wird der Qualität/Bitrate leicht schaden. Wenn es dir nur um Qualität geht und nicht um die Durchsuchbarkeit, kannst du viel höhere Werte setzen (vorausgesetzt du verstehst, daß es verringerte Resultate gibt, die verschwindend klein werden oder sogar gegen null gehen). Der Videostream wird nach wie vor suchbare Stellen besitzen, solange einige Szenenwechsel vorhanden sind.

  • deblock: Dieses Thema ist im Begriff etwas kontrovers zu geraten.

    H.264 definiert eine simple Deblocking-Prozedur bei I-Blöcken, die von vorgegebenen Stärken und vom QP des strittigen Blocks abhängigen. Mit dem Standardwert werden hohe QP-Blöcke stark gefiltert, und niedrige QP-Blöcke werden überhaupt nicht entblockt. Die vom Standard definierten vorgegebenen Stärken sind mit Bedacht gewählt und die Chancen stehen sehr gut, dass sie PSNR-optimal sind, egal welches Video auch immer du zu encodieren versuchst. Der Parameter deblock erlaubt dir, Offsets festzulegen, um Deblocking-Schwellen voreinzustellen.

    Viele Leute scheinen zu glauben, es sei eine gute Idee, die Stärke des Deblocking-Filters um hohe Beträge abzusenken (sagen wir -3). Dies ist jedoch meist keine gute Idee, und in den meisten Fällen verstehen Leute, die das machen, nicht viel davon wie Deblocking standardmäßig funktioniert.

    Die erste und wichtigste Sache, die man über den in-loop-Deblocking-Filter wissen sollte, ist, dass die Standardschwellenwerte meistens PSNR-optimal sind. In den seltenen Fällen, in denen sie nicht optimal sind, ist das ideale Offset plus oder minus 1. Die Deblocking-Parameter durch einen höheren Betrag anzupassen garantiert meist, dem PSNR zu schaden. Das Verstärken des Filters wird mehr Details verwischen; den Filter zu schwächen wird das Auftreten von Blockeffekten erhöhen.

    Es ist definitiv eine schlechte Idee, die Deblocking-Schwellenwerte herabzusetzen, falls deine Quelle eine vorwiegend niedrige räumliche Komplexität besitzt (z.B. nicht viele Details oder Rauschen). Der in-loop-Filter macht eigentlich einen exzellenten Job durch das Kaschieren auftretender Artefakte. Besitzt die Quelle eine hohe räumliche Komplexität, sind Artefakte weniger bemerkbar. Dies ist so, weil das Schwingen (ringing) dazu neigt, wie Details oder Rauschen auszusehen. Die viselle Wahrnehmung des Menschen erkennt leicht, wenn Details entfernt wurden, aber erkennt nicht so leicht, wenn Rauschen falsch dargestellt wird. Wird die Qualität subjektiv, sind Details und Rauschen etwas austauschbares. Durch das Herabsetzen der Deblocking-Filterstärke verstärkst du höchstwahrscheinlich Fehler durch Hinzufügen von Schwingungsartefakten, aber dem Auge fällt nichts auf, weil es die Artefakte mit Details verwechselt.

    Dies rechtfertigt jedoch nach wie vor nicht das Herabsetzen der Deblocking-Filterstärke. Du kannst im Allgemeinen besseres Qualitätsrauschen im Postprocessing erzielen. Falls deine H.264-Encodierungen zu verschwommen oder verschmiert aussehen, versuche, mit -vf noise beim Abspielen des encodierten Films herumzuspielen. -vf noise=8a:4a sollte die meisten weichen Artefakte kaschieren. Es wird meist mit Sicherheit besser aussehen als die Resultate, die du durch einfaches Herumtüfteln mit dem Deblocking-Filter bekommen hättest.

7.5.2. Beispiele für Encodieroptionen

Die folgenden Einstellungen sind Beispiele unterschiedlicher Kombinationen von Encodier-Optionen, die einen Kompromiss zwischen Geschwindigkeit und Qualität bei gleicher Zielbitrate darstellen.

All diese Encodier-Einstellungen wurden an einem Beispielvideo mit 720x448 @30000/1001 fps getestet, die Zielbitrate war 900kbps, und der Rechner war ein AMD-64 3400+ mit 2400 MHz im 64bit-Modus. Jede Encodier-Einstellung zeichnet sich durch eine gemessene Encodiergeschwindigkeit (in Frames pro Sekunde) und dem PSNR-Verlust (in dB) im Vergleich zu den "sehr hochwertigen" Einstellung aus. Bitte hab dafür Verständnis, dass du abhängig von deiner Quelle, deinem Rechnertyp und Entwicklungsfortschritten sehr unterschiedliche Resultate erhalten kannst.

BeschreibungEncodier-OptionenGeschwindigkeit (in fps)Relativer PSNR-Verlust (in dB)
Sehr hohe Qualitätsubq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b6fps0dB
Hohe Qualitätsubq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b13fps-0.89dB
Schnellsubq=4:bframes=2:b_pyramid=normal:weight_b17fps-1.48dB

7.6. Encodieren mit der Video for Windows Codecfamilie

Video for Windows bietet einfaches Encodieren mittels binärer Video-Codecs. Du kannst mit folgenden Codecs encodieren (solltest du mehr haben, teile es uns bitte mit!)

Beachte, dass der Support hierfür sehr experimentell ist, und einige Codecs arbeiten vielleicht nicht korrekt. Manche Codecs werden nur in bestimmten Farbräumen funktionieren, versuche -vf format=bgr24 und -vf format=yuy2, falls ein Codec versagt oder einen falschen Output liefert.

7.6.1. Von Video for Windows unterstützte Codecs

Video-Codec DateinameBeschreibung (FourCC)md5sumKommentar
aslcodec_vfw.dllAlparysoft verlustfreier (lossless) Codec vfw (ASLC)608af234a6ea4d90cdc7246af5f3f29a 
avimszh.dllAVImszh (MSZH)253118fe1eedea04a95ed6e5f4c28878benötigt -vf format
avizlib.dllAVIzlib (ZLIB)2f1cc76bbcf6d77d40d0e23392fa8eda 
divx.dllDivX4Windows-VFWacf35b2fc004a89c829531555d73f1e6 
huffyuv.dllHuffYUV verlustfrei (lossless) (HFYU)b74695b50230be4a6ef2c4293a58ac3b 
iccvid.dllCinepak Video (cvid)cb3b7ee47ba7dbb3d23d34e274895133 
icmw_32.dllMotion Wavelets (MWV1)c9618a8fc73ce219ba918e3e09e227f2 
jp2avi.dllImagePower MJPEG2000 (IPJ2)d860a11766da0d0ea064672c6833768b-vf flip
m3jp2k32.dllMorgan MJPEG2000 (MJ2C)f3c174edcbaef7cb947d6357cdfde7ff 
m3jpeg32.dllMorgan Motion JPEG Codec (MJPG)1cd13fff5960aa2aae43790242c323b1 
mpg4c32.dllMicrosoft MPEG-4 v1/v2b5791ea23f33010d37ab8314681f1256 
tsccvid.dllTechSmith Camtasia Screen Codec (TSCC)8230d8560c41d444f249802a2700d1d5 
vp31vfw.dllOn2 Open Source VP3 Codec (VP31)845f3590ea489e2e45e876ab107ee7d2 
vp4vfw.dllOn2 VP4 Personal Codec (VP40)fc5480a482ccc594c2898dcc4188b58f 
vp6vfw.dllOn2 VP6 Personal Codec (VP60)04d635a364243013898fd09484f913fb 
vp7vfw.dllOn2 VP7 Personal Codec (VP70)cb4cc3d4ea7c94a35f1d81c3d750bc8dfalscher FourCC?
ViVD2.dllSoftMedia ViVD V2 Codec VfW (GXVE)a7b4bf5cac630bb9262c3f80d8a773a1 

Die erste Spalte enthält die Codec-Namen, die nach dem Parameter codec übergeben werden sollten, wie: -xvfwopts codec=divx.dll. Der FourCC-Code, der von jedem Codec verwendet wird, steht in Klammern.

Ein Beispiel für die Konvertierung eines ISO DVD Trailers in eine VP5-Flash-Videodatei unter Benutzung der compdata-Bitrateneinstellungen:

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. Benutzung von vfw2menc, um eine Datei für Codeceinstellungen zu erzeugen

Um mit Video für Windows Codecs zu encodieren, musst du Bitrate und andere Optionen setzen. Nach dem Stand der Dinge funktioniert dies für x86 sowohl unter *NIX als auch unter Windows.

Zuerst musst du das vfw2menc-Programm erzeugen. Es befindet sich im Ordner TOOLS des MPlayer-Sourcebaums. Um es unter Linux zu erstellen, kann Wine benutzt werden:

winegcc vfw2menc.c -o vfw2menc -lwinmm -lole32

Unter MinGW oder Cygwin verwende:

gcc vfw2menc.c -o vfw2menc.exe -lwinmm -lole32

Um es unter MSVC zu erstellen, wirst du getopt brauchen. Getopt findest du im Original-vfw2menc-Archiv, das es hier gibt: Das Projekt MPlayer on win32.

Unten steht ein Beispiel für den VP6-Codec.

vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf

Dies wird den Konfigurationsdialog des VP6-Codecs öffnen. Wiederhole diesen Schritt für den zweiten Durchlauf und benutze -s secondpass.mcf.

Windows-Benutzer können -xvfwopts codec=vp6vfw.dll:compdata=dialog verwenden, damit der Dialog angezeigt wird, bevor die Encodierung startet.

7.7. MEncoder benutzen, um QuickTime-kompatible Dateien zu erstellen

7.7.1. Warum sollte jemand QuickTime-kompatible Dateien erstellen wollen?

Es gibt mehrere Gründe, warum das Erstellen von QuickTime-kompatiblen Dateien wünschenswert sein kann.

  • Du willst, dass jeder Computeranalphabet deine Encodierung auf jeder größeren Plattform (Windows, Mac OS X, Unices …) anschauen kann.

  • QuickTime kann von mehr Features der Hardware- und Softwarebeschleunigung von Max OS X gebrauch machen als plattformunabhängige Player wie MPlayer oder VLC. Das heißt, dass deine Encodierungen eine bessere Chance haben, auf älteren G4-Machinen flüssig abgespielt werden zu können.

  • QuickTime 7 unterstützt den Next-Generation-Codec H.264, der deutlich bessere Bildqualität erreicht als vorige Codecgenerationen (MPEG-2, MPEG-4 …).

7.7.2. Beschränkungen von QuickTime 7

QuickTime 7 unterstützt H.264 Video und AAC Audio, aber es unterstützt diese nicht gemuxt im AVI-Containerformat. Du kannst jedoch MEncoder verwenden, um Video und Audio zu encodieren, und dann ein separates Programm wie mp4creator (Teil des MPEG4IP-Pakets) verwenden, um Video- und Tonspuren in einen MP4-Container zu muxen.

QuickTimes Unterstützung für H.264 ist begrenzt, daher wirst du ein paar fortgeschrittene Features weglassen müssen. Wenn du dein Video mit Features encodierst, die QuickTime 7 nicht unterstützt, werden dir QuickTime-basierte Player ein ziemlich weißes Bild zeigen an Stelle des erwarteten Videos.

  • B-Frames: QuickTime 7 unterstützt maximal einen B-Frame, z.B. -x264encopts bframes=1. Dies bedeutet, dass b_pyramid and weight_b keine Auswirkungen haben werden, da sie bframes größer als 1 erwarten.

  • Macroblöcke: QuickTime 7 unterstützt keine 8x8 DCT Macroblöcke. Diese Option (8x8dct) ist per Voreinstellung aus, stelle daher sicher, dass du sie nicht explizit aktiviert. Dies bedeutet auch, dass die Option i8x8 keine Auswirkungen haben wird, denn sie benötigt 8x8dct.

  • Seitenverhältnis: QuickTime 7 unterstützt Informationen über SAR (sample aspect ratio) nicht; es nimmt SAR=1 an. Lies den Abschnitt über Skalierung für eine Umgehung dieses Problems.

7.7.3. Beschneidung der Ränder (Cropping)

Angenommen, du willst deine nagelneu gekaufte Kopie von "Chroniken von Narnia" rippen. Deine DVD ist Region 1, d.h. sie ist in NTSC. Das weiter unten stehende Beispiel kann man auch auf PAL anwenden, nur dass du dann -ofps 24000/1001 weglassen und etwas andere Maße für crop und scale verwenden musst.

Nach dem Ausführen von mplayer dvd://1 folgst du den Anweisungen, die detailliert im Abschnitt Wie mit telecine und interlacing in NTSC-DVDs umgehen beschrieben sind, und stellst fest, dass es sich um 24000/1001 fps progressives Video handelt. Das vereinfacht das Vorgehen etwas, da du keinen inverse telecine Filter wie pullup oder einen Deinterlacing-Filter wie yadif anwenden musst.

Als nächstes musst du die schwarzen Streifen oben und unten vom Video entfernen wie in vorigem Abschnitt beschrieben.

7.7.4. Skalierung

Der nächste Schritt ist wirklich herzzerreißend. QuickTime 7 unterstützt keine MPEG-4-Videos mit einer sample aspect ratio ungleich 1, daher wirst du das Video auf quadratische Pixel hochskalieren (was eine Menge Platz verschwendet) oder herunterskalieren (was ein paar Details der Quelle verliert) müssen. Beides ist höchst ineffizient, jedoch einfach nicht zu vermeiden, wenn dein Video von QuickTime 7 abspielbar sein soll. MEncoder kann die passende Hoch- oder Herunterskalierung durchführen bei Angabe von -vf scale=-10:-1 oder -vf scale=-1:-10 respektive. Dies wird dein Video auf die für die geschnittene Höhe korrekte Breite schneiden, gerundet auf das nächste Vielfache von 16 für optimale Kompression. Beachte, dass wenn du schneidest, solltest du zuerst schneiden und erst dann skalieren:

-vf crop=720:352:0:62,scale=-10:-1

7.7.5. A/V-Synchronisation

Weil du in einen anderen Container muxen wirst, solltest du immer die Option harddup verwenden, um sicherzustellen, dass doppelte Frames in der Videoausgabe tatsächlich dupliziert werden. Ohne diese Option wird MEncoder einfach eine Markierung im Videostream machen, dass ein doppelter Frame vorkommt, und sich darauf verlassen, dass die Software dafür sorgt, dass derselbe Frame zweimal angezeigt wird. Leider überlebt diese "weiche Duplikation" das Remuxen nicht, daher wird der Ton langsam Synchronisation zum Video verlieren.

Die endgültige Filterkette sieht so aus:

-vf crop=720:352:0:62,scale=-10:-1,harddup

7.7.6. Bitrate

Wie immer geht es bei der Wahl der Bitrate sowohl um technische Gegebenheiten der Quelle, wie hier erklärt wird, als auch um persönlichen Geschmack. Dieser Film enthält durchaus einige Actionszenen und viele Details, aber H.264-Video sieht gut aus auch bei viel geringeren Bitraten als XviD oder andere MPEG-4-Codecs. Nach vielem Experimentieren hat der Autor dieser Anleitung beschlossen, den Film bei 900kbps zu encodieren, und dachte, er sehe ziemlich gut aus. Du kannst die Bitrate verringern, um Platz zu sparen, oder erhöhen, um die Qualität zu verbessern.

7.7.7. Encoding-Beispiel

Du bist jetzt soweit, das Video zu encodieren. Da du auf Qualität Wert legst, wirst du natürlich eine Encodierung mit zwei Durchläufen machen. Um etwas Encodierzeit zu sparen, kannst du die Option turbo beim ersten Durchlauf angeben; dies verringert subq und frameref auf 1. Um etwas Platz zu sparen, kannst du die Option ss verwenden, um die ersten Sekunden des Videos zu überspringen. (Ich fand, dass dieser bestimmte Film 32 Sekunden Vorspann hat.) bframes kann 0 oder 1 sein. Die anderen Optionen werden in Encodierung mit dem x264-Codec und der Manpage beschrieben.

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

Wenn du einen Rechner mit mehreren Prozessoren hast, nutze die Chance, den Encodierungsvorgang dramatisch zu beschleunigen, indem du x264's Multithreading-Modus verwendest, indem du die Option threads=auto der x264encopts-Kommandozeile hinzufügst.

Der zweite Durchlauf ist derselbe, außer dass du die Ausgabedatei angibst und pass=2 setzt.

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

Das resultierende AVI sollte in MPlayer perfekt abspielbar sein, aber natürlich kann QuickTime es nicht abspielen. Denn es unterstützt H264 in AVI nicht. Der nächste Schritt ist also, das Video in einen MP4-Container zu muxen.

7.7.8. Remuxen zu MP4

Es gibt mehrere Möglichkeiten, AVI-Dateien nach MP4 zu muxen. Du kannst mp4creator verwenden, welches Teil des MPEG4IP-Pakets ist.

Demuxe das AVI MPlayer zuerst in separate Audio- und Videostreams.

mplayer narnia.avi -dumpaudio -dumpfile narnia.aac
mplayer narnia.avi -dumpvideo -dumpfile narnia.h264

Die Dateinamen sind wichtig; mp4creator verlangt, dass AAC-Audiostreams .aac und H.264-Videostreams .h264 heißen.

Benutze nun mp4creator, um aus Audio- und Videostreams eine MP4-Datei zu erzeugen.

mp4creator -create=narnia.aac narnia.mp4
mp4creator -create=narnia.h264 -rate=23.976 narnia.mp4

Anders als bei der Encodierung musst du die Framerate als Dezimalzahl (23.976) und nicht als Bruch (24000/1001) angeben.

Diese Datei narnia.mp4 sollte nun mit jeder QuickTime 7 Anwendung wie dem QuickTime Player oder iTunes abspielbar sein. Wenn du vorhast, das Video mit einem QuickTime-Plugin im Browser anzuschauen, solltest du den Film außerdem "hinten", so dass das QuickTime-Plugin während des Downloads die Wiedergabe starten kann. mp4creator kann diese Art Tracks erstellen:

mp4creator -hint=1 narnia.mp4
mp4creator -hint=2 narnia.mp4
mp4creator -optimize narnia.mp4

Du kannst das Ergebnis überprüfen, um sicherzustellen, dass die Hint-Tracks erfolgreich erstellt wurden:

mp4creator -list narnia.mp4

Du solltest eine Auflistung der Tracks sehen: 1 Audio-, 1 Video- und 2 Hint-Tracks.

Track   Type    Info
1       audio   MPEG-4 AAC LC, 8548.714 secs, 190 kbps, 48000 Hz
2       video   H264 [email protected], 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps
3       hint    Payload mpeg4-generic for track 1
4       hint    Payload H264 for track 2

7.7.9. Metadata-Tags hinzufügen

Wenn du deinem Video Tags hinzufügen möchtest, die in iTunes angezeigt werden, kannst du dazu AtomicParsley verwenden.

AtomicParsley narnia.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite

Die Option --metaEnema entfernt jegliche existierenden Metadaten (mp4creator fügt seinen Namen im Tag "encoding tool" hinzu), und --freefree macht den frei gewordenen Platz geltend. Die Option --stik setzt den Videotyp (wie z.B. Film und Serie), den iTunes verwendet, um verwandte Videodateien zu gruppieren. Die Option --overWrite überschreibt die ursprüngliche Datei. Ohne sie erstellt AtomicParsley eine automatisch benannte Datei im selben Verzeichnis und lässt die Originaldatei unberührt.

7.8. Verwendung von MEncoder zum Erzeugen VCD/SVCD/DVD-konformer Dateien.

7.8.1. Formatbeschränkungen

MEncoder ist in der Lage, MPEG-Dateien im VCD-, SCVD- und DVD-Format durch Verwendung der libavcodec-Programmbibliothek zu erzeugen. Diese Dateien können danach im Zusammenhang mit vcdimager oder dvdauthor zum Erzeugen von Disks verwendet werden, die auf einem Standard Set-Top-Player abgespielt werden können.

Die Formate DVD, SVCD und VCD sind starken Beschränkungen unterworfen. Es ist nur eine kleine Auswahl an encodierten Bildgrößen und Seitenverhältnissen verfügbar. Wenn dein Film nicht bereits die Anforderungen erfüllt, musst du das Bild skalieren, zuschneiden oder schwarze Ränder hinzufügen, um es konform zu machen.

7.8.1.1. Formatbeschränkungen

FormatAuflösungV. CodecV. BitrateSamplerateA. CodecA. BitrateFPSSeitenverhältnis
NTSC DVD720x480, 704x480, 352x480, 352x240MPEG-29800 kbps48000 HzAC3,PCM1536 kbps (max)30000/1001, 24000/10014:3, 16:9 (nur für 720x480)
NTSC DVD352x240[a]MPEG-11856 kbps48000 HzAC3,PCM1536 kbps (max)30000/1001, 24000/10014:3, 16:9
NTSC SVCD480x480MPEG-22600 kbps44100 HzMP2384 kbps (max)30000/10014:3
NTSC VCD352x240MPEG-11150 kbps44100 HzMP2224 kbps24000/1001, 30000/10014:3
PAL DVD720x576, 704x576, 352x576, 352x288MPEG-29800 kbps48000 HzMP2,AC3,PCM1536 kbps (max)254:3, 16:9 (nur für 720x576)
PAL DVD352x288[a]MPEG-11856 kbps48000 HzMP2,AC3,PCM1536 kbps (max)254:3, 16:9
PAL SVCD480x576MPEG-22600 kbps44100 HzMP2384 kbps (max)254:3
PAL VCD352x288MPEG-11152 kbps44100 HzMP2224 kbps254:3

[a] Diese Auflösungen werden selten für DVDs verwendet, da sie von ziemlch niedriger Qualität sind.

Wenn ein Film ein 2.35:1 Seitenverhältnis hat (die meisten aktuellen Action-Filme), wirst du schwarze Ränder hinzufügen oder den Film auf 16:9 zuschneiden müssen, um eine DVD oder VCD herzustellen. Wenn du schwarze Ränder hinzufügst, versuche diese an 16-Pixel-Rändern auszurichten, um den Einfluß auf die Encodier-Performance zu minimieren. Zum Glück besitzen DVDs eine ausreichend hohe Bitrate, damit du dich nicht zu sehr um die Encodier-Effizienz sorgen musst. SVCD und VCD jedoch sind höchst mager an Bitrate und erfordern Aufwand, um akzeptable Qualität zu erreichen.

7.8.1.2. GOP-Größenbeschränkungen

DVD, VCD und SVCD zwingen dich auch zu relativ niedrigen GOP-Größen (Group of Pictures). Für Material mit 30 fps ist die größte erlaubte GOP-Größe 18. Für 25 oder 24 fps ist das Maximum 15. Die GOP-Größe wird mittels der Option keyint gesetzt.

7.8.1.3. Bitraten-Beschränkungen

VCD-Video muss bei CBR 1152 kbps sein. Zu dieser nach oben begrenzten Einschränkung kommt auch noch eine extrem niedrige vbv-Puffergröße von 327 Kilobit. SVCD erlaubt das Variieren der Video-Bitraten auf bis zu 2500 kbps, und eine etwas weniger restriktive vbv-Puffergröße von 917 Kilobit ist erlaubt. DVD-Video-Bitraten können sich bis auf irgendwo um die 9800 kbps einpegeln (wenngleich typische Bitraten etwa halb so groß sind), und die vbv-Puffergröße ist 1835 Kilobit.

7.8.2. Output-Optionen

MEncoder besitzt Optionen zur Kontrolle des Output-Formats. Durch das Verwenden dieser Optionen können wir ihn anweisen, den korrekten Dateityp zu erzeugen.

Die Optionen für VCD und SVCD werden xvcd und xsvcd genannt, weil sie erweiterte Formate sind. Sie sind nicht strikt Standard-konform, hauptsächlich weil der Output keine Scan-Offsets enthält. Wenn du ein SVCD-Image generieren musst, solltest du die Output-Datei dem vcdimager übergeben.

VCD:

-of mpeg -mpegopts format=xvcd

SVCD:

-of mpeg -mpegopts format=xsvcd

DVD (mit Zeitstempeln für jeden Frame, wenn möglich):

-of mpeg -mpegopts format=dvd:tsaf

DVD mit NTSC-Pullup:

-of mpeg -mpegopts format=dvd:tsaf:telecine -ofps 24000/1001

Dies erlaubt 24000/1001 fps progressive-Inhalt bei 30000/1001 fps encodiert zu werden, wobei die DVD-Konformität erhalten bleibt.

7.8.2.1. Seitenverhältnis

Der Parameter für das Seitenverhältnis von -lavcopts wird zum Encodieren des Seitenverhältnisses einer Datei verwendet. Während des Playbacks wird das Seitenverhältnis dazu benutzt, die korrekte Größe des Videos wieder herzustellen.

16:9 oder "Breitbild"

-lavcopts aspect=16/9

4:3 oder "Vollbild"

-lavcopts aspect=4/3

2.35:1 oder "Cinemascope" NTSC

-vf scale=720:368,expand=720:480 -lavcopts aspect=16/9

Um die korrekte Skalierungsgröße zu berechnen, verwende die erweiterte NTSC-Breite von 854/2.35 = 368

2.35:1 oder "Cinemascope" PAL

-vf scale=720:432,expand=720:576 -lavcopts aspect=16/9

Um die korrekte Skalierungsgröße zu berechnen, verwende die erweiterte PAL-Breite von 1024/2.35 = 432

7.8.2.2. Aufrechterhalten der A/V-Synchronisation

Um die Audio-/Video-Synchronisation während der kompletten Encodierung aufrechtzuerhalten, muss MEncoder Frames auslassen oder duplizieren. Dies funktioniert beim Muxen in eine AVI-Datei ziemlich gut, aber meist schlägt das Aufrechterhalten der A/V-Synchronisation mit anderen Muxern wie etwa MPEG garantiert fehl. Dies ist der Grund, weshalb es nötig ist, den harddup-Video-Filter am Ende der Filterkette anzuhängen, um diese Art Problem zu vermeiden. Du findest mehr technische Informationen zu harddup im Abschnitt Verbessern der Mux- und A/V-Synchronisationszuverlässigkeit oder in der Manpage.

7.8.2.3. Sampleraten-Konvertierung

Wenn die Audio-Samplerate in der Originaldatei nicht dieselbe wie die vom Zielformat angeforderte ist, wird eine Sampleraten-Konvertierung erforderlich. Dies wird erreicht, indem man die Option -srate und den -af lavcresample Audio-Filter zusammen anwedet.

DVD:

-srate 48000 -af lavcresample=48000

VCD und SVCD:

-srate 44100 -af lavcresample=44100

7.8.3. Verwenden des libavcodec zur VCD/SVCD/DVD-Encodierung

7.8.3.1. Einführung

libavcodec kann verwendet werden, um ein VCD/SVCD/DVD-konformes Video durch die Anwendung der passenden Optionen zu erzeugen.

7.8.3.2. lavcopts

Dies ist eine Liste von Feldern in -lavcopts, die du möglicherweise ändern musst, um einen für VCD, SVCD oder DVD konformen Film herzustellen:

  • acodec: mp2 für VCD, SVCD oder PAL DVD; ac3 wird am häufigsten für DVD verwendet. PCM-Audio kann auch für DVD verwendet werden, aber dies ist meistens eine riesen Platzverschwendung. Beachte, dass MP3-Audio nicht konform für irgendeines dieser Formate ist, aber Player haben oft ohnehin kein Problem, es abzuspielen.

  • abitrate: 224 für VCD; bis zu 384 für SVCD; bis zu 1536 für DVD, aber übliche Werte reichen von 192 kbps für Stereo bis 384 kbps für 5.1-Kanal-Sound.

  • vcodec: mpeg1video für VCD; mpeg2video für SVCD; mpeg2video wird gewöhnlich für DVD verwendet, man kann aber auch mpeg1video für CIF-Auflösungen verwenden.

  • keyint: Angewandt, um die GOP-Größe zu setzen. 18 für Material mit 30fps oder 15 für Material mit 25/24 fps. Kommerzielle Hersteller scheinen Keyframe-Intervalle von 12 zu bevorzugen. Es ist möglich, dies viel größer zu machen und dennoch die Kompatibilität zu den meisten Player zu behalten. Ein keyint von 25 sollte nie irgendwelche Probleme machen.

  • vrc_buf_size: 327 für VCD, 917 für SVCD und 1835 für DVD.

  • vrc_minrate: 1152 für VCD. kann für SVCD und DVD so gelassen werden.

  • vrc_maxrate: 1152 für VCD; 2500 für SVCD; 9800 für DVD. Für SVCD und DVD könntest du niedrigere Werte verwenden, abhängig von deinen persönlichen Vorlieben und Anforderungen.

  • vbitrate: 1152 für VCD; bis zu 2500 für SVCD; bis zu 9800 für DVD. Für letztere zwei Formate sollte vbitrate basierend auf persönliche Vorlieben gesetzt werden. Zum Beispiel, wenn du darauf bestehst, 20 Stunden oder so passend auf eine DVD zu bringen, könntest du vbitrate=400 benutzen. Die sich daraus ergebende Video-Qualität würde womöglich äußerst mies. Wenn du versuchst, die maximal mögliche Qualität auf eine DVD zu quetschen, nimm vbitrate=9800, aber sei gewarnt, dass dich dies zu weniger als einer Stunde Video auf einer Single-Layer DVD zwingen würde.

  • vstrict: vstrict=0 sollte verwendet werden, um DVDs zu erstellen. Ohne diese Option erzeugt MPlayer einen Stream, der von manchen standalone DVD-Playern nicht korrekt decodiert werden kann.

7.8.3.3. Beispiele

Dies ist eine typische Zusammenstellung von mindestens zu verwendenden -lavcopts-Optionen zum Encodieren eines Videos:

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

Für das Encodieren höherer Qualität könntest du auch qualitätssteigernde Optionen an lavcopts anfügen, wie etwa trell, mbd=2 und weitere. Beachte, dass qpel und v4mv, obwohl oft bei MPEG-4 nützlich, nicht auf MPEG-1 oder MPEG-2 anwendbar sind. Außerdem, wenn du versuchst, eine sehr hochwertige DVD-Encodierung zu machen, kann es nützlich sein, dc=10 an lavcopts anzufügen. Wobei dies helfen könnte, das Auftreten von Blöcken in fahl-farbenen Bereichen zu reduzieren. Zusammenfassend ist dies ein Beispiel einer Zusammenstellung von lavcopts für für eine höherwertige 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. Encodieren von Audio

VCD und SVCD unterstützen MPEG-1 Layer II Audio, indem sie einen MP2-Encoder von toolame, twolame, oder libavcodec verwenden. Der libavcodec MP2 ist weit davon entfernt, so gut zu sein wie die anderen zwei Bibliotheken, dennoch sollte er immer verfügbar sein. VCD unterstützt nur Audio mit konstanten Bitraten (CBR) wogegen SVCD auch variable Bitraten (VBR) unterstützt. Sei vorsichtig, wenn du VBR benutzt, weil einige schlechte Standalone-Player diese nicht so gut unterstützen könnten.

Für DVD-Audio wird der AC3-Codec von libavcodec verwendet.

7.8.4.1. toolame

Für VCD und SVCD:

-oac toolame -toolameopts br=224

7.8.4.2. twolame

Für VCD und SVCD:

-oac twolame -twolameopts br=224

7.8.4.3. libavcodec

Für DVD mit 2-Kanal-Sound:

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

Für DVD mit 5.1-Kanal-Sound:

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

Für VCD und SVCD:

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

7.8.5. Zusammenfassung

Diese Sektion zeigt einige komplette Befehle zum Erzeugen von VCD/SVCD/DVD-konformen 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 mit enthaltenem AC3 Audio nach DVD

Hat die Quelle bereits AC3-Audio, nimm -oac copy anstatt es erneut zu encodieren.

mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -vf scale=720:576,\
  harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:\
  vbitrate=5000:keyint=15:vstrict=0:aspect=16/9 -ofps 25 \
  -o movie.mpg movie.avi

7.8.5.4. NTSC AVI mit AC3-Ton nach DVD

Hat die Quelle bereits AC3-Audio und ist 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 -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 -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 -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 -ofps 30000/1001 \
  -o movie.mpg movie.avi



[1] Sei trotzdem vorsichtig: MPEG-4 AVC-Videos in DVD-Auflösung zu decodieren erfordert einen schnellen Rechner (z.B. einen Pentium 4 über 1.5GHz oder einen Pentium M über 1GHz).

[2] Dieselbe Encodierung kann auf dem Monitor eines anderen vollkommen anders aussehen oder wenn sie von einem anderen Decoder abgespielt wird, also mach deine Encodierungen zukunftssicher indem du sie unter verschiedenen Setups ablaufen lässt.

Kapitel 8. Häufig gestellte Fragen

8.1. Entwicklung
F: Wie erstelle ich einen ordentlichen Patch für MPlayer?
F: Wie übersetze ich MPlayer in eine andere Sprache?
F: Wie kann ich die MPlayer-Entwicklung unterstützen?
F: Wie kann ich MPlayer-Entwickler werden?
F: Warum benutzt ihr kein autoconf/automake?
8.2. Compilierung und Installation
F: Compilierung bricht mit einer Fehlermeldung ab, und gcc gibt irgendeine kryptische Nachricht aus, die den Ausdruck internal compiler error oder unable to find a register to spill oder can't find a register in class `GENERAL_REGS' while reloading `asm' enthält.
F: Gibt es Binärpakete (RPM/Debian) von MPlayer?
F: Wie kann ich einen 32bit-MPlayer auf einem 64bit Athlon erstellen?
F: Configure endet mit diesem Text, und MPlayer compiliert nicht! Your gcc does not support even i386 for '-march' and '-mcpu'
F: Ich habe eine Matrox G200/G400/G450/G550, wie benutze/compiliere ich den mga_vid-Treiber?
F: Während 'make' beschwert sich MPlayer über fehlende X11-Bibliotheken. Das verstehe ich nicht, ich habe doch X11 installiert!?
F: Erstellen unter Mac OS 10.3 führt zu vielen Linker-Fehlern
8.3. Allgemeine Fragen
F: Gibt es für MPlayer irgendwelche Mailing-Listen?
F: Ich habe einen fiesen Fehler gefunden, als ich versucht habe, mein Lieblingsvideo abzuspielen. Wen soll ich darüber informieren?
F: Ich habe Probleme beim Abspielen von Dateien mit dem ...-Codec. Kann ich sie verwenden?
F: Wenn ich die Wiedergabe starte, bekomme ich diese Mitteilung, es scheint aber alles in Ordnung zu sein: Linux RTC init: ioctl (rtc_pie_on): Permission denied
F: Wie kann ich einen Screenshot machen?
F: Was bedeuten die Zahlen der Statuszeile?
F: Es gibt Fehlermeldungen, die sagen, dass eine Datei nicht gefunden wurde: /usr/local/lib/codecs/ ...
F: Wie kann ich dafür sorgen, dass sich MPlayer die Optionen merkt, die ich für eine bestimmte Datei wie zum Beispiel movie.avi verwende?
F: Untertitel sind sehr schick, die schönsten, die ich je gesehen haben, aber sie verlangsamen die Wiedergabe! Ich weiß, es ist unwahrscheinlich...
F: Ich kann nicht auf das GUI-Menü zugreifen! Ich mache einen Rechtsklick, aber ich kann auf keine Menüeinträge zugreifen!
F: Wie kann ich MPlayer im Hintergrund ausführen?
8.4. Probleme bei der Wiedergabe
F: Ich kann den Grund für ein merkwürdiges Wiedergabeproblem nicht festnageln.
F: Wie schaffe ich es, dass Untertitel auf den schwarzen Rändern um einen Film erscheinen?
F: Wie kann ich Audio-/Untertitel-Spuren einer DVD, einer OGM-, Matroska oder NUT-Datei auswählen?
F: Ich versuche, einen zufälligen Stream vom Internet abspielen, aber es funktioniert nicht.
F: Ich habe einen Film aus einem P2P-Netzwerk runtergeladen, aber er funktioniert nicht!
F: Ich habe Probleme dabei, die Untertitel anzeigen zu lassen, Hilfe!!
F: Warum funktioniert MPlayer auf Fedora Core nicht?
F: MPlayer bricht ab mit MPlayer interrupted by signal 4 in module: decode_video
F: Wenn ich versuche, von meinem Empfänger zu lesen, funktioniert das zwar, aber die Farben sehen komisch aus. Mit anderen Anwendungen funktioniert es.
F: Ich bekomme sehr merkwürdige Prozentangaben (viel zu hoch), wenn ich Dateien auf meinem Notebook abspiele.
F: Die Audio-/Videosynchronisation geht total verloren, wenn ich MPlayer als root auf meinem Notebook starte. Als normaler Benutzer funktioniert es normal.
F: Bei der Wiedergabe eines Films wird dieser plötzlich rucklig, und ich bekomme folgende Nachricht: Schlecht interleavte AVI-Datei erkannt, wechsele in den -ni Modus!
8.5. Video-/Audiotreiberprobleme (vo/ao)
F: Wenn ich den den Vollbildmodus wechsele, bekomme ich nur schwarze Rahmen um das Bild und keine wirkliche Skalierung auf Vollbildmodus.
F: Ich habe MPlayer gerade installiert. Wenn ich eine Videodatei öffnen möchte, verursacht dies einen fatalen Fehler: Fehler beim Öffnen/Initialisieren des ausgewählten Videoausgabetreibers (-vo). Wie kann ich mein Problem lösen?
F: Ich habe Probleme mit [dein Fenstermanager] und Vollbildmodi bei xv/xmga/sdl/x11 ...
F: Die Audiosynchronisation geht beim Abspielen einer AVI-Datei verloren.
F: Mein Computer spielt MS DivX AVIs mit Auflösungen ~ 640x300 und Stereo-MP3-Ton zu langsam. Wenn ich die Option -nosound verwende, ist alles ok (aber still).
F: Wie kann ich dmix mit MPlayer benutzen?
F: Ich habe keinen Ton, wenn ich ein Video abspielen möchte, und bekomme Fehlermeldungen wie diese: 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: kein Ton!!! Starte Wiedergabe...
F: Beim Start von MPlayer unter KDE bekomme ich nur ein schwarzes Bild, und nichts geschieht. Nach ungefähr einer Minute beginnt die Wiedergabe.
F: Ich habe A/V-Synchronisationsprobleme. Manche meiner AVIs werden gut wiedergegeben, manche aber mit doppelter Geschwindigkeit!
F: Wenn ich diesen Film abspiele, bekomme ich Audio/Video-Desynchronisation und/oder MPlayer stürzt mit folgender Nachricht ab: DEMUXER: Zu viele (945 in 8390980 bytes) Videopakete im Puffer!
F: Wie kann ich die A/V-Desynchronisation beim Spulen durch RealMedia-Streams loswerden?
8.6. DVD-Wiedergabe
F: Was ist mit DVD-Navigation/-menüs?
F: Ich kann aktuelle DVDs von Sony Picutures/BMG nicht anschauen.
F: Was ist mit Untertiteln? Kann sie MPlayer darstellen?
F: Wie kann ich den Regionalcode meines DVD-Laufwerks setzen? Ich habe kein Windows!
F: Ich kann keine DVD abspielen, MPlayer hängt oder gibt "Encrypted VOB file!"-Fehler aus.
F: Muss ich (setuid) root sein, um eine DVD abzuspielen?
F: Ist es möglich, nur ausgewählte Kapitel abzuspielen bzw. zu encodieren?
F: Meine DVD-Wiedergabe ist träge!
F: Ich habe eine DVD mit vobcopy kopiert. Wie kann ich es von meiner Festplatte abspielen/encodieren?
8.7. Feature-Anfragen
F: Wenn MPlayer gerade pausiert und ich versuche zu spulen oder eine andere Taste drücke, hört der Pausezustand auf. Ich würde gern in einem pausierten Film spulen.
F: Ich möchte +/- 1 Frame anstatt 10 Sekunden spulen.
8.8. Encodierung
F: Wie kann ich encodieren?
F: Wie kann ich eine komplette DVD in eine Datei schreiben (dumpen)?
F: Wie kann ich (S)VCDs automatisch erstellen?
F: Wie kann ich (S)VCDs erstellen?
F: Wie kann ich zwei Videodateien zusammenfügen?
F: Wie kann ich AVI-Dateien mit kaputtem Index oder schlechtem Interleaving reparieren?
F: Wie kann ich das Seitenverhältnis einer AVI-Datei reparieren?
F: Wie kann ich ein Backup machen und eine VOB-Datei mit kaputtem Anfang encodieren?
F: Ich kann keine DVD-Untertitel in AVI encodieren!
F: Wie kann ich nur ausgewählte Kapitel einer DVD encodieren?
F: Ich versuche, mit Dateien der Größe 2GB+ auf einem VFAT-Dateisystem zu arbeiten. Klappt das?
F: Was bedeuten die Zahlen der Statuszeile während der Encodierung?
F: Warum ist die von MEncoder ausgegebene empfohlene Bitrate negativ?
F: Ich kann eine ASF-Datei nicht zu AVI/MPEG-4 (DivX) konvertieren, da sie 1000 fps verwendet.
F: Wie kann ich Untertitel in die Ausgabedatei packen?
F: Wie kann ich nur Ton von einem Musikvideo encodieren?
F: Warum versagen third-party-Player bei dem Versuch, MPEG-4-Filme abzuspielen, die von MEncoder-Versionen nach 1.0pre7 erstellt wurden?
F: Wie kann ich eine Datei encodieren, die nur Ton enthält?
F: Wie kann ich in AVI eingebettete Untertitel wiedergegeben?
F: MPlayer kann nicht...

8.1. Entwicklung

F: Wie erstelle ich einen ordentlichen Patch für MPlayer?
F: Wie übersetze ich MPlayer in eine andere Sprache?
F: Wie kann ich die MPlayer-Entwicklung unterstützen?
F: Wie kann ich MPlayer-Entwickler werden?
F: Warum benutzt ihr kein autoconf/automake?

F:

Wie erstelle ich einen ordentlichen Patch für MPlayer?

A:

Wir haben ein kurzes Dokument (englisch) verfasst, das alle nötigen Details beschreibt. Bitte folge den Anweisungen.

F:

Wie übersetze ich MPlayer in eine andere Sprache?

A:

Lies die HOWTO für Übersetzungen (englisch), sie sollte alles erklären. Weitere Hilfe kannst du auf der MPlayer-translations-Mailing-Liste bekommen.

F:

Wie kann ich die MPlayer-Entwicklung unterstützen?

A:

Wir sind mehr als glücklich über Hardware- und Softwarespenden. Sie helfen uns, MPlayer immer weiter zu verbessern.

F:

Wie kann ich MPlayer-Entwickler werden?

A:

Programmierer und Leute, die Dokumentation schreiben, sind immer willkommen. Lies die technische Dokumentation (englisch), um einen ersten Eindruck zu bekommen. Du solltest dich dann auf der Mailing-Liste MPlayer-dev-eng anmelden und mit dem Programmieren beginnen. Wenn du bei der Dokumentation aushelfen möchtest, schließe dich der MPlayer-docs-Mailing-Liste an.

F:

Warum benutzt ihr kein autoconf/automake?

A:

Wir haben ein selbstgeschriebenes modulares Buildsystem. Es leistet ausreichend gute Arbeit, warum also wechseln? Davon abgesehen mögen wir die auto*-Tools nicht, wie andere Leute auch.

8.2. Compilierung und Installation

F: Compilierung bricht mit einer Fehlermeldung ab, und gcc gibt irgendeine kryptische Nachricht aus, die den Ausdruck internal compiler error oder unable to find a register to spill oder can't find a register in class `GENERAL_REGS' while reloading `asm' enthält.
F: Gibt es Binärpakete (RPM/Debian) von MPlayer?
F: Wie kann ich einen 32bit-MPlayer auf einem 64bit Athlon erstellen?
F: Configure endet mit diesem Text, und MPlayer compiliert nicht! Your gcc does not support even i386 for '-march' and '-mcpu'
F: Ich habe eine Matrox G200/G400/G450/G550, wie benutze/compiliere ich den mga_vid-Treiber?
F: Während 'make' beschwert sich MPlayer über fehlende X11-Bibliotheken. Das verstehe ich nicht, ich habe doch X11 installiert!?
F: Erstellen unter Mac OS 10.3 führt zu vielen Linker-Fehlern

F:

Compilierung bricht mit einer Fehlermeldung ab, und gcc gibt irgendeine kryptische Nachricht aus, die den Ausdruck internal compiler error oder unable to find a register to spill oder can't find a register in class `GENERAL_REGS' while reloading `asm' enthält.

A:

Du bist über einen Fehler in gcc gestolpert. Bitte berichte diesen dem gcc-Team, nicht uns. Aus irgendeinem Grund geschieht es häufiger, dass MPlayer Compiler-Fehler hervorruft. Nichtsdestotrotz können wir diese nicht beheben, und wir fügen unserem Sourcecode keine Umgehungen hinzu. Halte dich an eine Compiler-Version, von der bekannt ist, dass sie stabil läuft, oder update regelmäßig, um dieses Problem zu vermeiden.

F:

Gibt es Binärpakete (RPM/Debian) von MPlayer?

A:

Siehe Abschnitte Debian und RPM für Details.

F:

Wie kann ich einen 32bit-MPlayer auf einem 64bit Athlon erstellen?

A:

Probiere folgende configure-Optionen:

/configure --target=i386-linux --cc="gcc -m32" --as="as --32" --with-extralibdir=/usr/lib

F:

Configure endet mit diesem Text, und MPlayer compiliert nicht!

Your gcc does not support even i386 for '-march' and '-mcpu'

A:

Dein gcc ist nicht richtig installiert, überprüfe die Datei config.log für Details.

F:

Ich habe eine Matrox G200/G400/G450/G550, wie benutze/compiliere ich den mga_vid-Treiber?

A:

Lies den Abschnitt mga_vid.

F:

Während 'make' beschwert sich MPlayer über fehlende X11-Bibliotheken. Das verstehe ich nicht, ich habe doch X11 installiert!?

A:

... dir fehlen aber die X11-Entwicklerpakete. Oder diese sind nicht richtig installiert. Bei Red Hat werden diese XFree86-devel* genannt, bei Debian Woody xlibs-dev und bei Debian Sarge libx11-dev. Überprüfe auch, ob die Symlinks /usr/X11 und /usr/include/X11 existieren.

F:

Erstellen unter Mac OS 10.3 führt zu vielen Linker-Fehlern

A:

Der Linker-Fehler, den du erfährst, sieht höchstwahrscheinlich etwa so aus:

ld: Undefined symbols:
_LLCStyleInfoCheckForOpenTypeTables referenced from QuartzCore expected to be defined in ApplicationServices
_LLCStyleInfoGetUserRunFeatures referenced from QuartzCore expected to be defined in ApplicationServices

Dieses Problem ist das Ergebnis der Tatsache, dass Apple-Entwickler 10.4 benutzen, um ihre Software zu compilieren und gleichzeitig die Binärdateien via Softwareupdate an Benutzer von 10.3 weitergeben. Die undefinierten Symbole sind präsent unter Mac OS 10.4, jedoch nicht unter 10.3. Eine Lösung kann sein, ein Downgrade zu QuickTime 7.0.1 durchzuführen. Hier ist eine bessere Lösung:

Besorg dir eine ältere Kopie des Frameworks. Dies liefert dir eine komprimierte Datei, die die Frameworks QuickTime 7.0.1 und QuartzCore 10.3.9 enthält.

Extrahiere die Dateien irgendwohin außerhalb deines System-Ordners (installiere diese Frameworks also nicht nach z.B. /System/Library/Frameworks! Die Benutzung dieser älteren Kopie ist nur dazu da, die Linker-Fehler zu umgehen!)

gunzip < CompatFrameworks.tgz | tar xvf - 

In der Datei config.mak solltest du -F/Pfad/in/den/du/entpackt/hast der Variable OPTFLAGS anhängen. Wenn du X-Code verwendest, kannst du dieses Framework an Stelle der systemeigenen auswählen.

Die resultierende MPlayer-Binärdatei wird in der Tat das auf deinem System einstallierte Framework verwenden, wobei dynamische Verknüpfungen verwendet werden, die zur Laufzeit aufgelöst werden. (Du kannst das mit otool -l verifizieren).

8.3. Allgemeine Fragen

F: Gibt es für MPlayer irgendwelche Mailing-Listen?
F: Ich habe einen fiesen Fehler gefunden, als ich versucht habe, mein Lieblingsvideo abzuspielen. Wen soll ich darüber informieren?
F: Ich habe Probleme beim Abspielen von Dateien mit dem ...-Codec. Kann ich sie verwenden?
F: Wenn ich die Wiedergabe starte, bekomme ich diese Mitteilung, es scheint aber alles in Ordnung zu sein: Linux RTC init: ioctl (rtc_pie_on): Permission denied
F: Wie kann ich einen Screenshot machen?
F: Was bedeuten die Zahlen der Statuszeile?
F: Es gibt Fehlermeldungen, die sagen, dass eine Datei nicht gefunden wurde: /usr/local/lib/codecs/ ...
F: Wie kann ich dafür sorgen, dass sich MPlayer die Optionen merkt, die ich für eine bestimmte Datei wie zum Beispiel movie.avi verwende?
F: Untertitel sind sehr schick, die schönsten, die ich je gesehen haben, aber sie verlangsamen die Wiedergabe! Ich weiß, es ist unwahrscheinlich...
F: Ich kann nicht auf das GUI-Menü zugreifen! Ich mache einen Rechtsklick, aber ich kann auf keine Menüeinträge zugreifen!
F: Wie kann ich MPlayer im Hintergrund ausführen?

F:

Gibt es für MPlayer irgendwelche Mailing-Listen?

A:

Ja. Siehe den Abschnitt Mailing-Listen unserer Homepage.

F:

Ich habe einen fiesen Fehler gefunden, als ich versucht habe, mein Lieblingsvideo abzuspielen. Wen soll ich darüber informieren?

A:

Bitte lies die Richtlinien zum Berichten von Fehlern und folge den Anweisungen.

F:

Ich habe Probleme beim Abspielen von Dateien mit dem ...-Codec. Kann ich sie verwenden?

A:

Überprüfe den Codec-Status, wenn der deinen Codec nicht enthält, lies das Win32 Codec HOWTO und kontaktiere uns.

F:

Wenn ich die Wiedergabe starte, bekomme ich diese Mitteilung, es scheint aber alles in Ordnung zu sein:

Linux RTC init: ioctl (rtc_pie_on): Permission denied

A:

Du benötigst einen speziell konfigurierten Kernel, um den neuen Zeitgebercode benützen zu können. Für Details siehe Abschnitt RTC der Dokumentation.

F:

Wie kann ich einen Screenshot machen?

A:

Du musst einen Videoausgabetreiber verwenden, der kein Overlay benutzt, um einen Screenshot machen zu können. Unter X11 wird -vo x11 reichen, unter Windows funktioniert -vo directx:noaccel.

Alternativ kannst du MPlayer mit dem screenshot-Videofilter starten (-vf screenshot) und dann s drücken, um einen Screenshot zu machen.

F:

Was bedeuten die Zahlen der Statuszeile?

A:

Beispiel:

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

Audioposition in Sekunden

V: 2.2

Videoposition in Sekunden

A-V: -0.167

Audio-Video-Unterschied in Sekunden (Verzögerung)

ct: 0.042

insgesamt abgearbeitete A/V-Synchronisation

57/57

wiedergegebene/decodierte Frames (zählend vom letzten Spulen)

41%

CPU-Auslastung durch Videocodec (für Rendern in Scheiben und direktes Rendern schließt dies video_out mit ein)

0%

CPU-Auslastung durch video_out

2.6%

CPU-Auslastung durch Audiocodec in Prozent

0

wieviele Frames ausgelassen wurden, um die A/V-Synchronisation beizubehalten

4

aktuelles Postprocessing-Level (bei Benutzung der Option -autoq)

49%

aktuell benutzte Cachegröße (um die 50% ist normal)

1.00x

Wiedergabegeschwindigkeit als Faktor der originalen Geschwindigkeit

Die meisten davon existieren zu Debugzwecken, benutze die Option -quiet, um sie verschwinden zu lassen. Eventuell fällt dir auf, dass die CPU-Auslastung durch video_out bei manchen Dateien null (0%) ist. Dies liegt daran, dass es direkt vom Codec aufgerufen wird und nicht gemessen werden kann. Wenn du die video_out-Geschwindigkeit wissen möchtest, vergleiche den Unterschied beim Abspielen mit -vo null und deinem normalen Videoausgabetreiber.

F:

Es gibt Fehlermeldungen, die sagen, dass eine Datei nicht gefunden wurde: /usr/local/lib/codecs/ ...

A:

Lade die Binärcodecs von unserer Codecs-Seite herunter und installiere sie.

F:

Wie kann ich dafür sorgen, dass sich MPlayer die Optionen merkt, die ich für eine bestimmte Datei wie zum Beispiel movie.avi verwende?

A:

Erstelle eine Datei namens movie.avi.conf mit den dateispezifischen Optionen darin und lege sie im Verzeichnis ~/.mplayer oder im selben Verzeichnis, in der sich auch die Datei befindet, ab.

F:

Untertitel sind sehr schick, die schönsten, die ich je gesehen haben, aber sie verlangsamen die Wiedergabe! Ich weiß, es ist unwahrscheinlich...

A:

Editiere die Datei config.h nach dem Ausführen von ./configure und ersetze #undef FAST_OSD durch #define FAST_OSD. Compiliere dann erneut.

F:

Ich kann nicht auf das GUI-Menü zugreifen! Ich mache einen Rechtsklick, aber ich kann auf keine Menüeinträge zugreifen!

A:

Benutzt du FVWM? Versuche folgendes:

  1. StartSettingsConfigurationBase Configuration

  2. Setze Use Applications position hints auf Ja

F:

Wie kann ich MPlayer im Hintergrund ausführen?

A:

Benutze:

mplayer Optionen dateiname < /dev/null &

8.4. Probleme bei der Wiedergabe

F: Ich kann den Grund für ein merkwürdiges Wiedergabeproblem nicht festnageln.
F: Wie schaffe ich es, dass Untertitel auf den schwarzen Rändern um einen Film erscheinen?
F: Wie kann ich Audio-/Untertitel-Spuren einer DVD, einer OGM-, Matroska oder NUT-Datei auswählen?
F: Ich versuche, einen zufälligen Stream vom Internet abspielen, aber es funktioniert nicht.
F: Ich habe einen Film aus einem P2P-Netzwerk runtergeladen, aber er funktioniert nicht!
F: Ich habe Probleme dabei, die Untertitel anzeigen zu lassen, Hilfe!!
F: Warum funktioniert MPlayer auf Fedora Core nicht?
F: MPlayer bricht ab mit MPlayer interrupted by signal 4 in module: decode_video
F: Wenn ich versuche, von meinem Empfänger zu lesen, funktioniert das zwar, aber die Farben sehen komisch aus. Mit anderen Anwendungen funktioniert es.
F: Ich bekomme sehr merkwürdige Prozentangaben (viel zu hoch), wenn ich Dateien auf meinem Notebook abspiele.
F: Die Audio-/Videosynchronisation geht total verloren, wenn ich MPlayer als root auf meinem Notebook starte. Als normaler Benutzer funktioniert es normal.
F: Bei der Wiedergabe eines Films wird dieser plötzlich rucklig, und ich bekomme folgende Nachricht: Schlecht interleavte AVI-Datei erkannt, wechsele in den -ni Modus!

F:

Ich kann den Grund für ein merkwürdiges Wiedergabeproblem nicht festnageln.

A:

Hast du eine übriggebliebene codecs.conf-Datei in ~/.mplayer/, /etc/, /usr/local/etc/ oder einem ähnlichen Ort? Entferne sie, eine veraltete codecs.conf-Datei kann obskure Probleme verursachen und ist nur für Entwickler zum Zwecke der Codecunterstützung gedacht. Sie überschreibt die internen Codeceinstellungen von MPlayer und wird großes Chaos anrichten, wenn in neueren Programmversionen inkompatible Änderungen gemacht wurden. Wenn die nicht gerade von Experten genutzt wird, ist sie ein Rezept für Disaster, die in Form von scheinbar zufälligen und schwer lokalisierbaren Abstürzen und Wiedergabeproblemen auftreten. Wenn du sie noch irgendwo in deinem System hast, solltest du sie jetzt entfernen.

F:

Wie schaffe ich es, dass Untertitel auf den schwarzen Rändern um einen Film erscheinen?

A:

Benutze den Videofilter expand, um den Bereich zu vergrößern, auf dem der Film vertikal dargestellt wird, und platziere den Film am oberen Rand, zum Beispiel:

mplayer -vf expand=0:-100:0:0 -slang de dvd://1

F:

Wie kann ich Audio-/Untertitel-Spuren einer DVD, einer OGM-, Matroska oder NUT-Datei auswählen?

A:

Du musst die Option -aid (Audio-ID) oder -alang (Audiosprache), -sid (Untertitel-ID) oder -slang (Untertitelsprache) verwenden, zum Beispiel:

mplayer -alang ger -slang ger beispiel.mkv
mplayer -aid 1 -sid 1 beispiel.mkv

Um zu sehen, welche verfügbar sind:

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

F:

Ich versuche, einen zufälligen Stream vom Internet abspielen, aber es funktioniert nicht.

A:

Versuche, den Stream mit der Option -playlist abzuspielen.

F:

Ich habe einen Film aus einem P2P-Netzwerk runtergeladen, aber er funktioniert nicht!

A:

Deine Datei ist höchstwahrscheinlich kaputt oder Fake. Wenn du sie von einem Freund hast, und er sagt, dass sie funktioniert, versuche, die md5sum-Hashes zu vergleichen.

F:

Ich habe Probleme dabei, die Untertitel anzeigen zu lassen, Hilfe!!

A:

Stelle sicher, dass du die Schriften ordnungsgemäß installiert hast. Gehe nochmal die Schritte im Teil Schriften und OSD des Installationsabschnitts durch. Wenn du TrueType-Schriften verwendest, stelle sicher, dass die FreeType-Bibliothek installiert ist. Andere Dinge schließen die Überprüfung deiner Untertitel in einem Texteditor oder mit anderen Playern ein. Versuche auch, sie in ein anderes Format zu konvertieren.

F:

Warum funktioniert MPlayer auf Fedora Core nicht?

A:

Die Interaktion zwischen Fedora-basiertem exec-shield, prelink und jeglicher Anwendung, die Windows-DLLs benutzt (so wie MPlayer), ist schlecht.

Das Problem ist, dass exec-shield die Adressen des Ladens aller Systembibliotheken randomisiert. Diese Randomisierung geschieht zur prelink-Zeit (einmal alle zwei Wochen).

Wenn MPlayer versucht, eine Windows-DLL zu laden, möchte er diese an einer bestimmten Adresse (0x400000) ablegen. Wenn dort schon eine wichtige Systembibliothek liegt, wird MPlayer abstürzen. (Ein typisches Symptom wäre eine Speicherzugriffsverletzung bei dem Versuch, Windows Media 9 Dateien abzuspielen.)

Wenn du dieses Problem hast, gibt es für dich zwei Optionen:

  • Warte zwei Wochen. Danach könnte es wieder funktionieren.

  • Linke alle Binärdateien auf deinem System mit geänderten prelink-Optionen neu. Hier sind Schritt-für-Schritt-Anweisungen:

    1. Editiere /etc/syconfig/prelink und ändere

      PRELINK_OPTS=-mR

      zu

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

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

    3. /etc/cron.daily/prelink (Dies linkt alle Anwendungen neu und dauert ne ganze Weile.)

    4. execstack -s /Pfad/zu/mplayer (Dies schaltet exec-shield für die MPlayer-Binärdatei ab.)

F:

MPlayer bricht ab mit

MPlayer interrupted by signal 4 in module: decode_video

A:

Benutze MPlayer nicht auf einer CPU, die sich von der, auf der er compiliert wurde, unterscheidet, oder compiliere ihn neu mit Erkennung der CPU zur Laufzeit (./configure --enable-runtime-cpudetection).

F:

Wenn ich versuche, von meinem Empfänger zu lesen, funktioniert das zwar, aber die Farben sehen komisch aus. Mit anderen Anwendungen funktioniert es.

A:

Deine Karte gibt vermutlich manche Farbräume als unterstützt an, obwohl sie diese tatsächlich nicht unterstützt. Versuche es mit YUY2 anstatt der Standardeinstellung YV12 (siehe Abschnitt TV).

F:

Ich bekomme sehr merkwürdige Prozentangaben (viel zu hoch), wenn ich Dateien auf meinem Notebook abspiele.

A:

Das ist ein Effekt des Power Managements / Energiesparmodus deines Notebooks (BIOS, nicht Kernel). Stecke die externe Stromversorgung ein, bevor du dein Notebook anschaltest. Du kannst auch probieren, ob dir cpufreq (eine SpeedStep-Schnittstelle für Linux) weiterhilft.

F:

Die Audio-/Videosynchronisation geht total verloren, wenn ich MPlayer als root auf meinem Notebook starte. Als normaler Benutzer funktioniert es normal.

A:

Dies ist wieder ein Power Management-Effekt (siehe oben). Stecke die externe Stromversorgung ein, bevor du dein Notebook anschaltest, oder probieren die Option -nortc.

F:

Bei der Wiedergabe eines Films wird dieser plötzlich rucklig, und ich bekomme folgende Nachricht:

Schlecht interleavte AVI-Datei erkannt, wechsele in den -ni Modus!

A:

Schlecht interleavte Dateien und -cache funktionieren nicht gut zusammen. Probiere -nocache.

8.5. Video-/Audiotreiberprobleme (vo/ao)

F: Wenn ich den den Vollbildmodus wechsele, bekomme ich nur schwarze Rahmen um das Bild und keine wirkliche Skalierung auf Vollbildmodus.
F: Ich habe MPlayer gerade installiert. Wenn ich eine Videodatei öffnen möchte, verursacht dies einen fatalen Fehler: Fehler beim Öffnen/Initialisieren des ausgewählten Videoausgabetreibers (-vo). Wie kann ich mein Problem lösen?
F: Ich habe Probleme mit [dein Fenstermanager] und Vollbildmodi bei xv/xmga/sdl/x11 ...
F: Die Audiosynchronisation geht beim Abspielen einer AVI-Datei verloren.
F: Mein Computer spielt MS DivX AVIs mit Auflösungen ~ 640x300 und Stereo-MP3-Ton zu langsam. Wenn ich die Option -nosound verwende, ist alles ok (aber still).
F: Wie kann ich dmix mit MPlayer benutzen?
F: Ich habe keinen Ton, wenn ich ein Video abspielen möchte, und bekomme Fehlermeldungen wie diese: 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: kein Ton!!! Starte Wiedergabe...
F: Beim Start von MPlayer unter KDE bekomme ich nur ein schwarzes Bild, und nichts geschieht. Nach ungefähr einer Minute beginnt die Wiedergabe.
F: Ich habe A/V-Synchronisationsprobleme. Manche meiner AVIs werden gut wiedergegeben, manche aber mit doppelter Geschwindigkeit!
F: Wenn ich diesen Film abspiele, bekomme ich Audio/Video-Desynchronisation und/oder MPlayer stürzt mit folgender Nachricht ab: DEMUXER: Zu viele (945 in 8390980 bytes) Videopakete im Puffer!
F: Wie kann ich die A/V-Desynchronisation beim Spulen durch RealMedia-Streams loswerden?

F:

Wenn ich den den Vollbildmodus wechsele, bekomme ich nur schwarze Rahmen um das Bild und keine wirkliche Skalierung auf Vollbildmodus.

A:

Dein Videoausgabetreiber unterstützt keine Hardwareskalierung, und da Skalierung in Software unglaublich langsam sein kann, aktiviert MPlayer diese nicht automatisch. Höchstwahrscheinlich benutzt du den Videoausgabetreiber x11 anstelle von xv. Versuche, -vo xv zur Kommandozeile hinzuzufügen oder lies den Abschnitt Video, um mehr über alternative Videoausgabetreiber zu erfahren. Die Option -zoom aktiviert Softwareskalierung explizit.

F:

Ich habe MPlayer gerade installiert. Wenn ich eine Videodatei öffnen möchte, verursacht dies einen fatalen Fehler:

Fehler beim Öffnen/Initialisieren des ausgewählten Videoausgabetreibers (-vo).

Wie kann ich mein Problem lösen?

A:

Ändere einfach dein Videoausgabegerät. Führe den folgenden Befehl aus, um eine Liste aller verfügbaren Videoausgabetreiber zu erhalten:

mplayer -vo help

Nachdem du den richtigen Videoausgabetreiber gewählt hast, füge ihn deiner Konfigurationsdatei hinzu. Füge

vo = gewählter_vo

zu ~/.mplayer/config und/oder

vo_driver = gewählter_vo

zu ~/.mplayer/gui.conf hinzu.

F:

Ich habe Probleme mit [dein Fenstermanager] und Vollbildmodi bei xv/xmga/sdl/x11 ...

A:

Lies die Richtlinien zum Berichten von Fehlern und schicke uns einen ordnungsgemäßen Fehlerbericht. Probiere auch, mit der Option -fstype zu experimentieren.

F:

Die Audiosynchronisation geht beim Abspielen einer AVI-Datei verloren.

A:

Probiere die Option -bps oder -nobps. Wenn dies nichts verbessert, lies die Richtlinien zum Berichten von Fehlern und lade die Datei zum FTP hoch.

F:

Mein Computer spielt MS DivX AVIs mit Auflösungen ~ 640x300 und Stereo-MP3-Ton zu langsam. Wenn ich die Option -nosound verwende, ist alles ok (aber still).

A:

Deine Maschine ist zu langsam, oder dein Soundkartentreiber ist kaputt. Konsultiere die Dokumentation, um herauszufinden, wie du die Performance verbessern kannst.

F:

Wie kann ich dmix mit MPlayer benutzen?

A:

Nachdem du asoundrc konfiguriert hast, musst du -ao alsa:device=dmix benutzen.

F:

Ich habe keinen Ton, wenn ich ein Video abspielen möchte, und bekomme Fehlermeldungen wie diese:

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: kein Ton!!!
Starte Wiedergabe...

A:

Läuft bei dir KDE oder GNOME mit dem aRts- oder ESD-Sounddämon? Versuche, den Sounddämon zu deaktivieren oder benutze die Option -ao arts oder -ao esd, damit MPlayer aRts oder ESD benutzt. Vielleicht läuft bei dir auch ALSA ohne OSS-Emulation. Versuche die ALSA OSS-Kernelmodule zu laden oder füge -ao alsa deiner Kommandozeile hinzu, um den ALSA-Audioausgabetreiber direkt zu verwenden.

F:

Beim Start von MPlayer unter KDE bekomme ich nur ein schwarzes Bild, und nichts geschieht. Nach ungefähr einer Minute beginnt die Wiedergabe.

A:

Der aRts-Sounddämon von KDE blockiert das Audiogerät. Warte entweder, bis das Video startet oder deaktiviere den aRts-Dämon im Kontrollzentrum. Wenn du aRts-Sound benutzen möchtest, weise die Audioausgabe durch unseren nativen aRts-Audiotreiber an (-ao arts). Wenn dies fehlschlägt oder nicht eincompiliert ist, probiere SDL (-ao sdl) und stelle sicher, dass dein SDL aRts-Sound verarbeiten kann. Eine weitere Option ist, MPlayer mit artsdsp zu starten.

F:

Ich habe A/V-Synchronisationsprobleme. Manche meiner AVIs werden gut wiedergegeben, manche aber mit doppelter Geschwindigkeit!

A:

Deine Soundkarte oder der Soundtreiber ist fehlerhaft. Höchstwahrscheinlich ist das bei 44100Hz behoben, und du versuchst, eine Datei wiederzugeben, die 22050Hz-Audio enthält. Probiere den Audiofilter resample.

F:

Wenn ich diesen Film abspiele, bekomme ich Audio/Video-Desynchronisation und/oder MPlayer stürzt mit folgender Nachricht ab:

DEMUXER: Zu viele (945 in 8390980 bytes) Videopakete im Puffer!

A:

Das kann mehrere Gründe haben.

  • Deine CPU und/oder Grafikkarte und/oder Bus ist zu langsam. MPlayer zeigt eine Nachricht an, wenn dies der Fall ist (und der Zähler der ausgelassenen Frames schnell hochzählt).

  • Viele FLV-Dateien werden nur mit -correct-pts korrekt wiedergegeben. Leider hat MEncoder diese Option nicht. Du kannst aber versuchen die -fps-Option manuell auf den richtigen Wert zu setzen, wenn du ihn kennst.

  • Wenn es ein AVI ist, handelt es sich vielleicht um schlechtes Interleaving, probiere -ni, um dies zu umgehen. Es kann sich auch um einen schlechten Header handelt, in diesem Fall kann -nobps und/oder -mc 0 helfen.

  • Dein Soundtreiber ist fehlerhaft.

F:

Wie kann ich die A/V-Desynchronisation beim Spulen durch RealMedia-Streams loswerden?

A:

-mc 0.1 kann helfen.

8.6. DVD-Wiedergabe

F: Was ist mit DVD-Navigation/-menüs?
F: Ich kann aktuelle DVDs von Sony Picutures/BMG nicht anschauen.
F: Was ist mit Untertiteln? Kann sie MPlayer darstellen?
F: Wie kann ich den Regionalcode meines DVD-Laufwerks setzen? Ich habe kein Windows!
F: Ich kann keine DVD abspielen, MPlayer hängt oder gibt "Encrypted VOB file!"-Fehler aus.
F: Muss ich (setuid) root sein, um eine DVD abzuspielen?
F: Ist es möglich, nur ausgewählte Kapitel abzuspielen bzw. zu encodieren?
F: Meine DVD-Wiedergabe ist träge!
F: Ich habe eine DVD mit vobcopy kopiert. Wie kann ich es von meiner Festplatte abspielen/encodieren?

F:

Was ist mit DVD-Navigation/-menüs?

A:

MPlayer unterstützt keine DVD-Menüs, bedingt durch ernsthafte architektonische Beschränkungen, die die Verarbeitung von stillstehenden und interaktiven Inhalten verhindert. Wenn du schicke Menüs haben möchtest, musst du einen anderen Player wie xine, vlc oder Ogle verwenden. Willst du DVD-Navigation in MPlayer sehen, musst du diese selbst implementieren, sei dir aber dessen bewusst, dass dies eine größere Aufgabe ist.

F:

Ich kann aktuelle DVDs von Sony Picutures/BMG nicht anschauen.

A:

Das ist normal; du bist betrogen worden, dir ist eine absichtlich fehlerhafte Scheibe verkauft worden. Die einzige Möglichkeite, diese DVDs anzuschauen, ist, die fehlerhaften Blöcke dieser Disc zu umgeben, indem du DVDnav anstelle von mpdvdkit2 verwendest. Dies kannst du erreichen, indem du MPlayer mit DVDnav-Unterstützung compilierst und dann auf der Kommandozeile dvd:// durch dvdnav:// ersetzst. DVDnav schließt bisher die Verwendung von mpdvdkit2 aus, stelle daher sicher, dass du dem configure-Skript --disable-mpdvdkit übergibst.

F:

Was ist mit Untertiteln? Kann sie MPlayer darstellen?

A:

Ja. Siehe Kapitel DVD.

F:

Wie kann ich den Regionalcode meines DVD-Laufwerks setzen? Ich habe kein Windows!

A:

Benutze das Tool regionset.

F:

Ich kann keine DVD abspielen, MPlayer hängt oder gibt "Encrypted VOB file!"-Fehler aus.

A:

Der Code für die CSS-Entschlüsselung funktioniert mit manchen DVD-Laufwerken nicht, wenn der Regionalcode nicht entsprechend gesetzt ist. Siehe Antwort zur vorigen Frage.

F:

Muss ich (setuid) root sein, um eine DVD abzuspielen?

A:

Nein. Du musst jedoch die entsprechenden Rechte für den DVD-Geräteeintrag (in /dev/) haben.

F:

Ist es möglich, nur ausgewählte Kapitel abzuspielen bzw. zu encodieren?

A:

Ja, probiere die Option -chapter.

F:

Meine DVD-Wiedergabe ist träge!

A:

Verwende die Option -cache (beschrieben in der Manpage) und versuche, mit dem Tool hdparm (beschrieben im Kapitel CD), DMA für das DVD-Laufwerk zu aktivieren.

F:

Ich habe eine DVD mit vobcopy kopiert. Wie kann ich es von meiner Festplatte abspielen/encodieren?

A:

Benutze die Option -dvd-device, um auf das Verzeichnis zu zeigen, das die Dateien enthält:

mplayer dvd://1 -dvd-device /Pfad/zum/Verzeichnis

8.7. Feature-Anfragen

F: Wenn MPlayer gerade pausiert und ich versuche zu spulen oder eine andere Taste drücke, hört der Pausezustand auf. Ich würde gern in einem pausierten Film spulen.
F: Ich möchte +/- 1 Frame anstatt 10 Sekunden spulen.

F:

Wenn MPlayer gerade pausiert und ich versuche zu spulen oder eine andere Taste drücke, hört der Pausezustand auf. Ich würde gern in einem pausierten Film spulen.

A:

Dies ist recht verzwickt zu implementieren, ohne dabei A/V-Synchronisation zu verlieren. Alle Versuche sind bisher fehlgeschlagen, Patches sind aber willkommen.

F:

Ich möchte +/- 1 Frame anstatt 10 Sekunden spulen.

A:

Du kannst jeweils einen Frame vorwärtsgehen durch Drücken von .. Wenn der Film nicht pausiert war, wird er danach pausiert (siehe Manpage für Details). Rückwärts gehen zu können wird in naher Zukunft vermutlich nicht implementiert.

8.8. Encodierung

F: Wie kann ich encodieren?
F: Wie kann ich eine komplette DVD in eine Datei schreiben (dumpen)?
F: Wie kann ich (S)VCDs automatisch erstellen?
F: Wie kann ich (S)VCDs erstellen?
F: Wie kann ich zwei Videodateien zusammenfügen?
F: Wie kann ich AVI-Dateien mit kaputtem Index oder schlechtem Interleaving reparieren?
F: Wie kann ich das Seitenverhältnis einer AVI-Datei reparieren?
F: Wie kann ich ein Backup machen und eine VOB-Datei mit kaputtem Anfang encodieren?
F: Ich kann keine DVD-Untertitel in AVI encodieren!
F: Wie kann ich nur ausgewählte Kapitel einer DVD encodieren?
F: Ich versuche, mit Dateien der Größe 2GB+ auf einem VFAT-Dateisystem zu arbeiten. Klappt das?
F: Was bedeuten die Zahlen der Statuszeile während der Encodierung?
F: Warum ist die von MEncoder ausgegebene empfohlene Bitrate negativ?
F: Ich kann eine ASF-Datei nicht zu AVI/MPEG-4 (DivX) konvertieren, da sie 1000 fps verwendet.
F: Wie kann ich Untertitel in die Ausgabedatei packen?
F: Wie kann ich nur Ton von einem Musikvideo encodieren?
F: Warum versagen third-party-Player bei dem Versuch, MPEG-4-Filme abzuspielen, die von MEncoder-Versionen nach 1.0pre7 erstellt wurden?
F: Wie kann ich eine Datei encodieren, die nur Ton enthält?
F: Wie kann ich in AVI eingebettete Untertitel wiedergegeben?
F: MPlayer kann nicht...

F:

Wie kann ich encodieren?

A:

Lies den Abschnitt MEncoder.

F:

Wie kann ich eine komplette DVD in eine Datei schreiben (dumpen)?

A:

Hast du einmal deinen Titel ausgewählt und sichergestellt, dass MPlayer ihn richtig abspielt, benutze die Option -dumpstream. Zum Beispiel wird

mplayer dvd://5 -dumpstream -dumpfile dvd_dump.vob

den fünften Titel der DVD in die Datei dvd_dump.vob schreiben.

F:

Wie kann ich (S)VCDs automatisch erstellen?

A:

Probiere das Script mencvcd.sh aus dem Unterverzeichnis TOOLS. Damit kannst du DVDs oder andere Filme automatisch ins VCD- oder SVCD-Format encodieren und sogar direkt auf CD brennen.

F:

Wie kann ich (S)VCDs erstellen?

A:

Neuere Versionen von MEncoder können MPEG-2-Dateien direkt erstellen, die als Basis zur Erstellung einer VCD oder SVCD benutzt werden können. Sie können vermutlich direkt auf allen Plattformen abgespielt werden (zum Beispiel, um ein Video eines digitalen Camcorders mit Freunden zu teilen, die sich nicht so gut mit Computern auskennen). Bitte lies Verwendung von MEncoder zur Erstellung VCD/SVCD/DVD-kompatiblen Dateien für weitere Details.

F:

Wie kann ich zwei Videodateien zusammenfügen?

A:

MPEG-Dateien können mit Glück zu einer einzelnen Datei zusammengefügt werden. Für AVI-Dateien kannst du die Unterstützung von MEncoder für mehrere Dateien folgendermaßen verwenden:

mencoder -ovc copy -oac copy -o out.avi datei1.avi datei2.avi

Das funktioniert jedoch nur für Dateien, die das gleiche Format haben und denselben Codec verwenden. Du kannst außerdem avidemux und avimerge (Teil von transcode) verwenden.

F:

Wie kann ich AVI-Dateien mit kaputtem Index oder schlechtem Interleaving reparieren?

A:

Um zu vermeiden, dass du -idx für das Spulen in AVI-Dateien mit kaputtem Index oder -ni für die Wiedergabe von AVIs mit schlechtem Interleaving verwenden musst, benutze den Befehl

mencoder input.avi -idx -ovc copy -oac copy -o output.avi

um Video- und Audiostreams in eine neue AVI-Datei zu kopieren, wobei der Index neu generiert wird und das Interleaving korrigiert wird. Natürlich kann dies nicht mögliche Fehler in Video- und/oder Audiostreams reparieren.

F:

Wie kann ich das Seitenverhältnis einer AVI-Datei reparieren?

A:

Du kannst so etwas dank der Option -force-avi-aspect von MEncoder tun, die das im AVI OpenDML vprp Header gespeicherte Seitenverhältnis überschreibt. Zum Beispiel:

mencoder input.avi -ovc copy -oac copy -o output.avi -force-avi-aspect 4/3

F:

Wie kann ich ein Backup machen und eine VOB-Datei mit kaputtem Anfang encodieren?

A:

Das Hauptproblem bei der Encodierung einer kaputten [3] VOB-Datei besteht darin, dass es schwierig ist, eine Encodierung mit perfekter A/V-Synchronisation zu erhalten. Eine Umgehung des Problems ist, den kaputten Teil abzuschneiden und nur den sauberen Teil zu encodieren. Zuerst musst du herausfinden, wo der saubere Teil beginnt:

mplayer input.vob -sb nr_der_zu_überspringenden_Bytes

Dann kannst du eine neue Datei anlegen, die nur den sauberen Teil enthält:

dd if=input.vob of=output_geschnitten.vob skip=1 ibs=nr_der_zu_überspringenden_Bytes

F:

Ich kann keine DVD-Untertitel in AVI encodieren!

A:

Du musst die Option -sid richtig angeben.

F:

Wie kann ich nur ausgewählte Kapitel einer DVD encodieren?

A:

Benutze die Option -chapter korrekt, wie: -chapter 5-7.

F:

Ich versuche, mit Dateien der Größe 2GB+ auf einem VFAT-Dateisystem zu arbeiten. Klappt das?

A:

Nein, VFAT unterstützt keine Dateien größer als 2GB.

F:

Was bedeuten die Zahlen der Statuszeile während der Encodierung?

A:

Beispiel:

Pos: 264.5s   6612f ( 2%)  7.12fps Trem: 576min 2856mb  A-V:0.065 [2126:192]

Pos: 264.5s

Zeitposition im encodieren Stream

6612f

Anzahl der encodieren Frames

( 2%)

Teil des Eingabestreams, der encodiert wurde

7.12fps

Encodiergeschwindigkeit

Trem: 576min

geschätzte verbleibende Encodierzeit

2856mb

geschätzte Größe der endgültigen Encodierung

A-V:0.065

momentane Verzögerung zwischen Audio- und Videostreams

[2126:192]

durchschnittliche Videobitrate (in kb/s) und durchschnittliche Audiobitrate (in kb/s)

F:

Warum ist die von MEncoder ausgegebene empfohlene Bitrate negativ?

A:

Da die Bitrate, mit der du den Ton encodiert hast, zu groß ist, dass der Film auf eine CD zu passt. Überprüfe, ob du libmp3lame ordentlich installiert hast.

F:

Ich kann eine ASF-Datei nicht zu AVI/MPEG-4 (DivX) konvertieren, da sie 1000 fps verwendet.

A:

Da ASF eine variable Framerate verwendet, AVI jedoch nur feste, musst du die Option -ofps manuell setzen.

F:

Wie kann ich Untertitel in die Ausgabedatei packen?

A:

Übergib einfach -sub <dateiname> (oder -sid, respektive) an MEncoder.

F:

Wie kann ich nur Ton von einem Musikvideo encodieren?

A:

Dies ist nicht direkt möglich, du kannst aber folgendes probieren (beachte das & am Ende des mplayer-Befehls):

mkfifo encode
mplayer -ao pcm -aofile encode dvd://1 &
lame deine Optionen encode music.mp3
rm encode

Dies erlaubt dir, jeden Encoder zu verwenden, nicht nur LAME. Ersetze im obigen Befehl einfach lame durch den Audioencoder deiner Wahl.

F:

Warum versagen third-party-Player bei dem Versuch, MPEG-4-Filme abzuspielen, die von MEncoder-Versionen nach 1.0pre7 erstellt wurden?

A:

libavcodec, die native MPEG-4-Encodierungsbibliothek, die normalerweise mit MEncoder verfügbar ist, pflegte den FourCC bei der Encodierung von MPEG-4-Video auf 'DIVX' zu setzen (der FourCC ist ein AVI-Tag, der die Software angibt, die für die Encodierung benutzt wurde, und bestimmt, welche Software zur Decodierung des Videos verwendet werden soll). Dies hat viele Menschen dazu veranlasst zu denken, dass libavcodec eine DivX-Encodierungsbibliothek ist, während es sich um eine MPEG-4-Encodierungsbibliothek handelt, die den MPEG-4-Standard wesentlich besser implementiert, als das DivX tut. Daher ist der neue Standard-FourCC von libavcodec 'FMP4', du kannst dieses Verhalten jedoch mit der MEncoder-Option -ffourcc überschreiben. Du kannst den FourCC existierender Dateien auf dieselbe Weise ändern:

mencoder input.avi -o output.avi -ffourcc XVID

Beachte, dass dies den FourCC auf XVID anstelle von DIVX ändert. Dies wird empfohlen, da der FourCC DIVX DivX4 bedeutet, welcher ein sehr einfacher MPEG-4-Codec ist, während DX50 und XVID für volles MPEG-4 (ASP) stehen. Wenn du den FourCC auf DIVX änderst, kann es daher dazu kommen, dass manch schlechte Software oder Hardware-Player bei manchen fortgeschrittenen Features, die libavcodec unterstützt, DivX aber nicht, ins Stocken geraten; andererseits liegt Xvid im Sinne der Funktionalität näher an libavcodec und wird von allen anständigen Playern unterstützt.

F:

Wie kann ich eine Datei encodieren, die nur Ton enthält?

A:

Benutze aconvert.sh vom Unterverzeichnis TOOLS im MPlayer-Sourcenbaum.

F:

Wie kann ich in AVI eingebettete Untertitel wiedergegeben?

A:

Benutze avisubdump.c vom Unterverzeichnis TOOLS oder lies diese Dokument über Extraktion/Demultiplexing von Untertiteln in OpenDML AVI-Dateien.

F:

MPlayer kann nicht...

A:

Schau mal ins Unterverzeichnis TOOLS für eine Sammlung verschiedener Skripts und Hacks. TOOLS/README enthält Dokumentation.



[3] Zu einem gewissen Maß können bei DVDs verwendete Kopierschutzmaßnahmen als korrupter Inhalt verstanden werden.

Anhang A. Wie Fehler (Bugs) berichtet werden

Gute Fehlerberichte sind ein sehr wertvoller Beitrag zur Entwicklung jedes Softwareprojekts. Aber genau wie das Schreiben guter Software erfordert das Anfertigen von Problemberichten etwas Arbeit. Bitte sei dir darüber im klaren, dass die meisten Entwickler sehr beschäftigt sind und eine unverschämt hohe Anzahl Mails bekommen. Verstehe daher, dass wir dir, obwohl dein Feedback für die Verbesserung von MPlayer sehr wichtig ist und geschätzt wird, alle Informationen, die wir fordern, zur Verfügung stellen und dass du die Anweisungen dieses Dokuments strikt befolgen musst.

A.1. Berichte sicherheitsrelevante Fehler

Falls du einen Exploit-fähigen Fehler gefunden hast und gern das richtige tun möchtest und uns diesen beseitigen lässt, bevor du ihn veröffentlichst, würden wir uns freuen, deinen Rat zur Sicherheit unter [email protected] zu erhalten. Füge dem Betreff bitte [SECURITY] oder [ADVISORY] hinzu. Stelle bitte sicher, dass dein Bericht eine vollständige und detaillierte Analyse des Fehlers enthält. Die Einsendung einer Lösung nehmen wir sehr gerne dankend an. Bitte zögere deinen Bericht nicht hinaus, um einen Proof-of-concept-Exploit zu schreiben, den kannst du in einer weiteren Mail schicken.

A.2. Wie Fehler beseitigt werden

Wenn du das Gefühl hast, dass du die nötigen Kenntnisse hast, bist du dazu eingeladen, dich selbst an der Lösung des Fehlers zu versuchen. Vielleicht hast du das schon? Bitte lies dieses kurze Dokument, um herauszufinden, wie dein Code Teil von MPlayer werden kann. Die Leute der Mailing-Liste MPlayer-dev-eng werden dir zur Seite stehen, wenn du Fragen hast.

A.3. Wie Regressionstests mit Subversion durchgeführt werden

Ein Problem, das manchmal auftreten kann ist "es hat vorher funktioniert, jetzt tut es das nicht mehr...". Hier eine Schritt-für-Schritt-Verfahren, um herauszufinden, wann das Problem aufgetreten ist. Dies ist nichts für Gelegenheitsanwender.

Zuerst musst du dir MPlayers Sourcenverzeichnis aus dem Subversion-Repository besorgen. Eine Anleitung hierzu findest du im Subversion-Abschnitt der Downloadseite.

Du wirst dann im mplayer/-Verzeichnis ein Abbild des Subversion-Baums auf der Client-Seite haben. Führe jetzt ein Update für dieses Abbild auf das von dir gewünschte Datum durch:

cd mplayer/
svn update -r {"2004-08-23"}

Das Datumsformat ist YYYY-MM-DD HH:MM:SS. Die Benutzung des Datumsformats stellt sicher, dass du in der Lage sein wirst, Patches anhand des Datums, an dem sie eingespielt wurden, extrahieren kannst, wie im MPlayer-cvslog-Archiv.

Gehe nun wie bei einem normalen Update vor:

./configure
make

Falls ein Nicht-Programmierer dies liest: Der schnellste Weg, zu dem Punkt zu gelangen, bei dem das Problem auftrat ist eine Binärsuche - das bedeutet: Suche das Datum der Bruchstelle, indem du das Suchintervall wiederholt halbierst. Zum Beispiel, wenn das Problem 2003 auftrat, starte in der Mitte des Jahres und frage "Ist das Problem schon da?". Wenn ja, gehe zurück zum 1. April; wenn nicht, gehe zum 1. Oktober und so weiter.

Wenn du viel Festplattenspeicher frei hast (eine vollständige Compilierung benötigt momentan 100 MB, und ungefähr 300-350 MB, wenn Debugging-Symbole mit dabei sind), kopiere vor einem Update die älteste Version, von der bekannt ist, dass sie funktioniert; das spart Zeit, wenn du zurückgehen musst. (Es ist normalerweise nicht nötig, 'make distclean' vor einer erneuten Compilierung einer früheren Version auszuführen. Wenn du also keine Backup-Kopie deines Original-Sourcebaums machst, wirst du alles neu compilieren müssen, wenn du beim gegenwärtigen wieder angekommen bist.)

Wenn du den Tag gefunden hast, an dem das Problem auftrat, fahre mit der Suche mit dem mplayer-cvslog-Archiv (sortiert nach Datum) und einem genaueren svn update, welches Stunde, Minute und Sekunde beinhaltet, fort:

svn update -r {"2004-08-23 15:17:25"}

Dies wird es dir leicht machen, exakt den verursachenden Patch zu finden.

Hast du den Patch gefunden, der Ursache des Problems ist, hast du fast gewonnen; Berichte darüber im MPlayer Bugzilla-System oder melde dich bei MPlayer-Users an und mach es dort bekannt. Es besteht die Chance, dass der Autor einspringt und eine Lösung vorschlägt. Du kannst auch solange einen genauen Blick auf den Patch werfen, bis er genötigt ist, zu offenbaren, wo der Fehler steckt :-).

A.4. Wie Fehler berichtet werden

Probiere vor allem zu allererst die letzte Subversion-Version von MPlayer, da dein Problem dort möglicherweise schon behoben ist. Die Entwicklung geht extrem schnell voran, die meisten Probleme in offiziellen Versionen werden innerhalb von Tagen oder sogar Stunden den Entwicklern mitgeteilt. Benutze daher bitte nur Subversion beim Berichten von Fehlern. Dies gilt auch für Binärpakete von MPlayer. Subversion-Anweisungen findest du am unteren Ende dieser Seite oder in der README. Wenn dies nicht hilft, ziehe den Rest der Dokumentation zu Rate. Ist dein Problem nicht bekannt oder kann es durch unsere Anweisungen nicht gelöst werden, dann teil uns den Fehler mit.

Sende bitte keine Fehlerberichte privat an einzelne Entwickler. MPlayer ist Gemeinschaftsarbeit, also wird es vielleicht mehrere interessierte Leute geben. Es kommt auch teilweise vor, dass derselbe Fehler von anderen Benutzern gefunden wurde, die bereits eine Lösung zur Umgehung des Problems haben, auch wenn es sich um einen Fehler im MPlayer-Code handelt.

Bitte beschreibe dein Problem so detailliert wie möglich. Dazu gehört ein klein wenig Detektivarbeit, um die Umstände einzuengen, unter denen das Problem auftritt. Tritt der Fehler nur in bestimmten Situationen auf? Ist er abhängig von Dateien oder Dateitypen? Tritt er nur bei einem Codec auf oder ist er davon unabhängig? Kannst du den Fehler mit allen Ausgabetreibern reproduzieren? Je mehr Informationen du zur Verfügung stellst, desto besser sind die Chancen, dass das Problem gelöst wird. Bitte vergiss nicht, auch die unten angeforderten wertvollen Informationen miteinzubeziehen. Ansonsten sind wir vermutlich nicht in der Lage, das Problem genau zu untersuchen.

Eine exzellente und gut geschriebene Anleitung dazu, wie Fragen in öffentlichen Foren gestellt werden sollen, ist How To Ask Questions The Smart Way von Eric S. Raymond. Es gibt noch einen namens How to Report Bugs Effectively von Simon Tatham. Befolgst du diese Richtlinien, solltest du Hilfe bekommen können. Bitte hab aber Verständnis, dass wir alle den Mailinglisten freiwillig in unserer Freizeit folgen. Wir sind sehr beschäftigt und können nicht garantieren, dass du eine Lösung oder auch nur eine Antwort zu deinem Problem erhältst.

A.5. Wo Fehler berichtet werden sollen

Melde dich bei der Mailingliste MPlayer-users an: http://lists.mplayerhq.hu/mailman/listinfo/mplayer-users und sende deinen Fehlerbericht an mailto:[email protected], wo dieser diskutiert werden kann.

Wenn du es bevorzugst, kannst du statt dessen auch unseren brandneuen Bugzilla verwenden.

Die Sprache der Liste ist Englisch. Bitte befolge die Standard- Netiquette-Richtlinien und sende keine HTML-Mails an eine unserer Mailinglisten. Du wirst ignoriert oder ausgeschlossen werden. Wenn du nicht weißt, was eine HTML-Mail ist oder warum sie böse ist, lies dieses feine Dokument. Es erklärt alle Details und beinhaltet Instruktionen, wie man HTML abschalten kann. Beachte auch, dass wir keine Kopien (CC, carbon-copy) verschicken. Es ist daher eine gute Sache, sich anzumelden, um auch wirklich eine Antwort zu erhalten.

A.6. Was berichtet werden soll

Du wirst wahrscheinlich Logdateien, Konfigurationsinformationen und Beispieldateien in deinen Fehlerbericht aufnehmen müssen. Werden einige von ihnen ziemlich groß, ist es besser, wenn du sie auf unseren HTTP-Server hochlädst, und zwar in komprimierter Form (gzip und bzip2 bevorzugt). Gib dann in deinem Fehlerbericht nur den Pfad- und den Dateinamen an. Unsere Mailinglisten haben ein Nachrichten-Größenlimit von 80k, wenn du etwas größeres hast, musst du es komprimieren und hochladen.

A.6.1. Systeminformationen

  • Deine Linuxdistribution, Betriebssystem und Version, z.B.:

    • Red Hat 7.1

    • Slackware 7.0 + Entwicklerpakete von 7.1 ...

  • Kernelversion:

    uname -a

  • libc-Version:

    ls -l /lib/libc[.-]*

  • gcc- und ld-Versionen:

    gcc -v
    ld -v

  • binutils-Version:

    as --version

  • Wenn du Probleme mit dem Vollbildmodus hast:

    • Window-Manager-Typ und Version

  • Wenn du Probleme mit XVIDIX hast:

    • Farbtiefe von X:

      xdpyinfo | grep "depth of root"

  • Wenn nur die GUI fehlerhaft ist:

    • GTK-Version

    • GLIB-Version

    • GUI-Situation, in welcher der Fehler auftritt

A.6.2. Hardware und Treiber

  • CPU-Info (funktioniert nur unter Linux):

    cat /proc/cpuinfo

  • Videokartenhersteller und -modell, z.B.:

    • ASUS V3800U chip: nVidia TNT2 Ultra pro 32MB SDRAM

    • Matrox G400 DH 32MB SGRAM

  • Videotreibertyp und -version, .z.B.:

    • eingebauter Treiber von X

    • nVidia 0.9.623

    • Utah-GLX CVS 2001-02-17

    • DRI von X 4.0.3

  • Soundkartentyp und -treiber, z.B.:

    • Creative SBLive! Gold mit OSS-Treiber von oss.creative.com

    • Creative SB16 mit Kernel-OSS-Treibern

    • GUS PnP mit OSS-Emulation von ALSA

  • Füge bei Linuxsystemen im Zweifel die Ausgabe von lspci -vv bei.

A.6.3. Configure-Probleme

Wenn du Fehlermeldungen beim Aufruf von ./configure bekommst oder die automatische Erkennung von etwas fehlschlägt, so lies config.log. Du könntest dort die Antwort finden, zum Beispiel mehrere Versionen derselben Bibliothek, die gemischt auf deinem System vorliegen, oder du hast vergessen, das Entwicklerpaket (die mit dem Suffix -dev) zu installieren. Wenn du denkst, dass es sich um einen Fehler handelt, binde config.log in deinen Fehlerbericht ein.

A.6.4. Compilierungsprobleme

Bitte füge diese Dateien an:

  • config.h

  • config.mak

A.6.5. Wiedergabeprobleme

Bitte füge die Ausgabe von MPlayer im ausführlichen Modus bei Level 1 an, denke aber daran, die Ausgabe nicht zu kürzen, wenn du sie in deine Mail einfügst. Die Entwickler benötigen alle Ausgaben, um das Problem angemessen zu untersuchen. Du kannst die Ausgabe folgendermaßen in eine Datei ausgeben:

mplayer -v Optionen Dateiname > mplayer.log 2>&1

Wenn dein Problem speziell mit einer oder mehreren Dateien zu tun hat, lade diese bitte hoch nach: http://streams.videolan.org/upload/

Lade bitte auch eine kleine Textdatei hoch, die denselben Basisnamen wie deine Datei hat, mit der Erweiterung .txt. Beschreibe dort das Problem, das du mit dieser speziellen Datei hast und gib sowohl deine Emailadresse als auch die Ausgabe von MPlayer im ausführlichen Modus bei Level 1 an. Normalerweise reichen die ersten 1-5 MB einer Datei aus, um das Problem zu reproduzieren. Um ganz sicher zu gehen, bitten wir dich, folgendes zu tun:

dd if=deine-datei of=kleine-datei bs=1024k count=5

Dies wird die ersten fünf Megabyte von 'deine-datei' nehmen und nach 'kleine-datei' schreiben. Probiere es dann erneut mit dieser kleinen Datei, und wenn der Fehler noch immer auftritt, ist dieses Beispiel für uns ausreichend. Bitte sende niemals solche Dateien via Mail! Lade sie hoch und schicke nur den Pfad/Dateinamen der Datei auf dem FTP-Server. Ist die Datei im Netz verfügbar, reicht es, die exakte URL zu schicken.

A.6.6. Abstürze

Du musst MPlayer in gdb aufrufen und uns die komplette Ausgabe schicken, oder du kannst, wenn du ein core-Dump des Absturzes hast, nützliche Informationen aus der Core-Datei extrahieren, und zwar folgendermaßen:

A.6.6.1. Wie man Informationen eines reproduzierbaren Absturzes erhält

Compiliere MPlayer neu mit Debugging-Code aktiviert:

./configure --enable-debug=3
make

und rufe dann MPlayer innerhalb gdb auf mit:

gdb ./mplayer

Du befindest dich nun innerhalb gdb. Gib ein

run -v Optionen-an-mplayer Dateiname

und reproduziere den Absturz. Sobald du das getan hast, wird gdb zur Eingabeaufforderung zurückkehren, wo du folgendes eingeben musst:

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

Benutze disass $pc-32 $pc+32 mit alten gdb Versionen.

A.6.6.2. Wie man aussagekräftige Informationen aus einem Core-Dump extrahiert

Erzeuge die folgende Befehlsdatei:

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

Führe dann einfach folgenden Befehl aus:

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

A.7. Ich weiß, was ich tue...

Wenn du einen Fehlerbericht wie oben beschrieben geschrieben hast und du dir sicher bist, dass es ein Bug in MPlayer und nicht ein Problem mit dem Compiler oder eine defekte Datei ist, du die Dokumentation gelesen hast und keine Lösungen finden konntest und deine Soundtreiber OK sind, dann kannst du auch der mplayer-advusers-Mailingliste beitreten und dort deine Fehlerberichte einsenden. Du wirst dort schnellere und bessere Antworten erhalten.

Aber sei gewarnt: Wenn du Anfängerfragen stellst oder Fragen, die in dieser Anleitung bereits beantwortet werden, wirst du ignoriert oder angemeckert, anstatt eine Antwort zu erhalten. Also ärgere uns nicht und trete der -advusers-Liste nur bei, wenn du weißt, was du tust und du dich für einen erfahrenen MPlayer-Nutzer oder -Entwickler hältst. Erfüllst du diese Kriterien, sollte es kein Problem für dich sein, dich anzumelden...

Anhang B. MPlayers Skinformat

B.1. Überblick

B.1.1. Verzeichnisse

Die nach Skins durchsuchten Verzeichnisse sind (der Reihe nach):

  1. ~/.mplayer/skins/

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

Beachte, dass der zweite Pfad je nach Art der MPlayer-Konfiguration variieren kann (siehe Argumente --prefix und --datadir des configure-Scripts).

Jedes Skin wird in sein eigenes Verzeichnis unterhalb einem der oben aufgeführten Verzeichnisse installiert, zum Beispiel:

$(PREFIX)/share/mplayer/skins/default/

B.1.2. Bildformate

Die Bilder müssen PNGs sein – entweder Truecolor (24 oder 32 bpp) oder 8 bpp mit einer RGBA-Farbpalette.

Im Hauptfenster und in der Abspielleiste (siehe unten) kannst du Bilder mit 'Transparenz' verwenden: Mit der Farbe #FF00FF (Magenta) gefüllte Bereiche sind beim Betrachten mit MPlayer voll transparent. Dies bedeutet, dass du sogar Formfenster haben kannst, wenn dein X-Server die XShape-Extension besitzt.

B.1.3. Skin-Komponenten

Skins sind ziemlich frei im Format (im Unterschied zu den Skins mit festem Format von Winamp/XMMS zum Beispiel), somit liegt es an dir, einen tollen zu kreieren.

Zur Zeit sind vier Fenster zu dekorieren: das Hauptfenster, das Videofenster, die Abspielleiste und das Skin-Menü.

  • Mit dem Hauptfenster kontrolliert man den MPlayer. Die Abspielleiste erscheint im Vollbild-Modus, sobald man die Maus unten an den Bildschirm bewegt. Der Hintergrund der Fenster ist eine Grafik. Ins Fenster können (und müssen) diverse Elemente platziert werden: Buttons, Potentiometer (Schieberegler) und Labels. Für jedes Element musst du dessen Position und Größe angeben.

    Ein Button besitzt drei Zustände (gedrückt, losgelassen, deaktiviert), deshalb muss seine Grafik in drei untereinander liegende Teile aufgeteilt werden. Siehe Eintrag Button für mehr Details.

    Ein Potentiometer (hauptsächlich für die Suchleiste und die Lautstärke-/Balance-Regler) kann durch die Aufteilung der Grafik in verschiedene Teile eine beliebige Anzahl von Phasen haben. Siehe hpotmeter für Details.

    Labels sind ein wenig speziell: Die Buchstaben und Zeichen, die man zu ihrer Darstellung benötigt, werden von einer Grafikdatei und die Buchstaben und Zeichen in der Grafik durch eine Schrift-Beschreibungsdatei festgelegt. Letztere ist eine Volltextdatei, welche die x-,y-Position und Größe jedes Zeichens in der Grafik beschreibt (die Grafikdatei und ihre Schrift-Beschreibungsdatei bilden zusammen eine Schrift). Siehe dlabel und slabel für Details.

    Anmerkung

    Alle Grafiken können wie im Abschnitt über die Grafikformate erklärt volle Transparenz besitzen. Wenn der X-Server keine XShape-Extension unterstützt, werden die als transparent markierten Teile schwarz. Wenn du dieses Feature gerne nutzen möchtest, muss die Breite der Hintergrundgrafik des Hauptfensters durch 8 teilbar sein.

  • Im Videofenster erscheint das Video. Es kann eine festgelegte Grafik anzeigen, wenn kein Film geladen ist (es ist ziemlich langweilig, ein leeres Fenster vor sich zu haben :-)) Beachte: Transparenz ist hier nicht erlaubt.

  • Das Skin-Menü bietet die Möglichkeit, MPlayer mittels Menüeinträgen zu kontrollieren. Es wird durch die mittlere Maustaste aktiviert. Zwei Grafiken sind für das Menü erforderlich: eine davon ist die Basisgrafik, die den Normalzustand des Menüs darstellt, die andere wird zur Anzeige der gewählten Einträge verwendet. Wenn du das Menü aufklappst, wird die erste Grafik angezeigt. Bewegst du die Maus über die Menüeinträge, wird der aktuell gewählte Eintrag aus der zweiten Grafik über den Menüeintrag unterhalb des Mauszeigers kopiert (die zweite Grafik wird nie als ganzes angezeigt).

    Ein Menüeintrag wird definiert durch seine Position und Größe innerhalb der Grafik (sieh nach mehr Details im Abschnitt über das Skin-Menü).

Eine wichtige Sache wurde noch nicht aufgeführt: Damit Buttons, Potentiometer und Menüeinträge funktionieren, muss MPlayer wissen, was er machen soll, wenn sie angeklickt werden. Dies geschieht mittels Nachrichten (Ereignisse). Für diese Elemente musst du die beim Klick auf sie zu generierende Nachricht definieren.

B.1.4. Dateien

Du benötigst folgende Dateien, um ein Skin zu bauen:

  • Die Konfigurationsdatei genannt skin erzählt MPlayer, wie unterschiedliche Teile des Skins zusammengefügt werden und was er tun soll, wenn du irgendwo innerhalb des Fenster hinklickst.

  • Die Hintergrundgrafik fürs Hauptfenster.

  • Grafiken für die Elemente im Hauptfenster (einschließlich einer oder mehrerer Schrift-Beschreibungsdateien zum Zeichnen der Labels).

  • Die Grafik, die im Videofenster angezeigt werden soll (optional).

  • Zwei Grafiken für das Skin-Menü (sie werden nur gebraucht, wenn du ein Menü erzeugen möchtest).

Mit Ausnahme der skin-Konfigurationsdatei kannst du die anderen Dateien benennen, wie es dir beliebt (beachte aber, dass Schrift-Beschreibungsdateien eine .fnt-Erweiterung besitzen müssen).

B.2. Die skin-Datei

Wie oben erwähnt, ist dies die skin-Konfigurationsdatei. Sie ist zeilenorientiert; Kommentare beginnen mit einem Semikolon (';') und reichen bis zum Zeilenende oder beginnen mit einem '#' am Zeilenanfang (dann sind nur Leerzeichen und Tabulatoren vor dem '#' erlaubt).

Die Datei ist in Abschnitte unterteilt. Jeder Abschnitt beschreibt den Skin für eine Anwendung und besitzt folgende Form:

section = Abschnittsname
.
.
.
end

Zur Zeit gibt es nur eine Anwendung, somit brauchst du nur einen Abschnitt: Sein Name ist movieplayer.

Innerhalb dieses Abschnitts wird jedes Fenster durch einen Block folgender Form beschrieben:

window = Fenstername
.
.
.
end

wobei Fenstername einer dieser Zeichenketten sein kann:

  • main - für das Hauptfenster

  • video - für das Videofenster

  • playbar - für die Abspielleiste

  • menu - für das Skin-Menü

(Die video-, playbar- und menu-Blöcke sind optional - es ist nicht nötig, das Videofenster zu dekorieren, eine Abspielleiste zu haben oder ein Menü zu erzeugen. Ein Standard-Menü steht immer über die rechte Maustaste zur Verfügung.)

Innerhalb des Fensterblocks kannst du jedes Element für das Fenster durch eine Zeile dieser Form definieren:

Element = Parameter

Wobei Element eine Zeichenkette ist, die den Typ des GUI-Elements identifiziert, Parameter ist ein numerischer oder textueller Wert (oder eine Liste Komma-getrennter Werte).

Fügt man nun das oben genannte zusammen, sieht die komplette Datei etwa so aus:

section = movieplayer
window = main
; ... Elemente für das Hauptfenster ...
end

window = video
; ... Elemente für das Videofenster ...
end

window = menu
; ... Elemente für das Menü ...
end

window = playbar
; ... Elemente für die Abspielleiste ...
end
end

Der Name einer Grafikdatei muss ohne führende Pfadangaben angegeben werden - Grafiken werden im Verzeichnis skins gesucht. Du kannst (musst aber nicht) die Erweiterung der Datei spezifizieren. Existiert die Datei nicht, versucht MPlayer die Datei <Dateiname>.<ext> zu laden, wobei png und PNG als <ext> (Erweiterung) probiert werden (in dieser Reihenfolge). Die erste zutreffende Datei wird verwendet.

Zum Schluss einige Worte zur Positionierung. Hauptfenster und Videofenster können in verschiedenen Ecken des Bilschirms über die X- und Y-Koordinaten platziert werden. 0 ist oben oder links, -1 bedeutet zentriert und -2 ist rechts oder unten, wie in dieser Illustration gezeigt:

(0, 0)----(-1, 0)----(-2, 0)
  |          |          |
  |          |          |
(0,-1)----(-1,-1)----(-2,-1)
  |          |          |
  |          |          |
(0,-2)----(-1,-2)----(-2,-2)
      

Hier ein Beispiel, um es zu verdeutlichen. Angenommen, du hast eine Grafik mit Namen main.png, die du für das Hauptfenster nutzt:

base = main, -1, -1

MPlayer versucht, die Dateien main, main.png, main.PNG zu laden, und zentriert sie.

B.2.1. Hauptfenster und Abspielleiste

Unten steht eine Liste von Einträgen, die in den Blöcken 'window = main' ... 'end', und 'window = playbar' ... 'end' genutzt werden können.

decoration = enable|disable

Aktiviere oder deaktiviere die Fenstermanager-Dekoration des Hauptfensters. Standard ist disable.

Anmerkung

Dies kann für die Abspielleiste nicht benutzt werden.

base = image, X, Y

Lässt dich die Hintergrundgrafik fürs Hauptfenster spezifizieren. Das Fenster wird an der angegebenen Position X,Y auf dem Bildschirm erscheinen. Es wird die Größe der Grafik besitzen.

Warnung

Transparente Bereiche innerhalb der Grafik (mit der Farbe #FF00FF) erscheinen auf X-Servern ohne die XShape-Extension schwarz. Die Breite der Grafik muss durch 8 teilbar sein.

button = image, X, Y, width, height, message

Platziere einen Button mit der Größe width * height an Position X,Y. Die angegebene message wird erzeugt, wenn der Button angeklickt wird. Die mittels image festgelegte Grafik muss drei untereinander liegende Teile aufweisen (entsprechend der möglichen Zustände des Buttons), etwa so:

+---------------+
|    gedrückt   |
+---------------+
|  losgelassen  |
+---------------+
|  deaktiviert  |
+---------------+

Ein spezieller Wert von NULL kann für image benutzt werden, wenn keine Grafik angezeigt werden soll.

hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message

vpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message

rpotmeter = button, bwidth, bheight, phases, numphases, x0, y0, x1, y1, default, X, Y, width, height, message

Platziere ein horizontales (hpotmeter), vertikales (vpotmeter) oder drehbares (rpotmeter) Potentiometer der Größe width * height an Position X,Y. Die Grafik kann in unterschiedliche Teile für die verschiedenen Phasen des Potentiometers aufgeteilt werden (du kannst zum Beispiel eines für die Lautstärkeregelung haben, das von rot nach grün wechselt, während sich sein Wert vom Minimum zum Maximum ändert.). Alle Potentiometer können einen Button besitzen, der bei einem hpotmeter und vpotmeter gezogen werden kann. Ein rpotmeter kann auch ohne Button gedreht werden. Die Parameter sind:

  • button - die für den Button zu verwendende Grafik (muss drei untereinander liegende Teile aufweisen, wie im Fall des Buttons). Ein spezieller Wert von NULL kann benutzt werden, wenn keine Grafik angezeigt werden soll.

  • bwidth, bheight - Größe des Buttons

  • phases - die für die verschiedenen Phasen zu verwendende Grafik des Potentiometers. Ein spezieller Wert von NULL kann benutzt werden, wenn du keine solche Grafik anwenden willst. Die Grafik muss in numphases untereinander (bzw. für vpotmeter nebeneinander) liegende Teile wie folgt aufgeteilt werden:

    +------------+
    |  Phase #1  |                Nur für vpotmeter:
    +------------+
    |  Phase #2  |                +------------+------------+     +------------+
    +------------+                |  Phase #1  |  Phase #2  | ... |  Phase #n  |
         ...                      +------------+------------+     +------------+
    +------------+
    |  Phase #n  |
    +------------+
  • numphases - Anzahl der Phasen, die in der phases-Grafik untergebracht sind

  • x0, y0 und x1, y1 - Position des 0%-Start-Punkts und 100%-Stopp-Punkts des Potentiometers (nur für rpotmeter)

    Die erste Koordinate x0,y0 definiert den 0%-Start-Punkt (auf dem Rand des Potentiometer) in der Einzelgrafik der Phase #1 und die zweite Koordinate x1,y1 den 100%-Stopp-Punkt in der Einzelgrafik der Phase #n - mit anderen Worten: die Koordinaten der Spitze der Markierung auf dem Potentiometer in den beiden jeweiligen Grafiken (nicht in der Grafik der Phasen).

  • default - Voreinstellung des Potentiometers (im Bereich 0 bis 100)

    (Für die Nachricht evSetVolume ist auch ein einfaches Bindestrich-Minus als Wert erlaubt. Dieses bewirkt, dass die aktuell eingestellte Lautstärke nicht verändert wird.)

  • X, Y - Position des Potentiometers

  • width, height - Breite und Höhe des Potentiometers

  • message - die Nachricht, die erzeugt werden soll, wenn der Wert des Potentiometers geändert wird

pimage = phases, numphases, default, X, Y, width, height, message

Platziere verschiedene Phasen einer Grafik an Position X,Y. Dieses Element kann sehr gut zusammen mit Potentiometern verwendet werden, um deren Zustand zu visualisieren. phases kann NULL sein, was aber ziemlich sinnlos ist, weil dann nichts angezeigt wird. Eine Beschreibung der Parameter findet sich unter hpotmeter. Der einzige Unterschied zu den Parametern dort betrifft die Nachricht:

  • message - die Nachricht, auf die reagiert werden (d. h. eine Änderung von pimage bewirken) soll

font = fontfile

Definiert eine Schrift. fontfile ist der Name der Schrift-Beschreibungsdatei mit der Erweiterung .fnt (gib hier keine Erweiterung an) und wird verwendet, um auf die Schrift zu verweisen (siehe dlabel und slabel). Bis zu 25 Schriften können definiert werden.

slabel = X, Y, fontfile, "text"

Platziere ein statisches Label an Position X,Y. text wird mittels der identifizierten fontfile angezeigt. Der Text ist einfach ein eine Ausgangszeichenkette ($x-Variablen funktionieren nicht), eingeschlossen von doppelten Anführungszeichen (das "-Zeichen kann jedoch nicht Teil des Textes sein). Das Label wird mittels der über die fontfile identifizierten Schrift angezeigt.

dlabel = X, Y, width, align, fontfile, "text"

Platziere ein dynamisches Label an Position X,Y. Das Label wird als dynamisch bezeichnet, weil sein Text periodisch aktualisiert wird. Die maximale Breite des Labels wird mit dem Wert width vorgegeben (seine Höhe ist die der vorkommenden Zeichen). Wird der anzuzeigende Text breiter als dieser Wert, wird er gescrollt, andernfalls wird er innerhalb des angegebenen Bereichs gemäß des align-Parameters ausgerichtet: 0 steht für links, 1 steht für zentriert, 2 steht für rechts.

Der anzuzeigende Text wird mit text festgelegt: Er muss zwischen doppelten Anführungszeichen stehen (das "-Zeichen kann jedoch nicht Teil des Textes sein). Das Label wird mittels der über die fontfile identifizierten Schrift angezeigt. Du kannst folgende Variablen im Text verwenden:

VariableBedeutung
$1bisherige Laufzeit im Format hh:mm:ss
$2bisherige Laufzeit im Format mmmm:ss
$3bisherige Laufzeit im Format hh (Stunden)
$4bisherige Laufzeit im Format mm (Minuten)
$5bisherige Laufzeit im Format ss (Sekunden)
$6Gesamtlaufzeit im Format hh:mm:ss
$7Gesamtlaufzeit im Format mmmm:ss
$8bisherige Laufzeit im Format h:mm:ss
$vLautstärke im Format xxx.xx%
$VLautstärke im Format xxx.x
$ULautstärke im Format xxx
$bBalance im Format xxx.xx%
$BBalance im Format xxx.x
$DBalance im Format xxx
$$$-Zeichen
$a Buchstabe entsprechend dem Audio-Typ (Kein: n, Mono: m, Stereo: t, Surround: r)
$tTrack-Nummer (DVD, VCD, CD oder Wiedergabeliste)
$oDateiname
$O Dateiname (falls kein Titelname verfügbar), ansonsten der Titel
$fDateiname in Kleinbuchstaben
$FDateiname in Grossbuchstaben
$T Buchstabe entsprechend dem Streamtyp (Datei: f, CD: a, Video-CD: v, DVD: d, URL: u, TV/DVB: b, CUE: c)
$P Buchstabe entsprechend der Wiedergabe (Keine: s, Wiedergabe: p, Pause: e)
$p Buchstabe p (wenn ein Film abgespielt wird)
$s Buchstabe s (wenn ein Film angehalten wird)
$e Buchstabe e (wenn ein Film pausiert wird)
$g Buchstabe g (wenn die Lautstärke-Anpassung aktiv ist)
$xVideobreite
$yVideohöhe
$CName des verwendeten Codecs

Anmerkung

Die Variablen $a, $T, $P, $p, $s und $e geben Buchstaben zurück, die als spezielle Symbole angezeigt werden sollen (zum Beispiel steht e für das Pause-Symbol, welches gewöhnlich etwa so || aussieht). Du solltest eine Schrift für normale Buchstaben und eine weitere Schrift für Symbole haben. Schau in den Abschnitt über Symbole für mehr Informationen.

B.2.2. Videofenster

Die folgenden Einträge können in diesem Block verwendet werden 'window = video' . . . 'end'.

base = image, X, Y, width, height

Die im Fenster anzuzeigende Grafik. Das Fenster wird so groß sein wie die Grafik. width und height kennzeichnen Breite und Höhe des Fensters; sie sind optional (wenn sie fehlen, hat das Fenster dieselbe Größe wie die Grafik). Ein spezieller Wert von NULL kann benutzt werden, wenn keine Grafik angezeigt werden soll (dann dürfen width und height allerdings nicht fehlen).

background = R, G, B

Lässt dich die Hintergrundfarbe setzen. Dies ist von Nutzen, wenn die Grafik kleiner ist als das Fenster. R, G und B spezifizieren die Rot-, Grün- und Blau-Komponenten der Farbe (jede davon ist eine Dezimalzahl von 0 bis 255).

B.2.3. Skin-Menü

Wie bereits zuvor erwähnt, wird das Menü mittels zweier Grafiken dargestellt. Normale Menüeinträge werden aus der Grafik entnommen, die durch das Element base festgelegt sind, während der aktuell gewählte Eintrag aus der Grafik entnommen wird, die durch das Element selected spezifiziert wurde. Du musst Position und Größe jedes Menüeintrags mittels des Elements menu definieren.

Die folgenden Einträge können im Block 'window = menu'. . .'end' genutzt werden.

base = image

Die Grafik für normale Menüeinträge.

selected = image

Die Grafik, die das Menü mit allen gewählten Einträgen anzeigt.

menu = X, Y, width, height, message

Definiert die Position X,Y und die Größe eines Menüeintrags innerhalb der Grafik. message ist die Nachricht, die erzeugt werden soll, wenn die Maustaste über dem Eintrag losgelassen wird.

B.3. Schriften

Wie im Abschnitt über die Skin-Teile beschrieben, wird eine Schrift durch eine Grafik und eine Beschreibungsdatei definiert. Du kannst die Buchstaben und Zeichen irgendwo innerhalb der Grafik platzieren, aber stell sicher, dass Position und Größe der Zeichen in der Beschreibungsdatei exakt angegeben sind.

Die Schrift-Beschreibungsdatei (mit Erweiterung .fnt) darf wie die skin-Konfigurationsdatei mit ';' beginnende Kommentare enthalten (oder Kommentare mit '#', aber nur am Zeilenanfang). Die Datei muss eine Zeile in der Form

image = image

enthalten, wobei image der Name der für die Schrift anzuwendenden Grafikdatei ist (du musst keine Erweiterung angeben).

"char" = X, Y, width, hight

Hier legen X und Y die Position des Zeichens (hier mit char bezeichnet) innerhalb der Grafik fest (0,0 steht für die obere linke Ecke). width und height sind die Maße des Zeichens in Pixel. Das Zeichen char wird in UTF-8-Kodierung angegeben.

Dieses Beispiel definiert die Buchstaben A, B, C unter Anwendung von font.png.

; Kann eine "Schrift" anstatt "font.png" sein.
image = font.png

; Drei Buchstaben reichen zu Demonstrationszwecken :-)
"A" =  0,0, 7,13
"B" =  7,0, 7,13
"C" = 14,0, 7,13

B.3.1. Symbole

Einige Buchstaben haben spezielle Bedeutungen, wenn sie von bestimmten Variablen in dlabel zurückgegeben werden. Diese Buchstaben sind dazu gedacht, als Symbole angezeigt zu werden, so dass Dinge wie ein hübsches DVD-Logo an Stelle des Buchstabens 'd' für einen DVD-Stream angezeigt werden können.

Die folgende Tabelle listet alle Buchstaben auf, die zum Anzeigen von Symbolen genutzt werden können (und daher eine andere Schrift benötigen).

BuchstabeSymbol
pPlay
sStop
ePause
nKein Sound
mMono-Sound
tStereo-Sound
rSurround-Sound
gLautstärke-Anpassung (Replay Gain)
Leerzeichenkein (bekannter) Stream
fStream ist eine Datei
aStream ist eine CD
vStream ist eine Video-CD
dStream ist eine DVD
uStream ist eine URL
bStream ist eine TV/DVB-Übertragung
cStream ist ein Cuesheet

B.4. GUI-Nachrichten

Dies sind die Nachrichten, die von Buttons, Potentiometern und Menüeinträgen generiert werden können.

evNone

Inhaltslose Nachricht, die nichts bewirkt.

Playback-Kontrolle:

evPlay

Starte das Abspielen.

evStop

Stoppe das Abspielen.

evPause

Halte das Abspielen an.

evPrev

Springe zum vorherigen Track in der Playliste.

evNext

Springe zum nächsten Track in der Playliste.

evLoad

Lade eine Datei (durch Öffnen einer Dateiauswahl-Dialogbox, in der die Datei ausgesucht werden kann).

evLoadPlay

Macht dasselbe wie evLoad, es startet jedoch das Abspielen nach dem Laden der Datei automatisch.

evLoadAudioFile

Lädt eine Audio-Datei (mit dem Dateiauswahl-Dialog).

evLoadSubtitle

Lädt eine Untertiteldatei (mit dem Dateiauswahl-Dialog).

evDropSubtitle

Deaktiviert den aktuell verwendeten Untertitel.

evPlaylist

Öffne/schließe das Playlisten-Fenster.

evPlayCD

Versucht die CD im angegebenen CD-ROM-Laufwerk zu öffnen.

evPlayVCD

Versucht die VCD im angegebenen CD-ROM-Laufwerk zu öffnen.

evPlayDVD

Versucht die DVD im angegebenen DVD-ROM-Laufwerk zu öffnen.

evPlayImage

Lädt ein CD-/(S)VCD-/DVD-Abbild oder DVD-Kopie (mit dem Dateiauswahl-Dialog) und spielt es ab, als ob es eine reelle Disc wäre.

evLoadURL

Zeigt das URL-Dialog-Fenster.

evPlayTV

Versucht die TV/DVB-Wiedergabe zu beginnen.

evPlaySwitchToPause

Das Gegenteil von evPauseSwitchToPlay. Diese Nachricht startet das Abspielen und die Grafik für den evPauseSwitchToPlay-Button wird angezeigt (um anzudeuten, dass der Button zum Pausieren des Abspielvorgangs gedrückt werden kann).

evPauseSwitchToPlay

Formt einen Schalter zusammen mit evPlaySwitchToPause. Sie können dazu benutzt werden, einen gebräuchlichen Play/Pause-Button zu bekommen. Beide Nachrichten sollten den Buttons zugewiesen werden, die an genau derselben Position innerhalb des Fensters dargestellt werden. Diese Nachricht pausiert das Abspielen und die Grafik für den evPlaySwitchToPause-Button wird gezeigt (um anzudeuten, dass der Button zum Fortsetzen des Abspielens gedrückt werden kann).

Springen:

evBackward10sec

Springe 10 Sekunden rückwärts.

evBackward1min

Springe 1 Minute rückwärts.

evBackward10min

Springe 10 Minuten rückwärts.

evForward10sec

Springe 10 Sekunden vorwärts.

evForward1min

Springe 1 Minute vorwärts.

evForward10min

Springe 10 Minuten vorwärts.

evSetMoviePosition

Springe zu Position (kann von einem Potentiometer genutzt werden; mit dem relativen Wert (0-100%) des Potentiometers).

Video-Kontrolle:

evHalfSize

Setze das Videofenster auf halbe Größe.

evDoubleSize

Setze das Videofenster auf doppelte Größe.

evFullScreen

Schalte Vollbildmodus an/aus.

evNormalSize

Setze das Videofenster auf normale Größe.

evSetAspect

Setze das Videofenster auf das Originalverhältnis.

evSetRotation

Bringe das Video in seine Originalorientierung.

Audio-Kontrolle:

evDecVolume

Verringere die Lautstärke.

evIncVolume

Erhöhe die Lautstärke.

evSetVolume

Setze die Lautstärke(kann von einem Potentiometer genutzt werden; mit dem relativen Wert (0-100%) des Potentiometers).

evMute

Schalte den Ton an/aus.

evSetBalance

Setze die Balance (kann von einem Potentiometer genutzt werden; mit dem relativen Wert (0-100%) des Potentiometers).

evEqualizer

Schaltet den Equalizer an/aus.

Verschiedenes:

evAbout

Öffne das About-Fenster.

evPreferences

Öffne das Einstellungsfenster.

evSkinBrowser

Öffne das Skin-Browser-Fenster.

evMenu

Öffne das (Standard-)Menü.

evIconify

Minimiere das Fenster zu einem Symbol.

evExit

Schließe das Programm.

B.5. Erstellen von qualitativen Skins

Jetzt hast du dich über das Herstellen eines Skins für das MPlayer-GUI informiert, in Gimp dein bestes gegeben und willst deinen Skin an uns schicken? Lies weiter, dann findest du einige Vorgaben dafür, wie häufige Irrtümer vermieden und hochqualitative Skins erstellt werden können.

Wir wollen, dass Skins, die wir in unser Repository einfügen, bestimmten Qualitätsstandards entsprechen. Du kannst auch vieles dazutun, uns das Leben leichter zu machen.

Als ein Beispiel kannst du dir den Blue-Skin ansehen. Er genügt seit Version 1.5 allen unten aufgelisteten Kriterien.

  • Jeder Skin sollte mit einer README-Datei kommen, die Informationen über dich, den Autor, Copyright- und Lizenzanmerkungen und alles, was du sonst noch anfügen willst, enthält. Willst du ein Changelog, ist diese Datei ein geeigneter Ort dafür.

  • Es muss eine Datei namens VERSION mit nicht mehr als der Versionsnummer des Skins in einer einzigen Zeile geben (z.B. 1.0).

  • Horizontale und vertikale Regler (wie die für Lautstärke oder Position) sollten die Mitte des Knaufs sauber in der Mitte des Reglers zentriert haben. Es sollte möglich sein, den Knauf an beide Enden des Reglers zu bewegen, jedoch nicht darüber hinaus.

  • Für Skin-Elemente sollen die richtigen Größen in der skin-Datei deklariert sein. Ist dies nicht der Fall, kannst du außerhalb z. B. eines Buttons klicken und ihn trotzdem auslösen oder ein Klick innerhalb seiner Fläche löst dennoch nichts aus.

  • Die skin-Datei sollte ordentlich formatiert aussehen und keine Tabs enthalten. Mit "ordentlich formatiert" ist gemeint, dass Zahlen in Spalten ausgerichtet sind und Definitionen entsprechend eingerückt sind.