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. 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: -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:
    mencoder beispiel-svcd.mpg -ovc lavc -lavcopts vcodec=mpeg4 -vop scale=640:480 -sws 2 -oac copy -o ausgabe.avi

7.3. Stream-Kopiermodus

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

7.4. 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. 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.6 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 unten in der globalen Optionen-Sektion und in den Manpages gefunden werden.

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

Erstellung einer DivX4-Datei aus einigen JPEG-Dateien im aktuellen Verzeichnis:
  mencoder frame001.jpg,frame002.jpg -mf on:w=800:h=600:fps=25 -ovc divx4 -o ausgabe.avi

Erstellung einer Motion JPEG-Datei (MJPEG) aus allen JPEG-Dateien im aktuellen 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-Datei (MPNG) aus allen PNG-Dateien im momentanen Verzeichnis:
  mencoder \*.png -mf on:w=800:h=600:fps=25:type=png -ovc copy -o ausgabe.avi

Erstellung einer Motion TGA-Datei (MTGA) aus allen TGA-Dateien im aktuellen Verzeichnis:
  mencoder \*.tga -mf on:w=800:h=600:fps=25:type=tga -ovc copy -o output.avi

7.7. 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.8. 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 -vop crop=714:548:0:14 -oac copy -o ausgabe.avi