Copyright © 2000-2018 MPlayer-Team
License
MPlayer is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
MPlayer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with MPlayer; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
libcaca
- Color ASCII Art-Bibliotheklibavcodec
CodecfamilieXvid
-Codecx264
-CodecVideo for Windows
CodecfamilieWenn 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.
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
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.
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.
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
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.
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.
Da MPlayer kein Skin mitbringt, musst du zumindest eines
herunterladen, um die GUI benutzen zu können. 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 Konfigurationsdateianweisung skin=meinskin
benutzen,
um ein anderes Skin aus den skins-Verzeichnissen
zu verwenden.
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.
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.
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.
MPlayer hat eine komplett benutzerdefinierbare OSD-Menü-Schnittstelle.
Das Menü Einstellungen ist momentan NICHT IMPLEMENTIERT!
Installation
compiliere MPlayer mit Übergabe von --enable-menu an ./configure
stelle sicher, dass du ein OSD-Font installiert hast
kopiere etc/menu.conf in dein .mplayer-Verzeichnis
kopiere etc/input.conf in dein .mplayer-Verzeichnis oder in das systemweite MPlayer-Konfigurationsverzeichnis (Standard: /usr/local/etc/mplayer)
überprüfe und editiere input.conf, um Menüsteuerungstasten zu aktivieren (das ist dort beschrieben).
starte MPlayer mit folgendem Beispiel:
mplayer -menu datei.avi
drücke irgendeine von dir definierte Menütaste
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):
cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid login
cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid co xvidcore
cd xvidcore/build/generic
./bootstrap.sh
./configure
Du musst möglicherweise ein paar Optionen hinzuzufügen (schaue dir die Ausgabe von ./configure --help an).
make && make install
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.
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.
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.
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 5movie1.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
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
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:
sek
Verzögert Untertitel um sek
Sekunden. Kann negativ sein. Dieser Wert wird zum Zeitpositionszähler
hinzuaddiert.
RATE
Gibt die Frame/sek-Rate der Untertiteldatei (Fließkommazahl) an.
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 -fpsuntertitel_fps
-subfpsavi_fps
-subuntertitel_dateiname
dummy.avi
Ausführungen über DVD-Untertitel findest du im Abschnitt DVD.
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.
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
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.
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.
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 -
Es wird auch empfohlen, bei der Wiedergabe vom Netzwerk -cache zu aktivieren:
wget ftp://micorsops.com/something.avi
-O - | mplayer -cache 8192 -
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
mplayerhttp://217.71.208.37:8006
-dumpstream -dumpfilestream.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.
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.
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.
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.
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.
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.
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.
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).
Füge die Option -edl <dateiname> mit der EDL-Datei, die auf das Video angewendet werden soll, hinzu, wenn du MPlayer aufrufst.
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.
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.
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.
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.
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
***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:
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
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
mittig
Stereo
links
rechts
Quadraphonisch
links vorne
rechts vorne
links hinten
rechts hinten
Surround 4.0
links vorne
rechts vorne
mittig hinten
mittig vorne
Surround 5.0
links vorne
rechts vorne
links hinten
rechts hinten
mittig vorne
Surround 5.1
links vorne
rechts vorne
links hinten
rechts hinten
mittig vorne
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.
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
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.
Entscheide, wieviele Ausgabekanäle du benötigst. Dies ist die erste Suboption.
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
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.
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:
Um einen Ausgabekanal für jeden der beiden Lautsprecher bereitzustellen, muss die erste Suboption "2" sein.
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.
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.
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.
Eine weitere übliche Aktion ist die Duplizierung der vorderen Kanäle, um sie auf den hinteren Lautsprechern einer quadraphonischen Installation abzuspielen.
Es sollte vier Ausgabekanäle geben. Die erste Suboption ist "4".
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".
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
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.
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.
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.
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.
Hier ist also noch ein Beispiel für die Wiedergabe des linken Kanals auf zwei Lautsprechern. Befolge die Schritte oben:
pan sollte zwei Kanäle ausgeben, also ist die erste Suboption "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".
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.
MPlayers Decoder für 6-kanaliges PCM ist nicht in der Lage, herunterzumixen. Hier ist eine Möglichkeit, PCM unter Verwendung von pan herunterzumixen:
Die Anzahl der Ausgabekanäle ist zwei, daher ist die erste Suboption "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.
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:
Da pan alle sechs Kanäle untersuchen muss, gib -channels 6 an, so dass liba52 sie alle decodiert.
pan gibt nur fünf Kanäle aus, die erste Suboption ist 5.
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
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.
Dieser Abschnitt behandelt das Anschauen/Grabben von einem V4L-kompatiblen TV-Empfänger. Siehe Manpage für eine Beschreibung der TV-Optionen und Tastensteuerungen.
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).
Stelle sicher, dass dein Empfänger mit anderer TV-Software wie zum Beispiel XawTV unter Linux läuft.
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.
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.
Videotext ist momentan nur in MPlayer verfügbar, für die Treiber v4l und v4l2.
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.
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
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.
Zuerst muss MPlayer neu kompiliert werden mittels ./configure mit --enable-radio und (falls Aufzeichnen untersttzt werden soll) --enable-radio-capture.
Stelle sicher, dass dein Empfänger mit anderer Radio Software für Linux läuft, wie z.B. XawTV.
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).
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.
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
libcaca
- Color ASCII Art-BibliothekDu 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:
durch die X11 Start-Meldungen, zum Beispiel:
(--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000 (--) SVGA: Linear framebuffer at 0xD8000000
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)
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 MB | 0x100000 |
2 MB | 0x200000 |
4 MB | 0x400000 |
8 MB | 0x800000 |
16 MB | 0x1000000 |
32 MB | 0x2000000 |
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).
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:
Du musst XFree86 4.0.2 oder eine neuere Version verwenden, da die älteren Versionen XVideo noch nicht kannten.
Deine Grafikkarte muss Hardware-Unterstützung für YUV bieten, was alle modernen Karten tun.
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
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!
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.
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
Ä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.
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).
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.
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.
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.
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
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.
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.
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.
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).
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).
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.
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
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.
./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:
Gibt das zu verwendende Framebuffergerät an (Standard: /dev/fb0)
Gibt zu benutzenden Modusnamen an (wie sie in /etc/fb.modes stehen)
Konfigurationsdatei für die Modi (Standard: /etc/fb.modes)
Wichtige Werte, schau dir die example.conf an.
Wenn du in einen speziellen Modus wechseln willst, dann benutze
mplayer -vm -fbmodeModusname
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
.
fbdev kann den Videomodus in Verbindung mit dem VESA-Framebuffer nicht ändern. Frag auch nicht danach - das ist keine Einschränkung seitens MPlayer.
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:
Um den Treiber benutzen zu können, musst du erstmal mga_vid.o compilieren:
cd drivers make
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
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
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
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.
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
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:
Compiliere tdfx_vid.o:
cd drivers make
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
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.
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
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:
Taste | Aktion |
---|---|
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:
V
OSD-Farbe ändern
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:
Wählt den empfohlenen aa-Treiber (X11, curses, Linux).
Benutze alle 256 Zeichen.
Benutze 8 Bit ASCII-Zeichen.
Gib alle aalib-Optionen aus.
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.
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:
Taste | Aktion |
---|---|
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:
Setze den empfohlenen caca-Treiber. z.B. ncurses, slang, x11.
Spezifiziere die Anzahl der Spalten und Zeilen, z.B. 128x50.
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.
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.
Benutze diesen Treiber nicht mit GCC 2.96! Das wird nicht funktionieren!
BEI VESA VERFÜGBARE KOMMANDOZEILENOPTIONEN
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.
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.
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:
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.
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.
Um die entsprechenden Geräte im /dev-Verzeichnis zu erstellen, führe ein
make device
im Verzeichnis
svgalib_helper als
root
aus.
Verschiebe das Verzeichnis svgalib_helper in das vidix-Unterverzeichnis des MPlayer-Quellbaums.
Entferne den Kommentar vor der CFLAGS-Zeile, die "svgalib_helper" enthält aus vidix/Makefile.
Compiliere erneut.
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.
Matrox G200, G400, G450 und G550 sollen funktionieren.
Der Treiber unterstützt Videoequalizer und sollte fast genauso schnell wie der Matrox-Framebuffer sein.
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.
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.
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
"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).
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.
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 mpegpesDateieDatei.ext
mplayer -ao mpegpes -vo mpegpes -vf expandDateieDatei.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.
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
Aktiviere TV-Ausgabe.
Aktiviere Overlay-Ausgabe unter X11.
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.
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
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.
X
Audioausgabe, wobei X
die Gerätenummer ist
(0 bei nur einer Karte).
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).
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.
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).
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.
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.
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.
Unter Linux hast du zwei Möglichkeiten, den TV-Ausgang deiner G400 anzuschalten:
Anweisungen für die Matrox G450/G550 und deren TV-Ausgänge findest du im nächsten Abschnitt!
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.)
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.
Gehe nach TVout und gib
./compile.sh ein. Installiere
TVout/matroxset/matroxset in ein Verzeichnis, das
in deinem PATH
liegt.
Wenn du fbset nicht installiert hast, installiere
TVout/fbset/fbset in ein Verzeichnis, das in
deinem PATH
liegt.
Wenn du con2fb nicht installiert hast, installiere
TVout/con2fb/con2fb in ein Verzeichnis, das in
deinem PATH
liegt.
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!
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.
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
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.
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)
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.
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.
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.
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.
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.
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.
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.
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.
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).
Besitzt deine CPU SSE, recompiliere deinen Kernel mit
"options CPU_ENABLE_SSE
" (FreeBSD-STABLE oder
Kernel-Patches erforderlich).
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.
Siehe Abschnitt Mac OS.
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.
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.
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.)
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
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-deviced
:
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.
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.
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.
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.
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
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.
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.
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:
Audiocodecname | Beschreibung |
---|---|
mp3lame | encodiere nach VBR-, ABR- oder CBR-MP3 mittels LAME |
lavc | verwende einen der Audiocodecs von
libavcodec
|
faac | FAAC AAC Audio-Encoder |
toolame | MPEG Audio Layer 2 Encoder |
twolame | MPEG Audio Layer 2 Encoder basierend auf tooLAME |
pcm | unkomprimiertes PCM-Audio |
copy | nicht neu codieren, kopiere einfach nur komprimierte Frames |
Video-Codecs:
Videocodecname | Beschreibung |
---|---|
lavc | Verwende einen der Video-Codecs von
libavcodec
|
xvid | Xvid, MPEG-4 Advanced Simple Profile (ASP) Codec |
x264 | x264, MPEG-4 Advanced Video Coding (AVC), AKA H.264 Codec |
nuv | NuppelVideo, von Echtzeit-Anwendungen verwendet |
raw | unkomprimierte Video-Frames |
copy | nicht neu codieren, kopiere einfach nur komprimierte Frames |
frameno | verwendet 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 Containerformats | Beschreibung |
---|---|
lavf | einer der von
libavformat
unterstützten Container |
avi | Audio-Video Interleaved |
mpeg | MPEG-1 und MPEG-2 PS |
rawvideo | raw-Video-Stream (kein Muxen - nur ein Video-Stream) |
rawaudio | raw-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 Containername | Beschreibung |
---|---|
mpg | MPEG-1 und MPEG-2 PS |
asf | Advanced Streaming Format |
avi | Audio-Video Interleaved |
wav | Waveform Audio |
swf | Macromedia Flash |
flv | Macromedia Flash Video |
rm | RealMedia |
au | SUN AU |
nut | NUT offener Container (experimentell und noch nicht Spec-konform) |
mov | QuickTime |
mp4 | MPEG-4 Format |
dv | Sony 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:
mencoderinput.avi
-ooutput.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
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.
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
-ooutput.psp
Der Titel des Videos kann folgendermaßen angepasst werden:
-info name=MovieTitle
.
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
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:
mencoderinput.avi
-of mpeg -ovc lavc -lavcopts vcodec=mpeg1video \ -oac copyother_options
-ooutput.mpg
Erzeugen einer für das Abspielen auf Systemen mit minimalem Multimedia-Support geeigneten MPEG1-Datei, wie etwa auf Standard-Windows-Installationen:
mencoderinput.avi
-of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 \ -ooutput.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
:
mencoderinput.avi
-oVCD.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
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.
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:
mencoderinput.mpg
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \ -vf scale=640:480 -ooutput.avi
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:
mencoderinput.nsv
-oac copy -fafmttag 0x706D \ -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -ooutput.avi
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:
MEncoder decodiert das/die
Input-Bild(er) mittels libjpeg
(beim Decodieren von PNGs nimmt er libpng
).
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 -ooutput.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 -ooutput.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
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
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
rmsubtitles.idx
subtitles.sub
mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \ -vobsuboutsubtitles
-vobsuboutindex 0 -sid 2 mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \ -vobsuboutsubtitles
-vobsuboutindex 1 -sid 5
Beispiel 6.6. Kopieren eines französichen Untertitels aus einer MPEG-Datei
rmsubtitles.idx
subtitles.sub
mencodermovie.mpg
-ifomovie.ifo
-vobsuboutsubtitles
-vobsuboutindex 0 \ -vobsuboutid fr -sid 1 -nosound -ovc copy
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:
mencodersample-svcd.mpg
-vf crop=714:548:0:14 -oac copy -ovc lavc \ -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -ooutput.avi
libavcodec
CodecfamilieXvid
-Codecx264
-CodecVideo for Windows
CodecfamilieEine 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.
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.
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.
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.
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.
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.
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
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.
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:
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.
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.
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.
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.
L | L | L | L | L | L | L | L |
C | C | C | C | ||||
L | L | L | L | L | L | L | L |
L | L | L | L | L | L | L | L |
C | C | C | C | ||||
L | L | L | L | L | L | L | L |
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 Feld | Unteres Feld | ||||||||||||||
L | L | L | L | L | L | L | L | ||||||||
C | C | C | C | ||||||||||||
L | L | L | L | L | L | L | L | ||||||||
L | L | L | L | L | L | L | L | ||||||||
C | C | C | C | ||||||||||||
L | L | L | L | L | L | L | L | ||||||||
L | L | L | L | L | L | L | L | ||||||||
C | C | C | C | ||||||||||||
L | L | L | L | L | L | L | L | ||||||||
L | L | L | L | L | L | L | L | ||||||||
C | C | C | C | ||||||||||||
L | L | L | L | L | L | L | L |
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.
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:
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).
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.
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).
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.
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.
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:
Ausschneidehöhe und y-Offset müssen Vielfache von 4 sein.
Jedes vertikale Skalieren muss im interlaced Modus durchgeführt werden.
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.
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.
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.
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.
mplayersource_file.vob
-aid 129 -dumpaudio -dumpfilesound.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:
mplayersource_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.
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 -ooutput_movie.avi
-audiofileinput_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 -ooutput_movie.asf
-audiofileinput_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).
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.
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:
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.
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.
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 -ooutput.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.
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]
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.
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
mplayer dvd://1
Suche einen Teil mit Bewegung.
Benutze die Taste ., um jeweils einen Frame vorwärts zu rücken.
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.
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.
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.
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.
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.
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].
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.
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).
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
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
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
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
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.
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.
Ü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.
Ü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.
Ü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%.
libavcodec
stellt einfache Encodierung für eine Menge interessanter Video- und Audioformate
zur Verfügung.
Du kannst folgende Codecs encodieren (mehr oder weniger aktuell):
Name des Videocodecs | Beschreibung |
---|---|
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
Name des Audiocodecs | Beschreibung |
---|---|
ac3 | Dolby Digital (AC-3) |
adpcm_* | Adaptive PCM-Formate - siehe begleitende Tabelle |
flac | Free Lossless Audio Codec (FLAC) |
g726 | G.726 ADPCM |
libamr_nb | 3GPP Adaptive Multi-Rate (AMR) narrow-band |
libamr_wb | 3GPP Adaptive Multi-Rate (AMR) wide-band |
libfaac | Advanced Audio Coding (AAC) - verwendet FAAC |
libgsm | ETSI GSM 06.10 full rate |
libgsm_ms | Microsoft GSM |
libmp3lame | MPEG-1 audio layer 3 (MP3) - verwendet LAME |
mp2 | MPEG-1 Audio Layer 2 |
pcm_* | PCM-Formate - siehe begleitende Tabelle |
roq_dpcm | Id Software RoQ DPCM |
sonic | experimenteller verlustbehafteter FFmpeg-Codec |
sonicls | experimenteller verlustfreier FFmpeg-Codec |
vorbis | Vorbis |
wma1 | Windows Media Audio v1 |
wma2 | Windows 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.
PCM/ADPCM Codecname | Beschreibung |
---|---|
pcm_s32le | signed 32-bit little-endian |
pcm_s32be | signed 32-bit big-endian |
pcm_u32le | unsigned 32-bit little-endian |
pcm_u32be | unsigned 32-bit big-endian |
pcm_s24le | signed 24-bit little-endian |
pcm_s24be | signed 24-bit big-endian |
pcm_u24le | unsigned 24-bit little-endian |
pcm_u24be | unsigned 24-bit big-endian |
pcm_s16le | signed 16-bit little-endian |
pcm_s16be | signed 16-bit big-endian |
pcm_u16le | unsigned 16-bit little-endian |
pcm_u16be | unsigned 16-bit big-endian |
pcm_s8 | signed 8-bit |
pcm_u8 | unsigned 8-bit |
pcm_alaw | G.711 A-LAW |
pcm_mulaw | G.711 μ-LAW |
pcm_s24daud | signed 24-bit D-Cinema Audioformat |
pcm_zork | Activision Zork Nemesis |
adpcm_ima_qt | Apple QuickTime |
adpcm_ima_wav | Microsoft/IBM WAVE |
adpcm_ima_dk3 | Duck DK3 |
adpcm_ima_dk4 | Duck DK4 |
adpcm_ima_ws | Westwood Studios |
adpcm_ima_smjpeg | SDL Motion JPEG |
adpcm_ms | Microsoft |
adpcm_4xm | 4X Technologies |
adpcm_xa | Phillips Yellow Book CD-ROM eXtended Architecture |
adpcm_ea | Electronic Arts |
adpcm_ct | Creative 16->4-bit |
adpcm_swf | Adobe Shockwave Flash |
adpcm_yamaha | Yamaha |
adpcm_sbpro_4 | Creative VOC SoundBlaster Pro 8->4-bit |
adpcm_sbpro_3 | Creative VOC SoundBlaster Pro 8->2.6-bit |
adpcm_sbpro_2 | Creative VOC SoundBlaster Pro 8->2-bit |
adpcm_thp | Nintendo GameCube FMV THP |
adpcm_adx | Sega/CRI ADX |
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.
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.
Beschreibung | Encodieroptionen | Geschwindigkeit (in fps) | Relativer PSNR-Verlust (in dB) |
---|---|---|---|
Sehr hohe Qualität | vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2 | 6fps | 0dB |
Hohe Qualität | vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo | 15fps | -0.5dB |
Schnell | vcodec=mpeg4:mbd=2:trell:v4mv:turbo | 42fps | -0.74dB |
Echtzeit | vcodec=mpeg4:mbd=2:turbo | 54fps | -1.21dB |
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:
$ mencoderinput.avi
-ooutput.avi
-oac copy -ovc lavc -lavcopts inter_matrix=...:intra_matrix=...
$ mencoder input.avi
-ovc lavc -lavcopts
vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,
12,14,18,27,29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,
29,34,37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79
:inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,
28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,
36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44 -oac copy -o svcd.mpg
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
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.
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.
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.
Xvid
s GMC ist höher
entwickelt als das von DivX, wird aber nur von ein paar
Standalone-Playern unterstützt.
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.
Einfach | Einfach erweitert | DivX | ||||||||||||||
Profilname | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | Handheld | Portable NTSC | Portable PAL | Home Theater NTSC | Home Theater PAL | HDTV |
Breite [Pixel] | 176 | 176 | 352 | 352 | 176 | 176 | 352 | 352 | 352 | 720 | 176 | 352 | 352 | 720 | 720 | 1280 |
Höhe [Pixel] | 144 | 144 | 288 | 288 | 144 | 144 | 288 | 288 | 576 | 576 | 144 | 240 | 288 | 480 | 576 | 720 |
Framerate [fps] | 15 | 15 | 15 | 15 | 30 | 30 | 15 | 30 | 30 | 30 | 15 | 30 | 25 | 30 | 25 | 30 |
Max. mittlere Bitrate [kbps] | 64 | 64 | 128 | 384 | 128 | 128 | 384 | 768 | 3000 | 8000 | 537.6 | 4854 | 4854 | 4854 | 4854 | 9708.4 |
Höchstwert mittlere Bitrate über 3 Sek. [kbps] | 800 | 8000 | 8000 | 8000 | 8000 | 16000 | ||||||||||
Max. B-Frames | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 2 | ||||||
MPEG-Quantisierung | X | X | X | X | X | X | ||||||||||
Adaptive Quantisierung | X | X | X | X | X | X | X | X | X | X | X | X | ||||
Interlaced Encodierung | X | X | X | X | X | X | X | X | X | |||||||
Viertelpixel | X | X | X | X | X | X | ||||||||||
Globale Bewegungskompensierung | X | X | X | X | X | X |
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.
Beschreibung | Encodieroptionen | Geschwindigkeit (in fps) | Relativer PSNR-Verlust (in dB) |
---|---|---|---|
Sehr hohe Qualität | chroma_opt:vhq=4:bvhq=1:quant_type=mpeg | 16fps | 0dB |
Hohe Qualität | vhq=2:bvhq=1:chroma_opt:quant_type=mpeg | 18fps | -0.1dB |
Schnell | turbo:vhq=0 | 28fps | -0.69dB |
Echtzeit | turbo:nochroma_me:notrellis:max_bframes=0:vhq=0 | 38fps | -1.48dB |
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.
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.
Dieses Handbuch berücksichtigt zwei Hauptkategorien der Encodieroptionen:
Optionen, die hauptsächlich Encodierdauer gegenüber Qualität abwägen
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.
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.
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).
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.
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.
Beschreibung | Encodier-Optionen | Geschwindigkeit (in fps) | Relativer PSNR-Verlust (in dB) |
---|---|---|---|
Sehr hohe Qualität | subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b | 6fps | 0dB |
Hohe Qualität | subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b | 13fps | -0.89dB |
Schnell | subq=4:bframes=2:b_pyramid=normal:weight_b | 17fps | -1.48dB |
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.
Video-Codec Dateiname | Beschreibung (FourCC) | md5sum | Kommentar |
---|---|---|---|
aslcodec_vfw.dll | Alparysoft verlustfreier (lossless) Codec vfw (ASLC) | 608af234a6ea4d90cdc7246af5f3f29a | |
avimszh.dll | AVImszh (MSZH) | 253118fe1eedea04a95ed6e5f4c28878 | benötigt -vf format |
avizlib.dll | AVIzlib (ZLIB) | 2f1cc76bbcf6d77d40d0e23392fa8eda | |
divx.dll | DivX4Windows-VFW | acf35b2fc004a89c829531555d73f1e6 | |
huffyuv.dll | HuffYUV verlustfrei (lossless) (HFYU) | b74695b50230be4a6ef2c4293a58ac3b | |
iccvid.dll | Cinepak Video (cvid) | cb3b7ee47ba7dbb3d23d34e274895133 | |
icmw_32.dll | Motion Wavelets (MWV1) | c9618a8fc73ce219ba918e3e09e227f2 | |
jp2avi.dll | ImagePower MJPEG2000 (IPJ2) | d860a11766da0d0ea064672c6833768b | -vf flip |
m3jp2k32.dll | Morgan MJPEG2000 (MJ2C) | f3c174edcbaef7cb947d6357cdfde7ff | |
m3jpeg32.dll | Morgan Motion JPEG Codec (MJPG) | 1cd13fff5960aa2aae43790242c323b1 | |
mpg4c32.dll | Microsoft MPEG-4 v1/v2 | b5791ea23f33010d37ab8314681f1256 | |
tsccvid.dll | TechSmith Camtasia Screen Codec (TSCC) | 8230d8560c41d444f249802a2700d1d5 | |
vp31vfw.dll | On2 Open Source VP3 Codec (VP31) | 845f3590ea489e2e45e876ab107ee7d2 | |
vp4vfw.dll | On2 VP4 Personal Codec (VP40) | fc5480a482ccc594c2898dcc4188b58f | |
vp6vfw.dll | On2 VP6 Personal Codec (VP60) | 04d635a364243013898fd09484f913fb | |
vp7vfw.dll | On2 VP7 Personal Codec (VP70) | cb4cc3d4ea7c94a35f1d81c3d750bc8d | falscher FourCC? |
ViVD2.dll | SoftMedia 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-devicezeiram.iso
dvd://7 -otrailer.flv
\ -ovc vfw -xvfwopts codec=vp6vfw.dll:compdata=onepass.mcf -oac mp3lame \ -lameopts cbr:br=64 -af lavcresample=22050 -vf yadif,scale=320:240,flip \ -of lavf
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.
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 …).
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.
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.
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
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
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.
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.
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 Main@5.1, 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps 3 hint Payload mpeg4-generic for track 1 4 hint Payload H264 for track 2
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.
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.
Format | Auflösung | V. Codec | V. Bitrate | Samplerate | A. Codec | A. Bitrate | FPS | Seitenverhältnis |
---|---|---|---|---|---|---|---|---|
NTSC DVD | 720x480, 704x480, 352x480, 352x240 | MPEG-2 | 9800 kbps | 48000 Hz | AC3,PCM | 1536 kbps (max) | 30000/1001, 24000/1001 | 4:3, 16:9 (nur für 720x480) |
NTSC DVD | 352x240[a] | MPEG-1 | 1856 kbps | 48000 Hz | AC3,PCM | 1536 kbps (max) | 30000/1001, 24000/1001 | 4:3, 16:9 |
NTSC SVCD | 480x480 | MPEG-2 | 2600 kbps | 44100 Hz | MP2 | 384 kbps (max) | 30000/1001 | 4:3 |
NTSC VCD | 352x240 | MPEG-1 | 1150 kbps | 44100 Hz | MP2 | 224 kbps | 24000/1001, 30000/1001 | 4:3 |
PAL DVD | 720x576, 704x576, 352x576, 352x288 | MPEG-2 | 9800 kbps | 48000 Hz | MP2,AC3,PCM | 1536 kbps (max) | 25 | 4:3, 16:9 (nur für 720x576) |
PAL DVD | 352x288[a] | MPEG-1 | 1856 kbps | 48000 Hz | MP2,AC3,PCM | 1536 kbps (max) | 25 | 4:3, 16:9 |
PAL SVCD | 480x576 | MPEG-2 | 2600 kbps | 44100 Hz | MP2 | 384 kbps (max) | 25 | 4:3 |
PAL VCD | 352x288 | MPEG-1 | 1152 kbps | 44100 Hz | MP2 | 224 kbps | 25 | 4:3 |
[a] 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.
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.
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.
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.
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
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.
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
libavcodec
kann verwendet
werden, um ein VCD/SVCD/DVD-konformes Video durch die Anwendung der
passenden Optionen zu erzeugen.
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.
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
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
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.
Diese Sektion zeigt einige komplette Befehle zum Erzeugen von VCD/SVCD/DVD-konformen Videos.
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -vf scale=720:576,\ harddup -srate 48000 -af lavcresample=48000 -lavcopts vcodec=mpeg2video:\ vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:acodec=ac3:\ abitrate=192:aspect=16/9 -ofps 25 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -vf scale=720:480,\ harddup -srate 48000 -af lavcresample=48000 -lavcopts vcodec=mpeg2video:\ vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=18:vstrict=0:acodec=ac3:\ abitrate=192:aspect=16/9 -ofps 30000/1001 \ -omovie.mpg
movie.avi
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 \ -omovie.mpg
movie.avi
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 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd -vf \ scale=480:576,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ vcodec=mpeg2video:mbd=2:keyint=15:vrc_buf_size=917:vrc_minrate=600:\ vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224 -ofps 25 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd -vf \ scale=480:480,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ vcodec=mpeg2video:mbd=2:keyint=18:vrc_buf_size=917:vrc_minrate=600:\ vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224 -ofps 30000/1001 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \ scale=352:288,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ vcodec=mpeg1video:keyint=15:vrc_buf_size=327:vrc_minrate=1152:vbitrate=1152:\ vrc_maxrate=1152:acodec=mp2:abitrate=224 -ofps 25 \ -omovie.mpg
movie.avi
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \ scale=352:240,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ vcodec=mpeg1video:keyint=18:vrc_buf_size=327:vrc_minrate=1152:vbitrate=1152:\ vrc_maxrate=1152:acodec=mp2:abitrate=224 -ofps 30000/1001 \ -omovie.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.
8.1. Entwicklung | |
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
|
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: | |
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
|
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
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 |
8.3. Allgemeine Fragen | |
| |
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
|
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
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
|
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:
|
F: | Wie kann ich MPlayer im Hintergrund ausführen? |
A: | Benutze: mplayer
|
8.4. Probleme bei der Wiedergabe | |
| |
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 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 Um zu sehen, welche verfügbar sind: mplayer -vo null -ao null -frames 0 -v
|
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 |
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:
|
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. |
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
|
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 = zu ~/.mplayer/config und/oder vo_driver = zu ~/.mplayer/gui.conf hinzu. |
F: |
Ich habe Probleme mit |
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 |
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.
|
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? |
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
|
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. |
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? |
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
den fünften Titel der DVD in die Datei |
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 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 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
|
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 Dann kannst du eine neue Datei anlegen, die nur den sauberen Teil enthält: dd if=
|
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]
|
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 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: |
mencoder
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
|
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.
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.
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 security@mplayerhq.hu 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.
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.
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 :-).
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.
Melde dich bei der Mailingliste MPlayer-users an: http://lists.mplayerhq.hu/mailman/listinfo/mplayer-users und sende deinen Fehlerbericht an mailto:mplayer-users@mplayerhq.hu, 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.
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.
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
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.
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.
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 -vOptionen
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.
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:
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 -vOptionen-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.
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...
Es hat nicht wirklich etwas mit dem Skinformat zu tun, aber du solltest wissen, dass MPlayer kein eingebautes Skin besitzt, also muss zumindest ein Skin installiert sein, damit das GUI verwendet werden kann.
Die nach Skins durchsuchten Verzeichnisse sind (der Reihe nach):
~/.mplayer/skins/
$(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/
Die Bilder müssen Truecolor-PNGs sein (24 oder 32 bpp).
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.
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.
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.
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).
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.
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.
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.
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 Grafik für Phase #1 und die zweite
Koordinate x1,y1
den 100%-Stopp-Punkt in der Grafik für Phase #n - mit
anderen Worten: die Koordinaten der Spitze der Markierung
auf dem Potentiometer in den beiden einzelnen Grafiken.
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:
Variable | Bedeutung |
---|---|
$1 | bisherige Laufzeit im Format hh:mm:ss |
$2 | bisherige Laufzeit im Format mmmm:ss |
$3 | bisherige Laufzeit im Format hh (Stunden) |
$4 | bisherige Laufzeit im Format mm (Minuten) |
$5 | bisherige Laufzeit im Format ss (Sekunden) |
$6 | Gesamtlaufzeit im Format hh:mm:ss |
$7 | Gesamtlaufzeit im Format mmmm:ss |
$8 | bisherige Laufzeit im Format h:mm:ss |
$v | Lautstärke im Format xxx.xx% |
$V | Lautstärke im Format xxx.x |
$U | Lautstärke im Format xxx |
$b | Balance im Format xxx.xx% |
$B | Balance im Format xxx.x |
$D | Balance im Format xxx |
$$ | $ -Zeichen |
$a | Buchstabe entsprechend dem Audio-Typ (Kein: n, Mono: m, Stereo: t, Surround: r) |
$t | Track-Nummer (DVD, VCD, CD oder Wiedergabeliste) |
$o | Dateiname |
$O | Dateiname (falls kein Titelname verfügbar), ansonsten der Titel |
$f | Dateiname in Kleinbuchstaben |
$F | Dateiname 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) |
$x | Videobreite |
$y | Videohöhe |
$C | Name des verwendeten Codecs |
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.
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).
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.
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
der Name der für
die Schrift anzuwendenden Grafikdatei ist (du musst keine Erweiterung angeben).
image
"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
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).
Buchstabe | Symbol |
---|---|
p | Play |
s | Stop |
e | Pause |
n | Kein Sound |
m | Mono-Sound |
t | Stereo-Sound |
r | Surround-Sound |
g | Lautstärke-Anpassung (Replay Gain) |
Leerzeichen | kein (bekannter) Stream |
f | Stream ist eine Datei |
a | Stream ist eine CD |
v | Stream ist eine Video-CD |
d | Stream ist eine DVD |
u | Stream ist eine URL |
b | Stream ist eine TV/DVB-Übertragung |
c | Stream ist ein Cuesheet |
Dies sind die Nachrichten, die von Buttons, Potentiometern und Menüeinträgen generiert werden können.
Inhaltslose Nachricht, die nichts bewirkt.
Playback-Kontrolle:
Starte das Abspielen.
Stoppe das Abspielen.
Halte das Abspielen an.
Springe zum vorherigen Track in der Playliste.
Springe zum nächsten Track in der Playliste.
Lade eine Datei (durch Öffnen einer Dateiauswahl-Dialogbox, in der die Datei ausgesucht werden kann).
Macht dasselbe wie evLoad
, es startet jedoch
das Abspielen nach dem Laden der Datei automatisch.
Lädt eine Audio-Datei (mit dem Dateiauswahl-Dialog).
Lädt eine Untertiteldatei (mit dem Dateiauswahl-Dialog).
Deaktiviert den aktuell verwendeten Untertitel.
Öffne/schließe das Playlisten-Fenster.
Versucht die CD im angegebenen CD-ROM-Laufwerk zu öffnen.
Versucht die VCD im angegebenen CD-ROM-Laufwerk zu öffnen.
Versucht die DVD im angegebenen DVD-ROM-Laufwerk zu öffnen.
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.
Zeigt das URL-Dialog-Fenster.
Versucht die TV/DVB-Wiedergabe zu beginnen.
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).
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:
Springe 10 Sekunden rückwärts.
Springe 1 Minute rückwärts.
Springe 10 Minuten rückwärts.
Springe 10 Sekunden vorwärts.
Springe 1 Minute vorwärts.
Springe 10 Minuten vorwärts.
Springe zu Position (kann von einem Potentiometer genutzt werden; mit dem relativen Wert (0-100%) des Potentiometers).
Video-Kontrolle:
Setze das Videofenster auf halbe Größe.
Setze das Videofenster auf doppelte Größe.
Schalte Vollbildmodus an/aus.
Setze das Videofenster auf normale Größe.
Setze das Videofenster auf das Originalverhältnis.
Bringe das Video in seine Originalorientierung.
Audio-Kontrolle:
Verringere die Lautstärke.
Erhöhe die Lautstärke.
Setze die Lautstärke(kann von einem Potentiometer genutzt werden; mit dem relativen Wert (0-100%) des Potentiometers).
Schalte den Ton an/aus.
Setze die Balance (kann von einem Potentiometer genutzt werden; mit dem relativen Wert (0-100%) des Potentiometers).
Schaltet den Equalizer an/aus.
Verschiedenes:
Öffne das About-Fenster.
Öffne das Einstellungsfenster.
Öffne das Skin-Browser-Fenster.
Öffne das (Standard-)Menü.
Minimiere das Fenster zu einem Symbol.
Schließe das Programm.
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.