2.4. Encodieren mit MEncoder

2.4.1. Übersicht

MEncoder (MPlayer's Movie Encoder) ist ein einfacher Filmencoder, entworfen um Filme, die mit MPlayer abspielbar sind (AVI/DVD/VCD/VOB/MPG/MOV/VIV/FLI/RM/NUV/NET), in ein anderes von MPlayer abspielbares Format (siehe unten) zu encodieren. Er kann mehrere Codecs zur Encodierung benutzen, wie DivX4 (1, 2 oder 3 Pass), libavcodec und PCM/MP3/VBRMP3 Audio. Er verfügt auch über eine stream-copy-Funktion und kann die Grösse der Videos ändern.

2.4.2. Kompilierung

Du bist fertig. Wie du möglicherweise weisst, benötigen andere Encoder avifile. MEncoder braucht diese überhaupt nicht.

2.4.3. MEncoder Features

Geplante Features :

2.4.3.1. 2-Pass DivX4 Encodierung

2-pass Encodierung : Der Name kommt in der Tat daher, dass diese Methode die Datei zwei Mal encodiert. Das erste Encodieren (1.

Pass [=Durchlauf]) erzeugt einige temporäre Dateien (*.log) mit einer Dateigröße von nur wenigen, lösche sie nicht (du kannst die AVI löschen). Im zweiten Pass wird die Ausgabedatei erzeugt, unter Verwendung der Bitraten-Daten der temporären Datei. Die endgültige Datei wird eine bessere Bildqualität besitzen. Wenn dies das erst Mal ist das du davon hörst, solltest du einige Guides in Internet lesen.

Dieses Beispiel zeigt dir, wie du eine DVD in ein 2-Pass DivX4 AVI encodierst. Nur 2 Befehle sind erforderlich:
    rm frameno.avi - Lösche diese Datei, welche von einer früheren Encodierung kommen kann (Sie führt zu einem Konflikt mit der momentanen)
    mencoder -dvd 2 -divx4opts br=1100 -o film.avi -pass 1
    mencoder -dvd 2 -divx4opts br=1100 -o film.avi -pass 2

3-pass Encodierung : Dies ist eine Erweiterung der 2-Pass Encodierung, in der die Kodierung von Audio in einem separaten Durchlauf vollzogen wird. Diese Methode erlaubt die Untersuchung der empfohlenen Video-Bitrate um auf eine CD zu passen. Auch wird der Ton nur einmal kodiert im Unterschied zum 2-Pass. Das Schema:

rm frameno.avi Lösche störende temporäre Dateien
mencoder <datei/DVD> -ovc frameno -o frameno.avi Erster Durchlauf : Eine Audio-only avi Datei wird erzeugt, welche NUR den verlangten Audiostream enthält. Vergiss nicht -lameopts zu setzen, wenn du sie setzen musst. Wenn du einen langen Film encodierst, zeigt MEncoder die empfohlenen Bitraten-werte an für 650Mb, 700Mb und 800Mb Endgrössen, wenn er diesen Durchlauf beendet hat.
mencoder <datei/DVD> -oac copy -pass 1 -divx4opts br=<bitrate> Zweiter Durchlauf : Integriert den ersten Durchlauf der DivX4 Video-Encodierung. Optional kann die Video-Bitrate, welche am Ende des letzten Durchlaufes gezeigt wurde, hier definiert werden.
mencoder <datei/DVD> -oac copy -pass 2 -divx4opts br=<bitrate> Dritter Durchlauf : Integriert den zweiten Durchlauf der DivX4 Video Encodierung. Optional kann die Video-Bitrate, welche am Ende des letzten Durchlaufes gezeigt wurde, In diesem Durchlauf wird der Ton vom frameno.avi in die endgültige Datei eingefügt und es ist alles bereit!

Beispiel einer 3-pass Encodierung :

    rm frameno.avi - Lösche diese Datei, welche von einer früheren Encodierung kommen kann (Sie führt zu einem Konflikt mit der momentanen)
    mencoder -dvd 2 -ovc frameno -o frameno.avi
    mencoder -dvd 2 -divx4opts br=1100 -oac copy -o film.avi -pass 1
    mencoder -dvd 2 -divx4opts br=1100 -oac copy -o film.avi -pass 2

2.4.3.2. Rescaling von Filmen

Oftmals ist die Änderung der Bildgröße erforderlich. Die Gründe dafür können verschieden sein, Beispiele sind das Verkleinern des Ausgabenbildes oder das Encodieren von SVCD zu DivX. Bei gerippt DVDs wurde meinst die Größe geändert, zum Beispiel eine 4:3 DVD sollte 640x480 Pixel haben, insbesondere wenn es auf eine CD passen soll und eine gute Bildqualität zugleich aufweisen soll. SVCDs haben eine Größe von 480x480, wobei ihr Header jedoch die "Aspect Ratio" für den Player enthält (z.B.: 480x480 + 4:3 = 640x480). Wie auch immer, wenn du in eine AVI (DivX) Datei encodierst musst du bedenken, dass der Header von AVI Dateien keine solche Information enthält. Darum ist die einzige Möglichkeit das Ändern das Auslösung.

MEncoder kann Eingansbilder skalieren, falls diese im YV12-Format kommen (z.B.: ffdivx, odivx Treiber oder mpeg1/2). Die Ausgabegröße wird mit der -x und -y Option angeben. Zusätzlich gibt es noch einige Filter für Rescaling in MEncoder, lies dazu in der Manpage ! Diese können mit der -sws Option ausgewählt werden. Wenn nichts angeben wird, verwendet MEncoder 0 : fast bilinear.

Rescaling ist sehr einfach:
    mencoder beispiel-svcd.mpg -divx4opts br=1300 -x 640 -y 480 -sws 2 -o ausgabe.avi

2.4.3.3. Stream-Copy

MEncoder kann Input-Streams auf zwei Arten behandeln: encodieren oder kopieren (copy). Diese Sektion erklärt das copying.

  • 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 kann nur MPlayer solche Dateien abspielen :) Und vermutlich hat es auch keine Überlebensqualität. 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) : siehe oben.
  • Es ist möglich eine externe Audiodatei (MP3, AC3, Vorbis) zu nehmen und diese dem Ausgabestream hinzuzufügen. Benutze dazu die Option -audiofile <dateiname>.

2.4.3.4. Reparieren von AVIs mit defektem Index oder Interleaving

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

Befehl: mencoder eingabe.avi -ovc copy -oac copy -o ausgabe.avi

2.4.3.5. Encodierung mit der libavcodec Codec-Familie

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

Die erste Kolonne enthält den Codec-Name der nach dem vcodec Config übergeben werden sollte, wie z.B.: -lavcopts vcodec=msmpeg4

Ein Beispiel mit MJPEG Kompression :
    mencoder -dvd 2 -o titel2.avi -ovc lavc -lavcopts vcodec=mjpeg

2.4.3.6 Encodierung von mehreren Eingangsbildern (MJPEG/MPNG)

MEncoder kann Filme aus einer oder mehreren JPEG oder PNG Dateien. durch eine einfache Kopierung der Frames kann es MJPEG (Motion JPEG) oder MPNG (Motion PNG) Dateien erzeugen.

Erklärung des Prozesses

MEncoder decodiert das/die Eingangsbild(er) mit einem verfügbaren MJPEG Videocodec (wenn er PNGs decodiert, verwendet er die libpng). Standardmässig wird ffmjpeg verwendet, so dass man die libavcodec-Unterstützung einkompilieren muss (was sowieso empfohlen ist). Der Nachteil ist, dass er gewisse JPEG-Typen nicht verarbeiten kann (für diese wird ein grünes Bild encodiert). Benutze dazu ein externes Werkzeug um diese Bilder in ein verträgliches Format zu konvertieren.
Du kannst frei irgendeinen anderen MJPEG-Decoder wählen, wie mcmjpg32.dll (MainConcept Motion JPEG), wenn dieser installiert ist. Nach einer Begutachtung der codecs.conf und einer anschliessenden Überprüfung der videocodec Zeile, welche auf zu dieser Datei verweist, erkennt man, dass man dazu die -vc mjpeg Option benutzen muss.

MEncoder führt die decodierten Bilder danach dem gewählten Videokompressor zu (DivX4, Xvid, ffmpeg msmpeg4, etc...). Der eingebaute PNG-Decoder, kann momentan leider nur RGB-Formate ausgeben und kann desshalb nicht mit Codecs, welche YUV als Input benötigen (wie Divx 4 oder ffmpeg's msmpeg4), gebraucht werden.

Beispiele

Die Erklärung der -mf Option kann unten, in der globalen Optionen Sektion und in den Manpages gefunden werden.

Erstellung einer DivX4-Datei aus allen JPEG-Dateien im momentanen Verzeichnis :
  mencoder \*.jpg -mf on:w=800:h=600:fps=25 -ovc divx4 -o ausgabe.avi

Erstellung einer Motion JPEG (MJPEG) Datei aus allen JPEG-Dateien im momentanen Verzeichnis :
  mencoder \*.jpg -mf on:w=800:h=600:fps=25 -ovc copy -o ausgabe.avi

Erstellung einer unkomprimierten Datei aus allen PNG-Dateien im momentanen Verzeichnis :
  mencoder \*.png -mf on:w=800:h=600:fps=25:type=png -ovc raw -o ausgabe.avi

Erstellung einer Motion PNG (MPNG) Datei aus allen PNG-Dateien im momentanen Verzeichnis :
  mencoder \*.png -mf on:w=800:h=600:fps=25:type=png -ovc copy -o ausgabe.avi

2.4.4. Syntax

  mencoder [Optionen] [Eingangsdatei] [Optionen] ...

2.4.5. Verfügbare Optionen

HINWEIS: Lies die Manpage für alle verfügbaren Optionen!

Da MEncoder die gleiche Codebasis wie MPlayer eingebaut hat, gibt es viele MPlayer Optionen, welche auch in MEncoder zur Verwendung kommen! Wie du siehst, kannst du die Option -sid verwenden um DVD mit Untertitel zu zu rippen oder -noidx um kaputte Indexe des Eingangs AVI zu missachten. Sei klug!

-ss Zeit Startet die Encodierung von der gegebenen Zeit an (er kann nur von Keyframes aus starten !)
-endpos Zeit Stoppt die Encodierung zu der gegebenen Zeit. Lies die Manpage für Beispiele !
-o Dateiname definiert den Namen der Ausgabedatei
-x Breite in Pixel ändert die Videoausgabe auf die angegebene Anzahl von Pixel
-y Höhe in Pixel ändert die Videoausgabe auf die angegebene Anzahl von Pixel
-sws 0-2 Arte der Scaling-Methode
  0 - fast bilinear
  1 - bilinear
  2 - bicubic (beste Qualität)
-ovc Codecname Encodiert mit dem angegebenen Codec (Codecnamen sind von codecs.conf). Beispiele:
  help - zeigt eine Liste der verfügbaren Codecs an
  null - erzeugt keinen Videostream in dem Ausgabe-AVI
  raw - erzeugt einen unkomprimierten Video
  rawrgb - ?
  copy - kein Encodieren, kopiert den Stream (nur von AVI/ASF zur Zeit)
  divx4 - encodiert zu DivX4
  lavc - encodiert mit einem Codec von libavcodec
  vfw - encodiert mit einer Windows DLL
-oac Codecname Encodiert mit dem angegebenen Codec (Codecnamen sind von codecs.conf). Beispiele:
  help - zeigt eine Liste der verfügbaren Codecs an
  copy - kein Encodieren, kopiert den Stream (nur von AVI/ASF zur Zeit)
  pcm - encodierten zu einem unkomprimiertem PCM
  mp3lame - encodiert zu MP3 (verwendet Lame)
-mfOptionen für mehrere Eingangsdateien Wenn von mehreren JPEG-Dateien konvertiert wird, kann man folgende Unteroptionen angeben:
  on - aktiviert die Unterstützung für mehrere Eingangsdateien
  w=<Wert> - Breite der Ausgabedatei
  h=<Wert> - Höhe der Ausgabedatei
  fps=<Wert> - fps der Ausgabedatei
  type=<Wert> - Typ der Eingangsdateien (verfügbare Typen : jpeg, png)
-divx4opts Wenn du zu DivX4 encodierst kannst du hier die Parameter angeben, wie z.B.:
  -divx4opts br=1800:deinterlace:key=250
Allgemeine Optionen: (Lies in der Manpage für die vollständige Liste!)
  help - zeigt die Hilfe
  br=<Wert> - gibt die Bitrate in kBit <4-16000> oder Bit <16001-24000000> an
  q=<Wert> - Qualität (1-schnellste, 5-beste - standard 5)
  key=<Wert> - Keyframe Interval
-lavcopts Wenn du mit der libavcodec encodierst, kannst du deren Parameter hier angeben, wie:
  -lavcopts vcodec=msmpeg4:vbitrate=1800:vhq:keyint=250
Häufige Optionen: (Lies in der Manpage für die vollständige Liste!)
  help - zeigt die Hilfe
  vcodec=<Wert> - wählt den Videocodec (Siehe in der libavcodec Sektion unten nach für die vollständige Liste)
  vbitrate=<Wert> - gibt die Bitrate in kbit <4-16000> oder bit <16001-24000000> an
  vhq - hohe Qualität
  keyint=<Wert> - Keyframe Interval
-lameopts Wenn du zu MP3 mit libmp3lame encodierst kannst du hier die Parameter angeben, wie z.B.:
  -lameopts q=3
  -lameopts br=192:cbr
Allgemeine Optionen: (Lies in der Manpage für die vollständige Liste!)
  help - zeigt die Hilfe
  cbr - wählt CBR MP3 (standard ist VBR)
  br=<Wert> - definiert die Bitrate in <0-1024> (dies ist nur für CBR!)
  q=<Wert> - Qualität (0-höchste, 9-schnellste - standard 0) (dies ist nur für VBR!)

2.4.6. Beispiele

Die Verwendung von MEncoder ist das Einfachste auf das Erde. Siehe folgendes:

Encodierung von DVD, Titel 2:
    mencoder -dvd 2 -o titel2.avi

Das gleiche, aber mit der libavcodec Familie, MJPEG Kompression :
    mencoder -dvd 2 -o titel2.avi -ovc lavc -lavcopts vcodec=mjpeg

Encodierung von DVD, Title 2, mit Rescaling:
    mencoder -dvd 2 -x 640 -y 480 -sws 2 -o titel2.avi

Encodierung von HTTP:
    mencoder http://mplayer.hq/beispiel.avi -o beispiel.avi

Encodierung von Pipe:
    rar p test-SVCD.rar | mencoder -divx4opts br=800 -ofps 24 -pass 1 -- -

Encodierung von mehreren *.vob-Dateien:
    cat *.vob | mencoder <options> -

Encodierung vom Tuner (für Tuner-Option siehe die TV-Input Sektion!):
    mencoder -tv on:driver=v4l:width=640:height=480 <options>

Lies die MEncoder Manpage um alle verfügbaren Optionen zu sehen.