7. Encodieren mit MEncoder

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

7.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).
    mencoder -dvd 2 -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o film.avi
    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:

    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).
    mencoder -dvd 2 -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
    mencoder -dvd 2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
    mencoder -dvd 2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi

7.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:
  mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac copy <weitere Optionen> media.avi -o ausgabe.mpg

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

Der Skalierungsprozess erfolgt durch den 'scale-Videofilter: -vf 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

    mencoder beispiel-svcd.mpg -ovc lavc -lavcopts vcodec=mpeg4 -vf scale=640:480 -sws 2 -oac copy -o ausgabe.avi

7.4 Stream-Kopiermodus

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

7.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: mencoder -idx eingabe.avi -ovc copy -oac copy -o ausgabe.avi

7.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: 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 beschrieben, die Quelldateien erst reparieren.

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

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-Compression:
    mencoder -dvd 2 -o titel2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy

7.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:
  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:
  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:
  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:
  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:
  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:
  mencoder -mf on:w=800:h=600:fps=25:type=tga -ovc copy -o output.avi \*.tga

7.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
  rm untertitel.idx untertitel.sub
  mencoder -dvd 1 -vobsubout untertitel -vobsuboutindex 0 -sid 2 -o frameno.avi -ovc frameno -oac mp3lame -lameopts vbr=3
  mencoder -dvd 1 -oac copy -ovc divx4 -divx4opts pass=1
  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
  rm untertitel.idx untertitel.sub
  mencoder film.mpg -ifo film.ifo -vobsubout untertitel -vobsuboutindex 0 -vobsuboutid fr -sid 1

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

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