Archiv des Monats Juli 2005

Gentoo: mplayer als DVD-Encoding-Zwischenstufe

Dieser Beitrag stammt aus meinem alten Blog und wurde nachträglich übertragen. Etwaige Links auf alte Blogeinträge wurden angepasst.

Wer unter Linux DVDs erstellen will, der wird das kennen: unzählige Howtos, die man vielleicht nichtmal so schwer findet, die dann aber nicht das tun, was man will. Das ist zum Teil auch so ein Howto, aber ich denke, es beleuchtet einen Aspekt, der einiges einfacher macht.

Meine Versuche fanden unter Gentoo Linux sowohl auf einem Athlon XP als auch auf meinem Notebook mit Athlon 64 statt, auf dem auch eine amd64-Version läuft. Die Ergebnisse sollten sich also auch auf andere Architekturen als x86 anwenden lassen.

Bevor ich zu meinem gefundenen Kniff komme, will ich doch noch zumindest den Anschein erwecken, ein allgemeines HowTo zu schreiben.

Allgemeine Videokonvertierungen leistet an der Konsole mencoder, der zum mplayer gehört. Für die Freunde von VirtualDub, die sich etwas ähnliches auch in der Linux-Welt wünschen, ist Avidemux gut geeignet.

Was ich hier nicht erwähne: Wer den Ton separat verwerten will, kann ihn zum Beispiel auch mit mplayer extrahieren („-oa pcm“) die die Wave-Datei mit lame o.ä. encoden. Oder mit ffmpeg, wenn es AC3 sein soll. Für die finale Zusammenstellung ist dvdstyler mittlerweile mit ruhigem Gewissen zu empfehlen. Hier kann man manuell Menüs bauen und MPEG2-Dateien als Datentracks einfügen, und daraus dann ein ISO-Image bauen, mit dem man eine DVD brennen kann.

Ich hatte eigentlich garkein Problem, aber ich wollte es wissen: ich habe eine TV-Serie in HDTV (1280×720) auf der Platte liegen, in XviD kodiert. Ich wollte mal eine DVD zum Testen machen, die aus dieser hohen Qualität gefertigt ist. Das Problem: es handelt sich um einen Anime, bei dem die Untertitel als separate Datei dabei sind. Nur mplayer ließ sich bewegen, diese Untertitel abzuspielen.

mpeg2enc, der MPEG-Encoder, benötigt rohe Bilddaten im YUV-Format. Die kann mplayer auch liefern, allerdings nur in eine Datei. Es ging um eine 30minütige Episode; meine Hochrechnung für den Platzbedarf ging stark in Richtung 100GB. Nicht gut. Ein Pipe, ja, ein Pipe das wäre schön gewesen.

Und so hab ich mich auf meinen Hosenboden gesetzt und mir endlich mal „named pipes“ angesehen. Die Bezeichnung hatte ich irgendwo aufgeschnappt. Es geht einfach darum, dass man, statt Befehle mit | zu verketten, auch ein „named pipe“ verwenden kann. Dies legt man mit mkpipe dateiname an und kann dann ein Programm starten, dass mit > dateiname aufgerufen wird, und eins mit < dateiname, und voila, übergeben die sich die Daten über dieses „named pipe“.

Also legte ich ein „named pipe“ namens stream.yuv an, so nennt mplayer die Datei, fest verdrahtet…

# mkpipe stream.yuv

Dann startete ich mplayer:

# mplayer eingabe.avi -nosound -benchmark -vo yuv4mpeg weitere Optionen

(-nosound schaltet die Soundausgabe ab, -benchmark schaltet auf maximale Decodiergeschwindigkeit.)

In einer anderen Konsole konnte ich jetzt die Codierung starten. Dabei musste ich eine Vorskalierung dazwischenschalten (yuvscaler von dem mjpegtools), um auf DVD-Format zu kommen, und schließlich in mpeg2enc hinein:

# cat stream.yuv | yuvscaler -n n -o DVD | mpeg2enc -o ausgabe.m2v -f 8 -b 3800 -n n -a 3

(-n n steht hier für NTSC – so war meine Quelle, und so sollte auch die DVD werden –, -f 8 für den Codiermodus (DVD, vorbereitet zur Weiterverarbeitung mit dvdstyler), -b 3800 für die Bitrate und -a 3 für das 16:9 Format.)

Ich halte diese Methode für die simpelste, die Möglich ist. Auch wenn mich ich mplayer nur benutzen wollte, weil es ein spezifisches Problem gab, ist das sehr praktisch. mplayer kann so gut wie alles abspielen, also kann man so aus vielen Formaten – auch Containern wie OGG oder Matroska (MKV) – die Quellendaten für MPEG2-Komprimierung bekommen.

Comments off