Encodieren - MEncoder - The Movie Encoder for Linux

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

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

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

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