mencoder

Aus Mikiwiki
(Weitergeleitet von MEncoder)
Wechseln zu: Navigation, Suche

Der Shell-Befehl mencoder (auch: MEncoder, Mencoder) ist ein Medienencoder und Teil von Mplayer.

Kann keine Audio-Verzögerungen korrigieren. Falls Audio und Video beim Abspielen mit Mplayer nicht synchron laufen, sollte stattdessen Transcode verwendet werden. Gemäss Dokumentation sollte Mencoder nur mit VBR/ABR MP3-Kodierung verwendet werden. CBR-kodierte MP3-Dateien werden unter Windows-Systemen nicht laufen (Mplayer dagegen spielt sie unter Linux problemlos ab).

Es gibt zur Zeit noch keine grafische Oberfläche für Mencoder.

Verwendung

Wandelt angeblich eine AVI-Datei in eine MPG-Datei um:

mencoder -oac copy -ovc lavc -lavcopts vcodec=mpeg4 -o outfile.mpg infile.avi

Wandelt angeblich eine MOV-Datei in eine AVI-Datei um:

mencoder -oac copy -ovc copy -o outfile.avi infile.mov

Wandelt angeblich eine RM-Datei in ein MPEG-2-Video:

mencoder infile.rm -ovc lavc -lavcopts vcodec=mpeg2video -oac pcm -o outfile.mpg

Wandelt angeblich eine RM-Datei in eine MPEG-4- bzw. AVI-Datei:

mencoder infile.rm -ovc lavc -lavcopts vcodec=mpeg4 -oac pcm -o outfile.avi

Wandelt angeblich eine WMV-Datei in eine AVI-Datei:

mencoder infile.wmv -ofps 23.976 -ovc lavc -oac copy -o outfile.avi

Erstellen einer AVI-Datei

Der Prozess nennt sich "3-Pass-Enkodierung":

  1. Kodierung der Tonspur
  2. ...
  3. ...

In Kürze kann das so aussehen:

Anzeige der auf einer DVD befindlichen Titel und Kapitel.

$ mplayer -identify -nosound -novideo dvd://

Schritt 1 der 3-Pass-Enkodierung: Auslesen der Audiospur aus dem fünften Titel einer im Laufwerk befindlichen DVD ("dvd://5") und Abspeichern unter dem Titel "file.avi". Mencoder wandelt dabei die Audiospur mit LAME ins MP3-Format um ("-oac mp3lame"). Die Optionen für die MP3-Datei: die Bitrate beträgt 96 kbit/s ("br=96"), es handelt sich um eine konstante Bitrate ("cbr") und die Lautstärke liegt im Mittelfeld zwischen 0 und 10 ("vol=6"). In diesem Schritt soll keine Bildwandlung stattfinden ("-ovc frameno").

$ mencoder -oac mp3lame -lameopts br=96:cbr:vol=6 -ovc frameno \
    -o file.avi dvd://5

Zwischenschritt zur Ermittlung der Crop-Werte: Über die Option "cropdetect" wird bestimmt, welcher Ausschnitt aus dem Rohmaterial herausgeschnitten wird, um auf diese Weise die schwarzen Streifen an den Rändern zu entfernen. Die Bedeutung der Optionen:

  • Bikubisch skalieren ("-sws 2").
  • Es wird nur die Audiospur kopiert ("-oac copy").
  • Benutzung der libavcodec-Bibliothek, welche verschiedene Videocodecs mitbringt ("-ovc lavc").
  • Details zum gewählten Codec: Der Film wird ins MPEG-4-Format umgewandelt ("vcodec=mpeg4"), in bester Qualität ("vhq"), mit einer Bitrate von 629 kbit/s ("vbitrate=629"). Es handelt sich um den ersten Durchgang beim Enkodieren ("vpass=1").
  • Cropdetect erkennt den Crop-Wert, der später hier eingesetzt wird , "scale" skaliert den Film auf PAL-Auflösung ("-vf cropdetect,scale=720:576").
$ mencoder -sws 2 -oac copy -ovc lavc \
    -lavcopts vcodec=mpeg4:vhq:vbitrate=629:vpass=1 \
    -vf cropdetect,scale=720:576 \
    -o file.avi dvd://5

Nach kurzer Zeit erscheinen auf der Befehlszeile die benötigten Werte (z. B. "720:640:0:0", die dann anstelle der Option "cropdetect" eingesetzt werden können.

Schritt 2 der 3-Pass-Enkodierung: Transkodieren des Videos aus dem VOB-Format ins MPEG-4-Format. Am Ende dieses Schritts steht die erste Fassung des fertigen Films.

$ mencoder -sws 2 -oac copy -ovc lavc \
    -lavcopts vcodec=mpeg4:vhq:vbitrate=629:vpass=1 \
    -vf crop=720:640:0:0,scale=720:576 \
    -o file.avi dvd://5

Schritt 3 der 3-Pass-Enkodierung: Am Ende dieses Schritts steht die zweite Fassung ("vpass=2") des fertigen Films. Dabei wird eine im ersten Durchgang angelegte Protokolldatei verwendet und darauf basierend die Qualität des Films verbessert.

$ mencoder -sws 2 -oac copy -ovc lavc \
    -lavcopts vcodec=mpeg4:vhq:vbitrate=629:vpass=2 \
    -vf crop=720:640:0:0,scale=720:576 \
    -o file.avi dvd://5

Kodierung der Tonspur

Zuerst muss festgelegt werden, welche Sprache verwendet werden soll. Entweder wird die Audio ID (also 128 für den ersten Stream, 129 für den zweiten, usw.) oder der zwei-Buchstaben-Länder-Code (z. B. "en" für Englisch oder "de" für Deutsch) benötigt. Diese Codes können durch Ausführen von MPlayer im Verbose-Mode ermittelt werden:

$ mplayer -dvd 1 -v
[open] audio stream: 0 audio format: ac3 language: en aid: 128
[open] audio stream: 1 audio format: ac3 language: de aid: 129
[open] audio stream: 2 audio format: ac3 language: es aid: 130

Im Beispiel gibt es drei Audio-Streams: Englisch, Deutsch, Spanisch und ihre IDs. Nun wird MEncoder aufgerufen, um die gewünschte Tonspur zu kodieren:

$ nice -+19 cat /space/*vob | nice-+19 mencoder -ovc frameno \
    -o frameno.avi -oac mp3lame -lameopts abr:br=128 -alang de -
  • nice -+19 gibt MEncoder die niedrigste Prozess-Priorität, sodass er die normale Arbeit nicht stört.
  • -ovc frameno sagt aus, dass der Ausgabe-Video-Codec "frameno" ist. Das bedeutet, dass gar keine Video-Daten geschrieben oder verarbeitet werden.
  • -o frameno.avi schreibt die Ausgabe in eine Datei "frameno.avi". Die Die Tonspur muss in eine Datei mit diesem Namen geschrieben werden, da MEncoder die Tonspur im nächsten Schritt genau aus dieser Datei lesen wird.
  • -oac mp3lame sagt, dass der Ausgabe-Audio-Codec die "lame" encoder library ist.
  • -lameopts abr:br=128 sind die Optionen für "lame". Sie veranlassen das Programm eine Datei unter Verwendung von ABR (average bitrate (durchschnittliche Bitrate - eine variable Bitrate mit dem vom Benutzer angegeben Durchschnitt) mit einer durchschnittlichen Bitrate von 128kbit/s zu erzeugen.
  • -alang de verwendet die deutsche Tonspur. Alternativ könnte hier "-aid 129" verwendet werden.

Nach einer Weile ist die Tonspur da. MEncoder gibt auch einige Vorschläge für die Video-Bitrate an:

Recommended video bitrate for 650MB CD: 1845
Recommended video bitrate for 700MB CD: 1992
Recommended video bitrate for 800MB CD: 2287

Diese Werte sind ziemlich hoch, was darauf zurückzuführen ist, dass die gewählte Episode nur 40 Minuten lang ist. Sinnvollerweise können hier also zwei Episoden pro CD erzeugt und dem Video eine Bitrate von etwa 1000 gegeben werden.

Erstellen einer Vorschau (Erster Durchgang)

Nun muss entschieden werden, welcher Video-Codec verwendet werden soll. Angenommen es soll eine AVI-Datei mit einem der verschiedenen Divx-Encoder erstellt werden. Mencoder unterstützt Divx 4 oder DivX 5 (das gilt auch für Windows - entweder ist Version 4 oder Version 5 installiert) genauso wie Xvid oder Libavcodec. Libavcodec (lavc) aus dem Ffmpeg-Projekt ist den Codecs DivX 4/5 weit überlegen und ist mindestens ebensogut wie Xvid. Daher hier nur Beispiele für Libavcodec, wofür auch keine speziellen Codecs zum späteren Abspielen benötigt werden. Mplayer spielt sie problemlos ab, für Windows wird einfach Divx 5 benötigt (die kostenlose Ausgabe ist absolut ausreichend).

$ nice -+19 mencoder -nosound                                         \
                     -o /dev/null                                     \
                     -ovc lavc                                        \
                     -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=1 \
                     -vop scale=640:480                               \
                     -npp lb                                          \  
                     -ss 0:20                                         \
                     -endpos 0:30 /space/first.vob
  • -oac copy - Mencoder braucht die Informationen des ersten Durchgangs, um Audio und Video synchron zu halten. Auf keinen Fall darf "-nosound" benutzt werden. Technische Details dazu finden sich in der MPlayer-Mailliste.
  • -o /dev/null - auch die Ausgabe des ersten Durchgangs wird nicht benötigt.
  • -ovc lavc wählt Libavcodec (lavc) als Ausgabe-Videocodec.
  • -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vqmin=1:vqmax=31:vpass=1 - Libavcodec unterstützt tatsächlich eine Handvoll verschiedener Videocodecs.
    • vcodec=mpeg4 wählt den MPEG-4-kompatiblen Encoder.
    • vbitrate=1000 ist die gewünschte Bitrate.
    • vhq (very high quality / sehr hohe Qualität) veranlasst den Kodierer eine Menge Zeit mit der Optimierung des Ergebnisses zu verbringen. Es ist den Aufwand wert.
    • vpass=1 teilt dem Encoder mit, dass dies nur der erste Durchgang ist.
    • vqmin und vqmax teilen dem Codec mit, wie stark das Video minimal und maximal komprimiert werden soll. Diese Werte auf ihren Voreinstellungen zu lassen (siehe "man mencoder") beschränkt die erreichbare Ausgabe-Bitrate sehr, daher wird eine grössere Reichweite empfohlen.
  • -vop scale=640:480 skaliert das Bild herunter auf 640x480 Pixel. Zudem gibt es einen (ungetesteten) neuen Parameter, der automatisch die Höhe von der angegebenen Breite und umgekehrt errechnet, sodass das Seitenverhältnis erhalten bleibt. Das sollte so aussehen: "-vop scale -xy 640". Obwohl es möglich ist, die Bilder zu vergrössern, ist davon stark abzuraten. Einerseits braucht der Encoder viel mehr Bit um die gleiche Qualität zu erreichen, die auch erreicht werden kann, indem ein kleineres Bild kodiert und dann beim Abspielen vergrössert wird. Andererseits kann es zu Bildverzerrungen kommen. Es sollte daher immer nach unten skaliert werden (also verkleinert).
  • Falls das Bild interlaced ist, kann es durch Angabe des Parameters -npp lb de-interlaced ausgegeben werden.
  • Zum Erstellen einer Vorschau wird eine Anfangsposition und die gewünschte Länge mitangegeben: -ss 0:20 bezeichnet 20 Sekunden nach Filmbeginn als Anfang, und -endpos 0:30 sagt, dass 30 Sekunden bearbeiteter Film gewünscht sind. Bei diesem Parameter handelt es sich aber nicht um die Endposition, sondern um die Länge des zu kodierenden Ausschnitts.

Erstellen einer Vorschau (zweiter Durchgang)

Hier kann der grösste Teil der vorhergehenden Befehlszeile beibehalten werden. Natürlich wird vpass=1 in vpass=2 geändert, um dem Encoder mitzuteilen, dass es sich um den zweiten Durchgang handelt. Diesmal wird die endgültige Ausgabe gespeichert, also wird -o /dev/null durch -o outfile.avi ersetzt. Die neue Befehlszeile lautet also:

nice -+19 mencoder -oac copy -o outfile.avi -ovc lavc \
  -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=2 -vop scale=640:480 -npp lb -ss 0:20 -endpos 0:30 /space/first.vob

Sobald Mencoder fertig ist, kann die Vorschau angesehen werden. Falls notwendig können die Einstellungen berichtigt werden.

Erstellen der endgültigen AVI-Datei (beide Durchgänge)

Die Aufrufe der endgültigen Optionen lassen einfach die Optionen -ss und -endpos weg. Leider kann MEncoder nicht mehrere Eingabe-Dateien von der Befehlszeile lesen, weshalb der Befehl "cat" verwendet wird:

cat /space/*vob | nice -+19 mencoder -oac copy -o /dev/null -ovc lavc \
  -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=1:vqmin=1:vqmax=31 -vop scale=640:480 -npp lb -

cat /space/*vob | nice -+19 mencoder -oac copy -o ally.avi -ovc lavc \
  -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=2:vqmin=1:vqmax=31 -vop scale=640:480 -npp lb -

Es ist zu beachten, dass -ss offenbar nicht zusammen mit der Variante cat *vob | mencoder... funktioniert. Also muss für die Vorschau einfach die erste VOB-Datei als letztes Argument angegeben werden (siehe oben).

Weblinks

  • Mencoder (MPlayerHQ.hu) - Bestandteil von Mplayer