» SelfLinux » Multimedia » MPlayer - The Movie Player for Linux » Abschnitt 11 SelfLinux-0.10.0
zurück   Startseite Kapitelanfang Inhaltsverzeichnis GPL   weiter

SelfLinux-Logo
Dokument MPlayer - The Movie Player for Linux - Abschnitt 11 Revision: 1.1.2.19
Autor:  Moritz Bunkus
Formatierung:  Matthias Hagedorn
Lizenz:  GPL
 

11 Encodierung mit MEncoder


11.1 Encodieren mit MEncoder

Eine komplette Auflistung aller MEncoder-Optionen und aller Beispiele findest du in der Manpage. Einige sinnvolle Beispiele und detaillierte Anleitungen, wie die diversen Parameter benutzt werden, findest du in den Encodierungstipps (englisch) <../tech/encoding-tips.txt>, die von mehreren Emails auf der en  mplayer-users zusammengetragen wurden. Durchsuche auch das en Archiv. Dort findest du eine Unmenge an Diskussionen über alle möglichen Themen rund um die Encodierung mit MEncoder.


11.1.1 MPEG4-Encodierung ("DivX") in zwei oder drei Durchläufen

2-pass-Encodierung: Der Name kommt in der Tat daher, dass diese Methode die Datei zweimal encodiert. Das erste Encodieren (1. Pass [=Durchlauf]) erzeugt einige temporäre Dateien (.log) mit einer Dateigröße von nur wenigen MB. Lösche sie nicht (das AVI kannst du aber löschen). Im zweiten Pass wird die Ausgabedatei unter Verwendung der Bitraten-Daten der temporären Datei erzeugt. Die endgültige Datei wird deswegen eine weitaus bessere Bildqualität besitzen. Wenn dies das erst Mal ist, dass du davon hörst, solltest du einige Guides im Internet lesen.

Dieses Beispiel zeigt dir, wie du mit 2 Passes eine DVD in ein MPEG4-AVI ("DivX") encodierst. Nur 2 Befehle sind erforderlich: rm frameno.avi - Lösche diese Datei, welche von einer früheren 3-Pass-Encodierung kommen kann (Sie führt zu einem Konflikt mit der momentanen Encodierung).

root@linux # mencoder -dvd 2 -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o film.avi
root@linux # mencoder -dvd 2 -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o film.avi

3-Pass-Encodierung:Dies ist eine Erweiterung der 2-Pass-Encodierung, in der die Encodierung von Audio in einem separaten Durchlauf erledigt wird. Diese Methode erlaubt es MEncoder, Vorschläge für die Videobitrate zu machen, sodass das Ergebnis auf eine CD passt. Auch wird der Ton im Unterschied zum 2-Pass nur einmal encodiert. Das Schema:

  1. Lösche die alte Datei:
    CODE>rm frameno.avi
  2. Erster Durchlauf:
    mencoder <file/DVD> -ovc frameno -oac mp3lame -lameopts vbr=3 -o frameno.avi
    Hierbei wird ein AVI erstellt, das nur die gewählte Audiospur enthält. Vergiss nicht, die -lameopts deinen Wünschen anzupassen. Wenn du einen langen Film encodierst, so gibt dir MEncoder am Schluss die empfohlenen Videobitraten aus, damit ein resultierender Film auf eine 650MB-, eine 700MB- oder eine 800MB-CD passt.
  3. Zweiter Durchgang:
    mencoder <file/DVD> -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=<bitrate>
    Genauso wie der erste Durchgang vom DivX4-Beispiel oben. Gib hier die nach dem ersten Durchlauf von MEncoderempfohlene oder eine andere von dir gewählte Videobitrate an.
  4. Dritter Durchgang:
    mencoder <file/DVD> -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=<bitrate>
    Genauso wie der zweite Durchgang vom DivX4-Beispiel oben. Gib hier die gleiche Bitrate wie im ersten Durchgang an, es sei denn, du weißt genau, was du tust. In diesem Durchgang wird die im ersten Durchgang encodierte Audiospur in die endgültige Datei eingefügt. Nun ist alles fertig!

Beispiel einer 3-Pass-Encodierung:

root@linux ~# rm frameno.avi
Lösche diese Datei, welche von einer früheren 3-Pass-Encodierung kommen kann (Sie führt zu einem Konflikt mit der momentanen Encodierung).
user@linux $ mencoder -dvd 2 -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
user@linux $ mencoder -dvd 2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
user@linux $ mencoder -dvd 2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi


11.1.2 In das MPEG-Format encodieren

MEncoder kann MPEG-Dateien (MPEG-PS) erstellen. Das ist wahrscheinlich nur in Kombination mit dem /mpeg1video/-Codec der libavcodec sinnvoll, da alle Player (bis auf MPlayer) MPEG1-Video und MPEG1 Layer 2 (MP2)-Audio in MPEG-Dateien erwarten.

Dieses Feature ist momentan nicht wirklich nützlich, mal davon abgesehen, dass es wahrscheinlich noch einige Fehler enthält. Schlimmer ist aber, dass MEncoder momentan kein MPEG1 Layer 2 (MP2)-Audio erzeugen kann, das alle anderen Player in einer MPEG-Datei erwarten.

Das Ausgabeformat von MEncoder kann mit -of mpeg auf MPEG geändert werden.

Beispiel:

root@linux # mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac copy <weitere Optionen> media.avi -o ausgabe.mpg


11.1.3 Skalierung von Filmen

Oftmals ist die änderung der Bildgröße erforderlich. Die Gründe dafür können verschieden sein: Dateigröße verringern, Netzwerkbandbreite nicht überlasten etc. Viele Leute skalieren das Bild auch, wenn sie von DVD zu SVCD oder DivX-AVI konvertieren. Das ist allgemein schlecht. Wenn du das vermeiden willst, dann lies den Abschnitt über das Beibehalten des Höhen-/Breitenverhältnisses <aspect>. Der Skalierungsprozess erfolgt durch den /'scale/-Videofilter: -vop scale=breite:hoehe. Die Qualität kann durch die Option -sws angegeben werden. Wenn nichts angegeben ist, verwendet MEncoder 0: schnelle bilienare Filterung ('fast bilinear'). Verwendung:

user@linux ~$ mencoder beispiel-svcd.mpg -ovc lavc -lavcopts vcodec=mpeg4 -vop scale=640:480 -sws 2 -oac copy -o ausgabe.avi


11.1.4 Stream-Kopiermodus

MEncoder kann Input-Streams auf zwei Arten bearbeiten: encodieren oder kopieren (copy). Diese Sektion erklärt die Stream-Kopie.

  • Videostreams (Option -ovc copy): Es können nette Sachen gemacht werden :)
    Wie das kopieren (nicht konvertieren) von FLI- oder VIVO- oder MPEG1-Video in eine AVI-Datei. Natürlich ist nur MPlayer in der Lage, solche Dateien abspielen :) Und vermutlich ist das auch absolut nicht praxisrelevant. Das Kopieren von Videostream kann nützlicher sein, wenn man zum Beispiel nur den Audiostream encodieren will (z.B.: unkomprimiertes PCM zu MP3).
  • Audiostreams (Option -oac copy): geht genauso. Es ist möglich, eine externe Audiodatei (MP3, AC3, Vorbis) zu nehmen, und diese dem Ausgabestream hinzuzufügen. Benutze dazu die Option -audiofile <dateiname>.


11.1.5 Reparieren von AVIs mit defektem Index oder schlechtem Interleaving

Trivial. Wir kopieren einfach die Video- und Audiostreams, und MEncoder erzeugt den Index. Natürlich kann das keine Fehler in den Video- und/oder Audiostreams beheben. Es kann auch Dateien mit kaputten Interleaving reparieren, sodass die Option -ni für diese nicht mehr gebraucht wird.

Befehl:

user@linux ~$ mencoder -idx eingabe.avi -ovc copy -oac copy -o ausgabe.avi

11.1.5.1 Aneinanderhängen mehrerer AVI-Dateien

Ein Nebeneffekt des oben erwähnten Reparierens ist, dass MEncoder damit auch zwei oder mehrere aneinandergehängte AVI-Dateien reparieren kann:

Kommando:

user@linux ~$ cat 1.avi 2.avi | mencoder -noidx -ovc copy -oac copy -o ausgabe.avi -

Anmerkung:

Hier wird angenommen, dass 1.avi und 2.avi den gleichen Codec verwenden, die gleiche Auflöung und Streamrate besitzen etc., und wenigstens 1.avi darf nicht defekt sein. Eventuell musst du, wie oben <fixing> beschrieben, die Quelldateien erst reparieren.



11.1.6 Encodierung mit der libavcodec-Codec-Familie

libavcodec bietet eine einfache Encodierung für viele interessante Video-und Audio-formate (momentan werden deren Audio-Codecs nicht unterstützt). Du kannst zu folgenden Codecs encodieren:

  • mjpeg - Motion JPEG
  • h263 - H263
  • h263p - H263 Plus
  • mpeg4 - ISO-Standard-MPEG4 (kompatibel zu DivX5, XviD)
  • msmpeg4 - pre-Standard-MPEG4-Variante von MS, v3 (aka DivX3)
  • msmpeg4v2 - pre-Standard-MPEG4-Variante von MS, v2 (wird in alten ASF-Dateien benutzt)
  • rv10 - ein alter RealVideo-Codec
  • mpeg1video - MPEG1-Video :)
  • huffyuv - verlustfreie Kompression

Die erste Spalte enthält den Codec-Namen, den du nach dem vcodec-Stichwort übergibst, wie z.B.: -lavcopts vcodec=msmpeg4 Ein Beispiel mit MJPEG-Kompression:

user@linux ~$ mencoder -dvd 2 -o titel2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy


11.1.7 Encodierung von mehreren Einzelbildern (JPEGs, PNGs oder TGAs)

MEncoder kann aus mehreren JPEG-, PNG- oder TGA-Einzelbildern einen Film erstellen. Durch einfaches Kopieren der Bilder kann er MJPEG- (Motion JPEG), MPNG- (Motion PNG) oder MTGA-Filme (Motion TGA) erzeugen.

So läuft dieser Prozess ab:

  1. MEncoder decodiert das/die Eingangsbild(er) mit libjpeg (wenn PNGs decodiert werden, wird die libpng benutzt).
  2. MEncoder führt die decodierten Bilder danach dem gewählten Videokompressor zu (DivX4, Xvid, ffmpeg msmpeg4, etc...).

Beispiele:

Die Erklärung der -mf-Option kann in der Manpage gefunden werden.

Erstellung einer DivX4-Datei aus allen JPEG-Dateien im aktuellen Verzeichnis:
user@linux ~$ mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o ausgabe.avi \.jpg
Erstellung einer DivX4-Datei aus einigen JPEG-Dateien im aktuellen Verzeichnis:
user@linux ~$ mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o ausgabe.avi frame001.jpg,frame002.jpg
Erstellung einer Motion JPEG-Datei (MJPEG) aus allen JPEG-Dateien im aktuellen Verzeichnis:
user@linux $ mencoder -mf on:w=800:h=600:fps=25 -ovc copy -o output.avi\.jpg
Erstellung einer unkomprimierten Datei aus allen PNG-Dateien im momentanen Verzeichnis:
user@linux $ mencoder -mf on:w=800:h=600:fps=25:type=png -ovc rawrgb -o output.avi\.png

Anmerkung:

Die Breite muss ein Vielfaches von 4 betragen, was eine Beschränkung des RGB-AVI-Formates ist.
Erstellung einer Motion PNG-Datei (MPNG) aus allen PNG-Dateien im momentanen Verzeichnis:
user@linux $ mencoder -mf on:w=800:h=600:fps=25:type=png -ovc copy -o output.avi\.png
Erstellung einer Motion TGA-Datei (MTGA) aus allen TGA-Dateien im aktuellen Verzeichnis:
user@linux $ mencoder -mf on:w=800:h=600:fps=25:type=tga -ovc copy -o output.avi\.tga


11.1.8 Extrahieren von DVD-Untertiteln in eine Vobsub-Datei

MEncoder kann Untertitel von einer DVD extrahieren und sie als Datei im Vobsub-Format speichern. Dieses besteht aus einem Dateipaar (.sub und .idx) und wird gewähnlich in ein einziges .rar Archiv verpackt. MPlayer kann diese mit den Optionen -vobsub und -vobsubid wiedergeben. Du gibst mit -vobsubout den Basisnamen der Ausgabedatei (ohne .idx- oder .sub-Endung) und mit -vobsuboutindex den Index des Untertitels der Ausgabedatei an. Wenn die Eingabe nicht von einer DVD stammt, solltest du mit der Option -ifo die Datei angeben, die zur Erstellung der resultierenden .idx-Datei benötigt wird. Wenn die Eingabe nicht von einer DVD stammt und keine .ifo-Datei vorhanden ist, benötigst du die -vobsuboutid-Option, um MPlayer zu sagen, welche Sprach-ID für die .idx Datei verwendet werden soll. Jeder Aufruf fügt neue Untertitel dazu, falls die .idx- und .sub-Dateien bereits existieren. Sie sollten im Bedarfsfall also vor dem Starten gelöscht werden.

Beispiele:

Kopieren zweier Untertitel von einer DVD mit 3-Pass-Encodierung

user@linux ~$ rm untertitel.idx untertitel.sub
user@linux ~$ mencoder -dvd 1 -vobsubout untertitel -vobsuboutindex 0 -sid 2 -o frameno.avi -ovc frameno -oac mp3lame -lameopts vbr=3
user@linux ~$ mencoder -dvd 1 -oac copy -ovc divx4 -divx4opts pass=1
user@linux ~$ mencoder -dvd 1 -oac copy -ovc divx4 -divx4opts pass=2 -vobsubout untertitel -vobsuboutindex 1 -sid 5

Kopieren eines französischen Untertitels von einer MPEG-Datei

user@linux ~$ rm untertitel.idx untertitel.sub
user@linux ~$ mencoder film.mpg -ifo film.ifo -vobsubout untertitel -vobsuboutindex 0 -vobsuboutid fr -sid 1


11.1.9 Das Höhen-/Breitenverhältnisses erhalten

DVDs und SVCDs (z.B. MPEG1/2) enthalten einen Wert, der das Verhältnis zwischen der Ausgebehöhe und der Ausgebebreite enthält. Der Player sorgt dann durch Skalierung dafür, dass dieses Verhältnis erreicht wird, sodass wir Menschen keine Eierköpfe sehen (Beispiel: die Bildmaße betragen 480x480, das gespeicherte Verhältnis beträgt 4:3, und der Player spielt den Videostream dann bei 640x480 ab). Wenn du allerdings solche Dateien in ein AVI umwandelst, dann musst du beachten, dass das AVI-Format das Höhen-/Breitenverhältnis nicht speichern kann. Die Skalierung beim Encodieren ist ein zeitraubender und qualitätsmindernder Prozess. Es sollte doch eine bessere Möglichkeit geben!?
Ganz genau - die gibt es. MPEG4 enthält ein einzigartiges Feature: Im Videostream selber kann das Höhen-/Breitenverhältnis gespeichert werden. Jop, genauso wie bei MPEG1/2 (DVD, SVCD). Leider gibt es bisher _keinen_ Videoplayer, der dieses Feature unterstützt. Bis auf MPlayer natürlich.
Dieses Feature kann nur in Verbindung mit dem mpeg4-Codec der libavcodec genutzt werden. Denke immer daran, dass - auch wenn MPlayer die Datei richtig wiedergeben wird - alle anderen Player ein falsches Höhen-/Breitenverhältnis anzeigen werden.
Du solltest ernsthaft in Erwägung ziehen, die eventuell vorhandenen schwarzen Balken oberhalb und unterhalb des Bildes wegzuschneiden. Lies in der man-Page dazu, wie du die cropdetect- und crop-Filter benutzt.

Benutzung:

user@linux ~$ mencoder beispiel-svcd.mpg -ovc lavc -lavcopts vcodec=mpeg4:aspect=16.0/9.0 -vop crop=714:548:0:14 -oac copy -o ausgabe.avi




zurück   Seitenanfang Startseite Kapitelanfang Inhaltsverzeichnis GPL   weiter