H.264 Kompression mit Mencoder (Update)

Voraussetzungen:

  • Mplayer/Mencoder unter Linux bzw jedem anderem OS, das die libx264 mitbringt
  • ffmpeg – normalerweise nicht weit von libx264 zu finden
  • eventuell MP4creator aus dem GPAC-Paket – für Streaming Video

Wozu? H.264 bzw. MP4-Videos sind portabel (laufen auf Smartphones, PDAs und sogar Äppelzeugs*), platzsparend, streamingfähig und qualitativ ausgesprochen hochwertig.

Wie? Beispiel: Titel 2 einer PAL-DVD unter Linux in Quicktime-kompatibles MP4 mit H.264-Video und AAC-Audio rippen, in zwei Durchgängen komprimieren und in eine konforme MP4-Datei packen:

mplayer dvd://2 -vf cropdetect

Mplayer einige Sekunden in den Hauptfilm hinein laufen lassen, bis die Ausgabe von -vf cropdetect (automatische Bildranderkennung) verlässliche Werte ausgibt. Dann mencoder bzw. die Option für den Crop-Filter -vf crop=x:y:mx:my damit „füttern“ und die Optionen für den Videoskalierer (hier: PAL, 720×576 Pixel) anhängen, um am Ende wieder eine verträgliche Bildgrösse zu erhalten. Die komplette Filterkette aus crop und scale lautet dann z.B: -vf crop=688:560:10:8,scale=720:576. Wird eine kleinere Bildgrösse -zB für portable Geräte- gewünscht, lässt sich diese analog zu den 720:576 eintragen. Der Befehl für den ersten Durchgang lautet dann:

mencoder dvd://2 -ovc lavc -oac lavc -lavcopts vpass=1:vbitrate=860:autoaspect:vcodec=libx264:acodec=ac3:abitrate=128:turbo -passlogfile x264_2pass.log -vf crop=688:560:10:8,scale=720:576 -o video.avi

Zum Schluss des ersten Durchgangs sollte mplayer einige Daten, darunter die Bitrate des Videostreams ausgeben. Diese lässt sich entweder übernehmen, falls die Bandbreite weniger Rolle spielt, als die Qualität, oder -meist in Verbindung mit einer kleineren Bildgrösse z.B. 320×240 oder 640×480- reduzieren. Somit folgt der zweite Durchgang:

mencoder dvd://2 -ovc lavc -oac lavc -lavcopts vpass=2:vbitrate=860:autoaspect:vcodec=libx264:acodec=ac3:abitrate=128 -passlogfile=x264_2pass.log -vf crop=688:560:10:8,scale=720:576 -o video.avi

Das Ergebnis ist ein in H.264 komprimiertes Video, allerdings noch im AVI-Container und mit AC3-Audio. Den Rest -Verpacken in einen MP4-Container und AAC-Audiokompression- erledigt ffmpeg:

ffmpeg -i video.avi -vcodec copy -acodec libfaac video.mp4

…und wer streamingfähiges Video will schickt das ganze noch durch den MP4Creator: mp4creator -o video.mp4

Update:Ich habe -dank einer Google-Suche als Referrer- bei dasistdasen.de ein ganz ähnliches Skript gefunden, das ich hier nicht vorenthalten möchte. Es kommt ohne FFMPEG aus und nutzt die -dumpfile Option von Mplayer. Dazu auch noch zwei Bemerkungen meinerseits: Ich habe mit einem ganz ähnlichen Versuch -nur mit XVID, anstatt DivX- recht gute Erfahrungen gemacht: mein DVD-Player und das Blackberry Curve 8300 zum Beispiel vertragen den XVID-Codec besser, als DivX, da von DivX einige Versionen angenommen werden, andere jedoch nicht. Wenn es um möglichst gute Audio-/Videosynchronizität beim Streamen geht, empfehle ich allerdings die Variante mit FFMPEG. Die Framerate eines Videos, wie in den Kommentaren des verlinkten Artikels gefragt, geben sowohl Mplayer, als auch FFMPEG bzw. ffplay aus – als Angabe der Framerate akzeptieren ffmpeg, mencoder und mp4creator jeweils die Option „-r $FRAMERATE“ Your mileage, however, may vary

2. Update: Ich merke ausserdem gerade, dass das Skript auf dasistdasen.de zwar iPod/Glotzhändy-kompatibles MPEG4 (aka DivX) im modischen MP4-Container liefert, aber eben kein H.264, was im Grunde eine Themaverfehlung meinerseits darstellt. Abgesehen davon, dass diese unter Umständen nicht auf QuickTime unter Windoze laufen, um die Hälfte grösser sind und sich nicht so einfach (sprich: via FlowPlayer und Flash 9) streamen lassen, stellt das für die meisten Anwender allerdings wohl kein grösseres Problem dar. VLC, DivX und die meisten Linux- und auch Hardware-Player spielen das problemlos ab. Wer jedoch auf minimale Grösse, QT, oder Flash-Kompatibilität angewiesen ist, sollte anstatt MP4Creator die folgende Zeile ausführen lassen:

ffmpeg -i INPUT.avi -sameq -acodec libfaac -ab 112k -vcodec libx264 OUTPUT.mp4

Das kann etwas dauern… Anschliessend sollte für Streamerware noch „mp4creator -O OUTPUT.mp4“ ausgeführt werden.

*pun intended: die haben das, glaube ich, sogar erfunden 😉

Über Tom

"Die meisten 'normalen Leute' in meinem Bekanntenkreis würden mich wohl als 'Computernerd' bezeichnen. Die meisten Computernerds -einschliesslich meiner selbst- wären darüber anderer Meinung."
Dieser Beitrag wurde unter Linux abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Da könnte ja jeder kommen und kommentieren!

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.