Meine kleine mencoder-Fibel

Seit Handbrake keine DivX-Unterstützung mehr anbietet, war ich auf der Suche nach adäquatem Ersatz und bin zwischenzeitlich bei OGMRip hängengeblieben. Das läuft soweit ganz gut…
…bis ich gestern versucht habe, mit OGMRip einzelne Kapitel eines Films zu einer Datei zusammenzurippen (namentlich die Nonstop-Nonsens-Slapstick-Filme). Hier stößt OGMRip an seine Grenzen, denn es können „nur“ zusammenhängende Kapitel gerippt werden, nicht aber z.B. Kapitel 2, 6, 9 und 14.

Daher hab ich mich ein wenig mit der MEncoder-CLI beschäftig und möchte meine typischen Befehlsfolgen hier sammeln.

 
 

DVD rippen

Um einen DVD-Film als DivX auf die Festplatte kopieren zu können, muss man zunächst feststellen, welcher Titel auf der DVD den Film beinhaltet. Meist ist es der Titel mit der längsten Spieldauer. Der folgende Befehl listet alle Titel einer DVD auf:

lsdvd

Alternativ kann man auch per

mplayer dvd:// -v

die DVD wird kurz angespielen. Sobald das Bild da ist, kann der Prozess beendet werden. In der Ausgabe sucht man nun die folgende Stelle:

Reading disc structure, please wait...
There are 19 titles on this DVD.
There are 1 angles in this DVD title.

Angenommen der Film wäre auf der DVD unter Titel 3 zu finden, dann würde der folgende Befehl ein DivX-Abbild des Films als output.avi generieren:

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600 -oac mp3lame -lameopts cbr:br=128 -of avi -o output.avi dvd://3

Hierbei habe ich die Video-Bitrate auf 1600 und die MP3-Bitrate auf 128 gesetzt – meine Standardwerte 🙂

Manchmal kann es das Bild verbessern, wenn man einen so genannten Deinterlace-Filter setzt. Dieser versucht dann, bei Kamerabewegung auftretende streifenartige Linien aus dem Bild zu entfernen. Es existieren zahlreiche solcher Filter, ich persönlich habe mit kerndeint die besten Erfahrungen gemacht. Der Befehl ändert sich hierbei wie folgt:

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output.avi dvd://3

Ein noch besseres Bild erhält man, wenn man zwei Encoding-Durchläufe machen lässt. Hierbei werden im ersten Durchlauf einige Informationen in einer kleinen Log-Datei gespeichert. Während des zweiten Durchlaufs kann mencoder dann auf diese Log-Datei zugreifen, und so ein besseres Resultat erzielen. Da wir „nur“ an der Log-Datei interessiert sind, wird die output-Datei im ersten Durchlauf auf /dev/null umgeleitet. Die zwei Befehle lauten nun:

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=1 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o /dev/null dvd://3

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=2 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output.avi dvd://3

Wenn die DVD mehrere Tonspuren beinhaltet (z.B. Deutsch, Englisch, Französisch, usw.), kann die gewünschte Spur mit dem Parameter -aid angegeben werden. Hierbei gilt folgende Aufteilung:

  • -aid 128 = erste Tonspur
  • -aid 129 = zweite Tonspur
  • -aid 130 = dritte Tonspur
  • … usw.

Wenn man sich nicht sicher ist, welche die richtige Tonspur ist, kann man den Film mit mplayer kurz anspielen lassen:

mplayer -aid 128 dvd://3

(ist nicht die gewünschte Tonspur? Na dann versuch mal:)

mplayer -aid 129 dvd://3

Durch die Angabe des Parameters (hier: für die zweite Tonspur) ändert sich der Befehl nun wie folgt:

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=2 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -aid 129 -of avi -o output.avi dvd://3

 
 

ISO-File

Wenn nicht die DVD, sondern ein ISO-File vorliegt, muss dieses erst per loop-mount eingehängt werden. Ich habe hierfür den Ordner /media/loop erstellt.

sudo mkdir /media/loop

Das Image kann nun wie folgt eingehängt werden:

sudo mount -t iso9660 -o loop=/dev/loop0 /Pfad/zum/image.iso /media/loop

Jetzt wird der Befehl durch den Parameter -dvd-device wie folgt ergänzt:

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output.avi -dvd-device /media/loop dvd://3

 
 

DVD-Kapitel rippen

Es kann ja mal vorkommen, dass man nicht den gesamten Film, sonder nur ein paar Kapitel des Films rippen möchte. Für aneinanderliegende Kapitel geht das recht einfach. Der oben eingeführte Befehl wird wie folgt durch den Parameter -chapter STARTKAPITEL-ENDKAPITEL erweitert:

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output.avi dvd://3 -chapter 1-4

In diesem Beispiel würden also die Kapitel 1-4 des dritten Titels der DVD gerippt.

Möchte man hingegen „auseinanderliegende“ Kapitel zu einer Datei zusammenrippen (so wie ich bei meiner Nonstop-Nonsens-Sammlung), müssen zunächst alle Kapitel einzeln ausgelesen und anschließend zusammengeführt werden. Im folgenden Beispiel machen wir dies mal für die Kapitel 2, 5 und 9 des dritten DVD-Titels:

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output1.avi dvd://3 -chapter 2-2

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output2.avi dvd://3 -chapter 5-5

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output3.avi dvd://3 -chapter 9-9

mencoder output1.avi output2.avi output3.avi  -oac copy -ovc copy -o Zusammen.avi

Die ersten 3 Befehle lesen die einzelnen Kapitel aus, der letzte Befehl setzt sie zu einer Datei zusammen.

Auch hier möchte ich darauf hinweisen, dass zwei Durchläufe ein wesentlich besseres Bild erzeugen. Die ersten drei Befehle erweitern sich also auch hier dementsprechend:

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=1 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o /dev/null dvd://3 -chapter 2-2

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=2 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output1.avi dvd://3 -chapter 2-2


mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=1 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o /dev/null dvd://3 -chapter 5-5

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=2 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output2.avi dvd://3 -chapter 5-5

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=1 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o /dev/null dvd://3 -chapter 9-9

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=2 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output3.avi dvd://3 -chapter 9-9

mencoder output1.avi output2.avi output3.avi  -oac copy -ovc copy -o Zusammen.avi

 
 

DVD-Tonspur extrahieren

Der nachfolgende Befehl extrahiert den Ton in eine MP3-Datei namens test.mp3.

mencoder dvd://# -dvd-device /dev/dvd0 -chapter #-#  -aid 128 -oac mp3lame -lameopts aq=2:abr=192 -ovc copy -of rawaudio -o test.mp3 

Die Rauten (#) sind hierbei Platzhalter für den DVD-Titel und dessen Kapitel. Möchte man beispielsweise aus dem zweiten Titel der DVD die Kapitel 3 bis 4 extrahieren, ändert sich die Eingabe wie folgt:

mencoder dvd://2 -dvd-device /dev/dvd0 -chapter 3-4  -aid 128 -oac mp3lame -lameopts aq=2:abr=192 -ovc copy -of rawaudio -o test.mp3 

 
 

Filmdateien umwandeln

Wenn eine Filmdatei bereits vorliegt, jedoch in einem anderen Format (MPEG, MKV, o.ä.) erstellt wurde, kann mencoder diese ins DivX-Format umwandeln. Die Befehlfolge ist die selbe wie oben beschrieben. Es muss lediglich am Schluss das „dvd://“ durch den Dateinamen der Originaldatei angegeben werden, also z.B.

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=1 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o /dev/null Originalfilm.mkv

mencoder -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vbitrate=1600:vpass=2 -vf kerndeint -oac mp3lame -lameopts cbr:br=128 -of avi -o output.avi Originalfilm.mkv

 
 

Playstation 3

Ich habe eine Playstation 3 und verwende diese unter anderem auch dafür, DivX-Filme auf dem Fernseher abzuspielen. Leider ist es so, dass die PS3 sehr „kleinlich“ ist, was das Format angeht. So stößt man häufig auf den Fehlercode 00288bc oder 800288bf. Hier meldet die PS3 dann nur „unbekanntes Format“ und weigert sich, die Datei abzuspielen. Dies betrifft sowohl das Abspielen vom USB-Stick oder der Festplatte, wie auch per Mediatomb. Manchmal reicht es schon, wenn man die Endung .avi in .mpg umbenennt. Sollte das aber keinen Erfolg bringen, schafft der folgende mencoder-Befehl Abhilfe:

mencoder -ffourcc DX50 -oac mp3lame -ovc lavc -ofps 25 -lavcopts vcodec=mpeg4:vbitrate=1800:vhq:keyint=15:acodec=mp3:abitrate=128:aspect=4/3 -af volnorm=1 -lameopts cbr:br=128 -srate 44100 -vf pp=ci,harddup -o NeuerOutput.DivX.mpg Filmdatei.avi

Dieser Befehl erzeugt eine DivX-Datei mit .mpg-Endung, die dann auf der PS3 wiedergegeben werden kann.

 


So, das war’s erstmal für heute, weitere Befehl-Rezepte werde ich ergänzen, sobald ich sie benötige.


Links:

This entry was posted in Ubuntu, ubuntuusers. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback.

5 Comments