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.