Videobearbeitung
Es geht darum aus einer beliebigen Datei mit einem beliebigen Format eine veränderten Datei mit möglicherweise anderem Format und anderer Auflösung zu machen. Endziel ist insbesondere die VideoCD, damit man sich Filme am Fernseher ansehen kann.
- Bei der linearen Videobearbeitung liegt zwischen jedem Bearbeitungsschritt ein Rechenzyklus, der wegen der grossen Datenmenge von Videodateien typischerweise lange dauert.
- Nichtlineare Videobearbeitung sammelt alle Bearbeitungsschritte und wendet sie erst in einem abschliessenden Render-Vorgang auf die Videodaten an. Beispiele: Cinelerra, Pitivi
Benötigte Programme
- Avifile > 0.7.15 (0.7.16 problematisch)
- MPlayer > 0.90pre8 - Installation: Selber kompilieren mit compiler 2.95.x oder 3.x+. Bei ./configure werden am besten alle Optionen aktiviert, zumindest wenn sie etwas mit AVI oder MPG zu tun haben. Falls noch was fehlt, dann installiert es nach und führt ./configure erneut aus. Danach mit "make" compilieren und per "make install" (bzw. "checkinstall") installieren. Hier sollten die selben Codecs installiert sein wie auch schon bei Avifile. Je nach dem arbeitet eine vorkompilierte Version besser.
- MJpegtools > 1.60 - Installation: das selbst kompilieren bringt Vorteile weil hier die Encoder drin sind, die nachher den Hauptteil der Arbeit machen werden. Auf der homepage findet sich auch ein RPM-Paket. Bei dessen Verwendung müssen zusätzlich die Pakete "mjpegtools" und "mjpegtools-devel" installiert werden.
- Mpeg2Dec > 0.7 - Installation: ./configure, make, make install
- Transcode > 0.6.1
- VCDImager > 0.7.12
- cdrdao > 1.1.7
Weitere nützliche Software umd die erzeugten Dateien testen bzw. richtig abspielen zu können:
- Xine - Installation: Bei Bedarf gemäss Anleitung selber kompilieren
- VideoLanClient / VLC
Transcode 0.6.2 wird import_ffmpeg beherrschen. Die pre-Version kann dies bereits. Daher sollte schon ffmpeg kompiliert werden:
- FFmpeg (CVS Version!) - Installation: Nach dem Durchführen von "./configure" muss die Liste angesehen werden. Einige Optionen werden Enabled und andere Disabled sein. Überlegt euch ob das was da Aus geschaltet ist nicht doch bei euch installiert ist und führt dann ein "./configure --help" aus. Meine Zeile sah z.B. so aus: ./configure --enable-a52bin --enable-mp3lame --enable-vorbis. Setzt also voraus das Ogg Vorbis, liba52 bzw. a52dec und die libmp3 installiert sind. Danach make und make install bzw. checkinstall ausführen. Anmerkung: Ab transcode 0.6.2 kann ffmpeg2 dann als Videodecoder verwendet werden. Audio macht aber wohl noch Probleme. Also z.B. -x ffmpeg,af6 benutzen. Das ist schneller als af6,af6 oder mplayer,mplayer.
Umwandlung einer Videodatei
Als Beispiel für die Umwandlung wird eine DivX-Datei ins VCD-Format umgewandelt. Hierbei sind besondere Einstellungen für Bild und Ton notwendig damit der DVD Player sie später abspielen kann. Bei einer Umwandlung von DivX zu DivX (mit z. B. anderer Auflösung) ist das nicht nötig, da kann alles frei gewählt werden.
Anmerkung: Nicht alle DVD-Spieler können auch selbst gebrannte VideoCDs abspielen, selbst dann nicht wenn sie der VCD Norm entsprechen.
Eine Videodatei ist eine Containerdatei, der im wesentlichen Bild- und Tondaten enthält. Diese sind jeweils in einem bestimmten Format gespeichert und zwar mit einem bestimmten codec. Die codecs unterscheiden sich bezüglich Grösse, Leistung und Qualität.
- Videoformate: Avi, Mpeg, Quicktime, WMV, Realplay
- Videocodecs: DivX (3 - 5), Mpeg4, Sorenson
- Audiocodecs: Mp2, Mp3
Eine VCD beherrscht nur ganz bestimmte Formate. Daher müssen diese entsprechend angepasst werden. Für eine AVI-Datei mit DivX müsste also folgendes verändert werden:
- DivX zu Mpeg (VCD) oder Mpeg2 (SVCD)
- Mp3 zu Mp2
- beliebige Auflösung zu z. B. 480 x 576 (SVCD) oder 352x288 (VCD)
- beliebiger Ton zu z. B. 192 KBps (SVCD) oder 224 KBps (VCD)
Besondere Aufmerksamkeit verdient die Auflösung. Ein Film von 400x300 hat ein Verhältniss von 4:3. Beim Anpassen auf 480x576 nimmt die Breite um 80 und die Höhe um 276, was eine Verzerrung des Bildes ergeben würde. Besser wäre hier z. B. ein Format von 480x400, allerdings entspricht dieses nicht mehr dem VCD-Standard und wäre mit einem DVD-Spieler nicht abspielbar. Der fehlende Teil des Bildes wird deshalb einfach durch schwarze Ränder ersetzt, die ein fester Bestandteil des Films werden. Die Rechnung dafür
lautet:
576 - 400 = 176 / 2 = 88 pro Rand (einer oben, einer unten).
Transcode benutzt nun einen decoder um die Eingangsdatei (z. B. AVI) zu decodieren und das Bild und den Ton getrennt in einer Temporärdatei abzulegen. Zeitgleich werden encoder verwendet, die eine Bild- und eine Tondatei erzeugen, die nun das richtige Format und die richtige Auflösung haben. Anschliessend werden Bild und Ton zur fertigen Datei zusammengefügt, z. B.zu einer neuen AVI- oder MPG-Datei, je nach dem was gewünscht ist und die encoder können.
Sind die Bedingungen für eine VCD erfüllt, so liegt ein VCD-kompatibles mpeg vor, das zu einer VCD weiter verarbeitet werden kann. Die mpeg-Datei wird nun mit dem VCDImager in eine CUE- und eine BIN-Datei umgewandelt, die als image gebrannt werden können und einige zusätzliche Daten enthalten, damit der DVD-Spieler die VCD abspielen kann. Brennen im DAO Modus geht am besten mit cdrdao.
Ein typischer transcode-Befehl sieht so aus:
$ transcode -i infile -x decoder -o outfile -V -y videoencoder,audioencoder -B height,width,factor -X width,height,factor -j top,right,bottom,left -F "video encoder options" -E "audio encoder options"
Die Optionen bedeuten im einzelnen:
-i infile | Zu bearbeitende Videodatei, z. B. eine DivX 5 AVI-Datei. |
-x decoder | Dieser decoder (z. B. mplayer oder aviplay) liest die Eingangsdatei aus und wandelt sie in ein
weiterverarbeitbares Format um. Beispiele: -x mplayer,mplayer - MPlayer als decoder für Bild und Ton -x af6,af6 - Avifile als decoder für Bild und Ton Anzeige einer kompletten Liste der verfügbaren decoder: $ ls /usr/local/lib/transcode/import* |
-V | Der decoder legt temporär eine YUV-Datei an, in die die decodierten Daten abgelegt werden. Sollte es Probleme wie Verfärbungen geben, so kann das mit dem encoder zusammen hängen. In diesem Fall kann "-V" durch "-k" ersetzt werden, womit eine Farbkorrektur vorgenommen und das Problem möglicherweise gelöst wird. |
-y videoencoder,audioencoder | Bei ausreichender Rechnerleistung ist es sinnvoll, die YUV-Datei gleich wieder auszulesen und mit den encodern für Bild (z. B. mpeg2enc, mpeg, divx5) und Ton (z. B. mp2enc, toolame, divx5) weiter zu verarbeiten. Videoencoder:
Audioencoder:
Beispiele: |
-B height,width,factor | Verkleinerung des Bildes um Höhe mal Faktor und Breite mal Faktor. |
-X height,width,factor | Vergrösserung des Bildes um Höhe mal Faktor und Breite mal Faktor. |
-j top,right,bottom,left | Hinzufügen oder Entfernen der Ränder. Negative Zahlen fügen Ränder hinzu, positive Zahlen entfernen Ränder. |
-B und -X können zugleich eingesetzt werden. Das macht aber nur Sinn, wenn Höhe oder Breite abwechselnd jeweils Null sind. Unter http://tibit.org/video/zoomto.sh gibt es das Skript "zoomto", das nach "/usr/bin/zoomto" kopiert werden kann. Benutzung: $ zoomto widthxheight newwidthxnewheight 160 = 5 x 32 = 10 x 16 = 20 x 8 96 = 3 x 32 = 6 x 16 = 12 x 8 In diesem Fall kommt man mit allen Faktoren auf eine ganze Zahl und kann sich daher aussuchen was man nimmt, z. B. -B 5,0,32 -X 0,12,8 Als Ergebnis erhält man das gewünschte Format von 480x576. 4. Bei einer zu grossen Verzerrung müssen schwarze Ränder eingefügt werden. Im Beispiel wird die Höhe nicht um 96 sondern nur um 56 vergrössert, das Endformat ist dann 480x536. Es fehlen also 40 zur korrekten Grösse. Die Rechnung lautet: 480 + 56 = 536 (resultierendes Format) 536 - 576 = 40 (fehlende Höhe) 40 / 2 = 20 (Höhe für einen schwarzen Rand) 5. Normalerweise packt man einen Rand nach unten und einen nach oben. Die Option lautet dann: -j -20,0,-20,0 Die kompletten Optionen lauten dann also: -B 5,0,32 -X 0,7,8 -j -20,0,-20,0 6. Damit hat der Film nun das richtige Format und eine passende Auflösung. Das Script "zoomto" meint dazu: $ zoomto 640x480 480x576 Multiples of 32: -X 3,0,32 -B 0,5,32 Multiples of 16: -X 6,0,16 -B 0,10,16 Multiples of 8: -X 12,0,8 -B 0,20,8 7. -Y bedeutet im übrigen nur, dass die Ränder während des Encodiervorgangs eingefügt werden. |
|
-F "video encoder options" | Optionen für den Videoencoder (gemäss manpage). man mpeg2enc zeigt weitere Optionen. Ein Beispiel für Videoencoder-Optionen ist folgendes: -F 4,"-S 792 -B 260 -V 230" |
-E "audio encoder options" | Audio samplerate - in der Regel wird immer eine samplerate von von 44.1 kHz und eine bitrate von 192 bei SVCD und 224 bei VCD. genommen, also: -E 44100 -b 224 für VCD |
-b | Die Audio bitrate ist in der Regel 224 für VCDs und mindestens 192 für SVCDs. Für andere Formate kann man sie frei wählen. Bitraten zwischen 128 und 192 sind dann meist akzeptabel. |
-c | Die Option -c wird dazu benutzt, um zu testen oder um nur bestimmte Teile des Films zu
bearbeiten. Sie sollte am besten hinter den Encoderoptionen plaziert werden. Die Syntax lautet: |
Drehen
$ ffmpeg -i eingabe.mp4 -c copy -metadata:s:v:0 rotate=90 ausgabe.mp4
$ ffmpeg -i eingabe.MTS -vf "transpose=1" ausgabe.MTS
Erzeugen der Enddateien
Die Encoder erzeugen eine Bild- und eine Tondatei. Das Zusammenfügen zur Enddatei wird am besten mit Hilfe der mjpegtools gemacht.
$ mplex -f 4 -o outfile_%d.mpg infile1.m2v infile2.mpa oder $ mplex -f 4 -b 230 -o outfile_%d.mpg infile1.m2v infile2.mpa
Abhängig davon, welcher Audioencoder benutzt wurde, muss "mpa" durch "mp2" ersetzt werden. Mplex wird sich an der Option "-S 792" orientieren und die Datei genau da enden lassen. Dafür steht dann auch das "_%d". Dieses wird beim encoden dann einfach durch die Nummer des Mpegs ersetzt. Die Option "-f 4" steht wieder für SVCD ("-f 1" steht für VCD). Das ist davon abhängig was bei transcode angegeben wurde.
Die Datei muss bereits beim encoden aufgeteilt werden. Wird der mpeg erst später aufgeteilt, so werden in der zweiten Datei wichtige Informationen fehlen und das Erzeugen einer VCD wird scheitern! Bei Dateien die nicht VCDs werden sollen ist das egal. Diese können nach Belieben aufgeteilt werden.
Nach Beenden des Zusammenfügens kann das Video mit MPlayer oder Xine angesehen werden.
Erzeugen einer Abbilddatei (für VCD oder SVCD)
Erzeugen einer Abbilddatei für eine VCD.
$ vcdimager 1.mpg
Erzeugen einer Abbilddatei für eine SVCD.
$ vcdimager -t svcd 1.mpg
Erzeugen einer Abbilddatei für eine SVCD aus mehreren Videodateien.
$ vcdimager -t svcd 1.mpg 2.mpg 3.mpg
Bei Bedarf kann auch der Name der Ausgangsdatei festgelegt werden (siehe "vcdimager --help").
Brennen des Images
Zum Schluss wird das Image auf einen Rohling gebrannt, am besten mit "cdrdao". Voraussetzung ist, dass der Brenner den DAO-Modus beherrscht und von "cdrdao" unterstützt wird. Eine Liste findet sich auf der Homepage.
$ cdrdao write --device 1,0,0 --driver generic-mmc --buffers 64 Image.cue
Der korrekte Gerätetreiber ist auf der Homepage nachzulesen. In der Regel ist es immer "generic-mmc-raw" oder "generic-mmc". Das richtige device des Brennes kann mit "cdrecord -scanbus" ermittelt werden.
Nach erfolgreichem Brennen der VCD kann sie in einem DVD Player ausprobiert werden. Von nahe gesehen fallen unter Umständen die vielen Fehler auf, die der Divx-Codec manchmal hat. In normalem Abstand zum Fernseher sollten diese Fehler aber nicht mehr zu sehen sein. Ein Divx hat nun mal keine DVD Qualität und das Vergrössern des Films macht es sogar noch etwas schlimmer. Bei Filmen mit hoher Qualität dagegen sollte die Qualität weitgehend erhalten bleiben.
Weblinks
- Linux video tools (Videohelp.com)