MPEG-4 Kodierung
MPEG-4 kodierte Filme sind platzsparend, und eigenen sich gut um auf CD oder sogar auf Festplatte archiviert zu werden. Mit Hilfe von transocde lassen sich VOB-Dateien leicht in DIVX-Dateien umwandeln, man benötigt noch nicht einmal ein graphisches Tool dafür.
Mit transcode lässt sich recht leicht aus einer beliebigen Video-Quelle ein DivX/XVid File erzeugen. Die hier vorgestellten Kommandos verwenden die offiziellen DivX 5.0.5 Codecs, sollten sich aber analog auch mit den aktuellen XVid Codecs verwenden lassen.
Die folgenden Komamndozeilen werden vollständig mit Hilfe von Shell-Variablen gesteuert. Sie erwarten die Eingabedatei im gleichen Verzeichnis mit dem Namen work.vob, was durchaus auch ein Symlink sein kann.
Hat man, z.B. von einer DVD, mehrere VOB-Dateien, kann man diese mit cat file1.vob file2.vob > zusammen.vob einfach zusammenfassen.
Mit Hilfe von tcprobe -i dateiname lassen sich Details zur angegebene Datei erfahren. Dies funktioniert sowohl für Video- als auch für Audio-Daten.
Shell-Variable
Folgende Shell-Variablen werden verwendet:
$aspect
Die Export-Aspect-Ratio, die im DivX Header gespeichert wird. Leider wird sie von den wenigsten Playern ausgelesen. Es bestehen zwei Möglichkeiten: Man setzt diese Variable grundsätzlich auf 1, was eine 1:1 ASR signalisiert, die tatsächliche ASR muß dann im Player gesetzt werden. Ins gesamt stehen folgende Werte zur Auswahl:
- 1:1
- 4:3
- 16:9
- 2.21:1
$audiostream
Die ID des zu extrahierenden Audio-Streams, beginnend bei 0 für den ersten Stream.
$audioparm
Parameter für die Verarbeitung des Audiostreams, grundsätzlich bestehen zwei Möglichkeiten:
- -A -N 0x2000: Diese Kombination ist für AC-3 Audio-Streams geeignet. Die Stream wird unverändert in den Zielcontainer übertragen ("passthrough").
- -b 192,0,5,1: Alternativ kann der Eingabe-Stream in einen Stereo-MP3-Stream codiert werden. Die Parameter werden in der Man-Page von transcode genauer erläutert, die hier verwendete Konfiguration sollte aber alle Fälle abdecken.
$bitrate
Die gewünschte, durchschnittliche Bitrate, in kBit/s.
$crop
Cropping-Parameter, zum abschneiden der "schwarzen Balken". Syntax ist top,left,bottom,right; alternativ vertical,horizontal für symmetrische Schnitte.
$customparm
Beliebige weitere Parameter für die Verarbeitung der Streams. Praktische Beispiele:
- -c h:m:s-h:m:s: Einschränkung der Kodierung auf das angegebene Zeitfenster. Nützlich für Encoding-Tests.
- -I 3: Deinterlacing mit einem qualitativ hochwertigen Filter.
$nice
Nice-Level für transcoding-Prozesse. Ich würde dies immer auf 19 setzen, damit nur "übrige" Rechenzeit für die Verarbeitung verwendet wird.
$scale
Skaliert das Zielvideo auf die angegebenen Maße neu, beispielsweise 352x576 für ein DVD-Kompatibles Format.
Vollständiges Beispiel
Eine vollständige Besetzung der Variablen könnte also so aussehen:
audioparm="-b 192,0,5,1 -J normalize"
audiostream=0
aspect=3
bitrate=1200
crop="90,5,88,3"
customparm=
scale=
nice=19
Hilfsmittel zur Ermittlung der Parameter
Die Frage, wie die Parameter zu besetzen sind, stellt sich zurecht. Auch hier stellt Transcode eine ganze Reihe von Möglichkeiten zur Verfügung:
Clipping Detection
Transcode besitzt einen Video-Filter, der den eigentlichen Bildbereich isoliert. Logos von Fernsehsendern (getestet mit allen möglichen Premiere-Sendern) werden dabei ignoriert, so daß der tatsächliche Bildbereich gefunden wird:
transcode -J detectclipping \
-i work.vob \
-c 0:5:00-0:5:30,0:10:00-0:10:30
Nach dem Ende der Ausführung hat man die für den $crop notwendigen Parametersatz.
Interlace Detection
Filme mit Interlacing lassen sich ebenfalls erkennen, auch wenn dieser Filter weniger zuverlässig arbeitet, als die Clipping Detection. Die Ausgabe des Kommandos zeigen alle Video-Frames mit Interlacing an:
transcode --progress_off \
-J 32detect=verbose \
-i work.vob \
-c 0:5:0-0:10:0 \
2>&1 | grep -v "interlaced = no"
moviecalc.xls
Ausgehend von der clipping detection können mit der Tabelle "Div-X Transcoding" aus moviecalc.xls die restlichen Barameter errechnet werden.
Dabei müssen die Abmasse des ursprünglichen Containers, dessen Aspect Ratio (beides mit tcprobe zu ermitteln) und die ermittelten Clipping-Parameter eingetragen werden.
Je nachdem welches Ziel man bei der Kodierung verfolgt, kann nun der entstehende Zielcontainer, dessen Aspect Ratio und eine sinnvolle Bitrate ermittelt werden.
Zum Thema Bitrate einen Hinweis: Die Excel-Tabelle ermittelt den sogenannten "Bits per Pixel"-Wert (BPP), er sollte für MPEG-4 für eine sehr gute Bildqualität sollte eine Bitrate in der Größenordnung von 0,2 bis 0,22 liegen. Grössere Werte bringen keine nennenswerte Verbesserung der Qualität.
Eine Kodierung auf "handliche" CD-Grösse wird von moviecalc nicht unterstützt, dazu gibt es genügend andere Hilfsmittel.
Die eigentliche Umwandlung
Hier bestehen drei Möglichkeiten, von dennen alle jeweils einen Audio-Track mit kodieren. Alle Varianten arbeiten mit 2-Pass-Encoding:
Umrechnung des Filmes in ein 1:1 Seitenverhältnis
Ermittelt man mit Hilfe von moviecalc.xls die eigentliche Aspect Ratio des Filmes, kann man den notwendigen Zielcontainer für eine unverzerrte Ausgabe ohne weitere Hilfsmittel errechnet werden. Dazu muß der Film entsprechend skaliert werden. Folgender Kommandoblock führt die komplette Umrechnung durch:
transcode -i work.vob -V --avi_limit 5000 -nice $nice \
-j $crop -Z $scale -R 1 -w $bitrate \
--divx_vbv_prof 3 --a52_drc_off -y divx5,null \
-a $audiostream $customparm ; \
transcode -i work.vob -o work.avi -V --avi_limit 5000 -nice $nice \
-j $crop -Z $scale -R 2 -w $bitrate \
--divx_vbv_prof 3 --a52_drc_off -y divx5 \
-a $audiostream $audioparm $customparm
Umrechnung des Filmes ohne Skalierung
Dies ist die von mir bevorzugte Variante: Sie schneitet die schwarzen Balken ab, führt aber keine Skalierung durch. Somit entsteht ein Video-Stream mit eine unüblichen Aspect-Ratio, beispielsweise 12:5.
Der Vorteil dieser Lösung liegt darin, daß das Video-Material nicht umgerechnet werden muß; das kann der Player zur Laufzeit machen. Man verliert so keinerlei Video-Informationen, was zur Laufzeit eine bessere Bildqualität liefert.
Der Nachteil liegt im dem fehlenden Kompfort. Die Aspect Ratio muß notiert werden (einfacherweise im Dateinamen), und es wird ein Player benötigt, der die explizite Einstellung einer beliebigen Aspect Ratio ermöglicht. http://www.videolan.org ist ein sehr guter freier Player der dies unterstützt, ebenso der offizielle DivX-Player.
Der Parameter $scale wird hierbei ignoriert.
transcode -i work.vob -V --avi_limit 5000 -nice $nice \
-j $crop --export_asr $aspect -R 1 -w $bitrate \
--divx_vbv_prof 3 --a52_drc_off -y divx5,null \
-a $audiostream $customparm ; \
transcode -i work.vob -o work.avi -V --avi_limit 5000 -nice $nice \
-j $crop --export_asr $aspect -R 2 -w $bitrate \
--divx_vbv_prof 3 --a52_drc_off -y divx5 \
-a $audiostream $audioparm $customparm