Erwarten Sie bei einem Programm zur Videokonvertierung eine schöne bunte Oberfläche, wird Sie Transcode[1] enttäuschen. Transcode ist ein reines Konsolenprogramm, das sich über zahlreiche Kommandozeilenparameter steuern lässt. Wie die meisten Kommandozeilen-Tools ist es sehr flexibel einsetzbar aber naturgemäß auch etwas sperrig in der Bedienung. Tabelle 6 listet einige grafische Transcode Frontends auf, die spezielle Eigenschaften von Transcode mit einer komfortablen Benutzeroberfläche vereinen. Den Gesamtumfang von Transcode vermag aber keines dieser Programme ausschöpfen.
Transcode verfolgt ein streng modulares Konzept. Die wichtigen Funktionen sind in externe Module ausgegliedert, die nur bei tatsächlichem Bedarf geladen werden. Dabei sind drei Arten von Modulen zu unterscheiden (siehe Tabelle 1 bis 3):
- Eingabe / Dekodierung
- Modifikation / Filterung
- Ausgabe / Kodierung
Die Eingabemodule haben die Aufgabe, Video- und Audiodaten zu dekodieren und Transcode im Rohformat zur Verfügung zu stellen. Verschiedene Module gibt es für einzelne Video und Audio Codecs, aber auch zum Lesen von Video Streams, die zum Beispiel von einer Fernsehkarte zur Verfügung gestellt werden.
Im nächsten Schritt verändern Filtermodule die vom Eingabemodul gelieferten Rohdaten. Mit diesen Filtern lassen sich nicht nur die bestehenden Bild- und Tondaten verändern, sondern auch neue Frames erzeugen oder verwerfen, um damit Einfluss auf die Synchronisation von Bild und Ton zu nehmen.
Im letzten Schritt übergibt Transcode die Daten an ein oder mehrere Ausgabemodule. Sie sind für die Kodierung der Daten mittels Video- und Audio-Codecs verantwortlich und erzeugen die entsprechende(n) Ausgabedatei(en).
Formatkonvertierung leicht gemacht
Um zum Beispiel eine eine MPEG1- oder MPEG2-Datei in eine AVI-Datei im MPEG4-Format zu verwandeln genügt der folgende Befehl:
transcode -V -i quelldatei.mpeg ? -o zieldatei.avi -y xvid4 ? -w 500 -b 48
Transcode benutzt hier die nativ für Linux vorhandene XviD-Bibliothek. Sie ist schnell, zuverlässig und steht den kommerziellen Kodierern in der Qualität um nichts nach. Anhand dieser einfachen Kommandozeile sieht man gleich die wichtigsten Optionen: -i und -o bestimmen Eingabe- und Ausgabedateien, -y legt den Video Exportfilter auf xvid4 fest und -w setzt die zu verwendende Videobitrate auf 500 kbit/s. Da Transcode Audio per default als MP3 mit 128 kbit/s exportiert, genügt es, mit -b die Bitrate der Tondaten auf 48 kbit/s festzulegen. Die Option -V schließlich weist Transcode an anstelle von RGB im YUV Farbraum zu arbeiten. Damit laufen die internen Berechnungen um fast ein Drittel schneller ab. Es gibt allerdings auch Filter, die nur RGB beherrschen. In diesem Fall quittiert Transcode die Option -V mit einer Fehlermeldung.
Tabelle 6: Transcode Frontends
| Name | Homepage | Beschreibung |
|---|---|---|
| dvd::rip | http://www.exit1.org/dvdrip/ | Grafische Oberfläche spezialisiert auf das Kopieren von DVDs. |
| g4l | http://gv4l.sourceforge.net/ | Grafisches Transcode V4L Frontend zum Verarbeiten von TV Videomaterial. |
| ripmake | http://www.lallafa.de/bp/ripmake.html | Kommandozeilenprogramm, welches viele gängige Transcode Anwendungen vereinfacht. |
| kavi2svcd | http://www.cornelinux.de/web/linux/kavi2svcd/index.html | Kavi2svcd konvertiert AVI-Dateien zu Super Video CDs erstellen. |
Rate mal die Rate
Den zentralen Punkt für die Qualität des erzeugten Videos stellt die Videobitrate dar. Im Zusammenspiel mit weiteren Parametern, wie der Höhe und Breite der Frames, sowie der Anzahl Frames pro Sekunde lässt sich der so genannte BPP Wert (Bits Per Pixel) berechnen: Bitrate * 1000 / (Höhe * Breite * Framerate).
Natürlich hängt die Qualität auch entscheidend vom Videomaterial selbst ab (schnelle/langsame Szenen, viel/wenig Kontraste etc.), aber als Daumenregel gilt: BPP Werte um 0.20 ergeben eine gute Qualität, bei der kaum Artefakte zu sehen sein sollten. Werte unter 0.15 ergeben sichtbare Störungen im Bild. Hier sollte man die Bitrate besser erhöhen. Transcode selbst gibt den BPP Wert zu den aktuell vorgenommen Einstellungen aus (in der Zeile V: bits/pixel). Ist der Wert zu niedrig, lohnt es sich Transcode mit [Strg]+[C] abzubrechen und es mit einer höheren Video-Bitrate erneut zu starten.
Doppelt genäht hält besser
Bei MPEG4 Codecs unterstützt Transcode das Multipass-Verfahren. Um eine optimale Bitratenverteilung über das gesamte Video zu erhalten analysiert dazu das Programm in einem ersten Lauf das Videomaterial und schreibt eine Log-Datei dazu. In einem zweiten Lauf wertet es diese Log-Datei aus und nimmt die eigentliche Video-Umwandlung vor. Das Multipass-Verfahren lässt sich über die Option -R einschalten, wobei angegben werden muss, ob es sich um den ersten oder zweiten Lauf handelt. Ein entsprechendes Beispiel ist in Listing 1 zu sehen.
Listing 1
Beispiel für ein Multipass-Encoding
transcode -V -i quelldatei.mpeg -o zieldatei.avi -y xvid4,null -w 500 -b 128 -R 1 transcode -V -i quelldatei.mpeg -o zieldatei.avi -y xvid4 -w 500 -b 128 -R 2
Da beim ersten Lauf nur die Videoanalyse von Interesse ist schaltet -y xvid4,null den Audio Export ganz ab. Das beschleunigt diesen Lauf um bis zu zehn Prozent.
Analysieren geht über Probieren
Da gute Ergebnisse in der Videokonvertierung entscheidend vom Ausgangsmaterial abhängen, liefert Transcode Werkzeuge mit, um Videodateien zu analysieren und deren wichtigsten technischen Eigenschaften auszugeben. Das Kommando tcprobe gibt hier einen schnellen Überblick, siehe Beispiel in Kasten 1.
Kasten 1: Ausgabe von
tcprobe
tcprobe -i quelldatei.mpeg
[tcprobe] MPEG program stream (PS)
[tcprobe] summary for quelldatei.mpeg, (*) = not default, 0 = not detected
import frame size: -g 320x240 [720x576] (*)
aspect ratio: 1:1
frame rate: -f 29.970 [25.000] frc=4 (*)
audio track: -a 0 [0] -e 44100,16,1 [48000,16,2] -n 0x50 [0x2000] (*)
PTS=370.6876, bitrate=48 kbps
Laut tcprobe hat die Quelldatei eine Auflösung von 320×240 Pixeln und eine NTSC-Framerate von 29.97 Bildern pro Sekunde. Weiter beinhaltet sie eine Audiospur mit 44.1 khz, 16 Bit Sample-Breite, die Mono vorliegt (zu erkennen an -e 44100,16,1 – bei Stereo stünde hinten eine 2). Audio ist MP2 kodiert – leider ist dies nicht ganz offensichtlich, da man dies aus der Angabe -n 0x50 ableiten muss. 0x55 bedeutet MP3, 0x2000 AC3 Kodierung. Die Audio Bitrate ist mit 48 kbit/s vorgegeben. Da Transcode per default 128 kbit/s kodiert, lohnte es sich also, die Rate von Hand auf 48 kbit/s herunter zu setzen, da höhere Werte keinen Qualitätsgewinn bringen, sondern lediglich mehr Daten beanspruchen.
In eckigen Klammern gibt tcprobe die Default-Einstellungen von Transcode an. Mit diesen Werten arbeitet das Programm, wenn es zum Beispiel bei Rohdateien ohne Formatangaben Werte nicht erkennt.
Klein aber fein
Eine weitere nützliche Funktion ist das Skalieren von Bildmaterial um zum Beispiel eine Vorschauversion einer größeren Datei zum Herunterladen anzubieten. Hier bietet Transcode verschiedene Möglichkeiten, die einfachste geht über die Option -Z mit Angabe von Breite und Höhe. Um in obigem Beispiel ohne Multipass-Verfahren die Bildgröße auf 160×120 zu halbieren, genügt folgender Befehl:
transcode -V -i quelldatei.mpeg ? -o zieldatei_klein.avi -y xvid4 ? -w 125 -b 48 -Z 160x120,fast
Mit dem angehängten fast verwendet Transcode einen internen Skalierungs-Algorithmus, der leichte Qualitätseinbußen zur Folge haben kann und weitere Einschränkungen mit sich bringt. So müssen Breite und Höhe des Bildes durch 8 teilbar sein. Sind sie das nicht, benutzt das Programm automatisch die langsamere Standard-Methode. Ein wichtiges Detail ist die Reduzierung der Videobitrate über -w 125. Da das Beispiel sowohl Breite als auch Höhe halbiert, wird nur noch ein Viertel der Bildfläche benötigt, was auch einem Viertel der Bitrate entspricht.
Achtung: TV Aufnahme
Benutzer eines digitalen Linux Videorecorders – zum Beispiel VDR – möchten vielleicht hin und wieder TV-Aufnahmen in einem höher komprimierten Format wie XviD oder MPEG4 archivieren. Auch hier hilft Transcode, allerdings bedarf es für den VDR noch Schützenhilfe von Vdrsync[2]. Transcode kann zwar die VDR Dateien auch direkt verarbeiten, allerdings gibt es dann häufig Probleme mit der Synchronisation von Audio und Video, die Vdrsync im Vorfeld löst. Der folgende Befehl erzeugt aus einer VDR Aufnahme zwei Dateien, die getrennt Video und Audio beinhalten:
vdrsync.pl /vdrdata/Dragonheart/? 2004-08-08.20\:13.50.50.rec/
Der Name der Ausgabedatei variiert. In diesem Beispiel erzeugte das Skript die Videodatei e4.mpv und die Audiodatei c0.mpa. Beide Dateien lassen sich nun mit Transcode weiterverarbeiten.
Eingeengte Sichtverhältnisse
Liegt das Filmmaterial im Letterbox Format vor, gibt es in der Regel schwarze Balken am oberen und unteren Bildrand. Da die schwarzen Balken in der Zieldatei nur unnötig Platz verschwenden, soll Transcode sie entfernen. Der entsprechende Vorgang läuft in zwei Schritten ab. Zunächst muss Transcode die Größe der Balken analysieren, dann muss es herausfinden wo sie genau positioniert sind. Es benutzt dazu den detectclipping Filter. Ein entsprechendes Beispiel ist in Listing 2 zu sehen.
Listing 2
Schwarze Balken analysieren
transcode -V -i e4.mpv -J detectclipping … [detectclipping#0] valid area: X: 9..712 Y: 57..519 -> -j 58,10,56,6 …
Dabei analysiert Transcode jedes Einzelbild und gibt das Ergebnis auf der Kommandozeile aus. Wenn sich die Ausgabe nicht mehr verändert, hat Transcode die entsprechenden Einstellungen gefunden. Mit -j 58,10,56,6 entfernt das Programm die schwarzen Balken 58 Zeilen oben, 10 Zeilen links, 56 Zeilen unten und 6 Zeilen rechts.
Leider lassen sich die Werte nicht 1:1 übernehmen, weil sonst die endgültige Bildgröße nicht mehr durch 16 teilbar ist. Dies ist aber eine Voraussetzung der meisten Kodierer, so auch für XviD. Hier hilft ein wenig Kopfrechnen: Der Einfachheit halber schneiden wir die wenigen Pixel links und rechts gar nicht, sondern nur oben und unten. Wenn wir nun auf 56 statt 58 Zeilen gehen, macht das insgesamt 112 Zeilen weniger. 576 PAL-Zeilen minus 112 ist 464, durch 16 teilbar – prima. Als Resultat bleibt -j 56,0,56,0, das Transcode auch in der Kurzform -j 56 übergeben werden kann, da das Programm per Default symmetrisch zuschneidet.
Streifen entfernen
Ein häufiger Begriff in der Videotechnik ist das Zeilensprungverfahren, im Fachjargon Interlacing genannt. Interlaced bedeutet, dass die geraden und ungeraden Zeilen des Bildes separat dargestellt werden – bei Fernsehern der Normalfall. Bei der Wiedergabe am PC Monitor stört das aber, da sich hier sehr schnell störende Fransen an bewegten Objekten bilden, gut zu sehen in Abbildung 1a. Deshalb benutzen die meisten Videoplayer oder -umwandler einen Deinterlace-Effekt, der diese Streifen entfernt (siehe Abbildung 1b).

Abbildung 1a: Die typische Fransenbildung bei Interlaced Videomaterial ist besonders deutlich bei horizontalen Bewegungen zu erkennen, wie zum Beispiel durchrollenden Texten.

smartyuv Filter – von Fransen keine Spur.” width=”300″ height=”97″ />
Abbildung 1b: Hier derselbe Bildausschnitt nach der Behandlung mit Transcode’ssmartyuv Filter – von Fransen keine Spur.Um festzustellen, ob das Videomaterial überhaupt Frames mit Interlacing hat, benutzt Transcode den 32detect Filter (siehe Listing 3).
Listing 3
Ermitteln von Interlaced Frames
transcode -V -i e4.mpv -J 32detect=verbose=1 … (0) frame [000086]: (1) = 2141 | (2) = 2161 | (3) = 10 | interlaced = yes …
Für jedes Einzelbild gibt Transcode eine entsprechende Zeile aus. Erscheinen Frames mit der Angabe interlaced = yes, lohnt es sich einen Deinterlace-Filter anzuwenden. Die Codierung nimmt dann allerdings deutlich mehr Zeit in Anspruch. In Transcode bietet sich dazu der smartyuv Filter an, eine auf den YUV Farbraum geschwindigkeitsoptimierte Variante des smart deinterlacer Filters von VirtualDub. Letztgenanntes ist ein in der Windows-Welt verbreitetes Programm, das ähliche Aufgaben wie Transcode erfüllt. Transcodes Filter hat etliche Optionen, mit denen man herumspielen kann. Die Defaulteinstellungen erfüllen aber in den meisten Fällen ihren Zweck.
Zahlenknobelei
Um noch mehr Platz zu sparen sollen nicht nur die schwarzen Balken weg, sondern das Bild soll auch kleiner werden. Da PAL Videomaterial eine Auflösung von 720×576 Punkten hat, ist es für den PC stets anamorph verzerrt, da 720×576 Pixel keinem Seitenverhältnis von 4:3 sondern von 5:4 entspricht. Die meisten Mediaplayer entzerrren zwar das Bild automatisch, aber das Ziel ist eine AVI-Datei im 4:3-Verhältnis. Noch extremer ist die Verzerrung bei Filmen im 16:9-Format. Die folgenden Berechnungen lassen sich darauf ebenso anwenden, statt 5:4 muss nur jeweils 16:9 eingesetzt werden. Die Abbildungen 2a bis 2d verdeutlichen die einzelnen Rechenschritte.

Abbildung 2a: PAL Video in voller Auflösung hat 720×576 Pixel. Das 4:3 Bild ist aber verzerrt gespeichert, da 720×576 ja ein Seitenverhältnis von 5:4 ergibt. Alle Personen im Film haben deshalb Eierköpfe, wenn man das Bild wie gespeichert betrachtet.

Abbildung 2b: Um die Verzerrung auszugleichen, kann das Bild in die Breite gestreckt werden womit die Eierköpfe wieder kreisrund sind.

Abbildung 2c: Die schwarzen Balken nehmen nur wertvollen Platz bei der Kodierung weg und werden deshalb einfach abgeschnitten.

Abbildung 2d: Um noch mehr Plattenplatz zu sparen kann man die Auflösung noch reduzieren, hier auf eine Breite von 640 Pixeln, was immer noch eine recht gute Bildschärfe ergibt.
Zunächst gilt es das Seitenverhältnis zu korrigieren. Dazu muss das Bild um den Faktor (4/3)/(5/4) breiter werden (1.33/1.25= 1.06). Es wird also 6 Prozent breiter hat somit 768 Pixel. Dann soll Transcode die beiden schwarzen Balken mit je 56 Pixeln abschneiden, womit das Bild 464 Punkte hoch wird.
Das neue Bild von 768×464 soll Transcode nun auf eine Breite von 640 Pixel verkleinern, dies entspricht einem Verkleinerungsfaktor von 1.2. Es bleibt ein Bild von 640×386 Punkten, wobei die Höhe wegen der Teilbarkeit durch 16 auf 384 reduziert werden muss. Das ergibt einen minimalen Verzerrungsfehler, der aber von Auge nicht sichtbar ist. Nach dieser kurzen Kopfrechnung ergibt sich folgender Kommandozeilen-Aufruf für Transcode, um die Orginalaufnahme des VDR-Programmes in ein verkleinertes XVID-Video umzuwandeln:
transcode -V -i e4.mpv -p c0.mpa ? -o zieldatei.avi -y xvid4 -w 1650 ? -j 56 -J smartyuv -Z 640x384,fast
Hier wird mit der Option -p auch die Audiodatei eingebunden. Dies ist nötig, da ja in diesem Fall Video und Audio in getrennten Dateien vorliegen. Aus der Videobitrate von 1650 resultiert bei der gewählten Auflösung ein BPP Wert von 0.267, was eine hinreichend gute Qualität ergibt.
Flexibel und mächtig
Die Flexibilität und Mächtigkeit von Transcode hat ihren Preis: dieser Artikel konnte denn auch nur einen Bruchteil der Funktionalität beschreiben. Um trotzdem einen Eindruck davon zu vermitteln, was Transcode alles zu bieten hat, sind in Tabelle 2 einige wichtige Transcode Module aufgelistet. Transcode bringt zusätzlich noch eine ganze Reihe von praktischen Kommandozeilen-Werkzeugen mit, die Tabelle 4 kurz vorstellt. Damit lassen sich zum Beispiel mit Transcode erstellte AVI-Dateien schneiden, zusammenfügen und vieles mehr. Bei Aufgaben, die über diesen Artikel hinaus gehen, helfen auch die Transcode-Mailinglisten [3].
Kasten2: Hinweise zur Transcode Installation
Falls es für Ihre Linux Distribution fertige Transcode-Pakete gibt, sollten Sie in jedem Fall von diesen Gebrauch machen. Das Kompilieren von Transcode ist für Unerfahrene nur schwer zu bewältigen, da das Programm zahlreiche Bibliotheken benötigt. Laut Debian Paketmanager zum Beispiel hängt Transcode von 44 Paketen ab. Grundlage für diesen Artikel war die im Januar veröffentlichte Version 0.6.12, zu finden unter [1]. Fertige Pakete gibt es zumindest für folgende Distributionen:
- Debian ftp://ftp.nerim.net/debian-marillat/index.html
- Gentoo http://packages.gentoo.org/
- RedHat http://freshrpms.net/
- Mandrake http://plf.zarb.org/
- SuSE http://packman.links2linux.org/
Tabelle 1: Transcode Import-Module
| Modul | Beschreibung |
|---|---|
| dvd | Direktes Einlesen einer Video-DVD. Die Option -i muss ein Gerätedateiname oder der Name eines Verzeichnisses mit einer DVD Verzeichnisstruktur sein. |
| vob | Einlesen einer DVD VOB-Datei. Diese kann zuvor mit Transcodes tccat Befehl erstellt worden sein. |
| dv | Einlesen von DV Video |
| ffmpeg | Zugriff auf alle Eingabe-Codecs, die die Ffmpeg-Bibliothek unterstützt. Die genaue Formaterkennung erfolgt automatisch. |
| mplayer | Mplayer wird aufgerufen, um das Video zu dekodieren. Damit kann Transcode alle von mplayer unterstützten Codecs verarbeiten. |
| v4l / v4l2 | Direktes Einlesen eines Videosignals von einem Video4Linux Gerät, zum Beispiel einer TV-Karte |
| xvid | Einlesen von MPEG4-Video |
| mpeg2 | MPEG-Video Import |
Tabelle 2: Transcode Export-Module
| Modul | Beschreibung |
|---|---|
| xvid / xvid4 | Der XviD-Codec schreibt ein MPEG4-Format. Transcode unterstützt verschiedene Versionen der Bibiliothek. Bei Transcode 0.6.12 ist xvid 0.9 die Default-Einstellung. Empfohlen ist mit dem xvid4 Modul die aktuelle 1.0 Version von XviD zu verwenden. |
| divx5 | Verwendung des kommerziellen divx.com-Codecs. Obwohl dieser Codec nativ für Linux zur Verfügung steht, ist er aufgrund diverser Bugs und der Tatsache, dass er Closed Source ist, nicht zu empfehlen. |
| ffmpeg | Alle von der ffmpeg Bibliothek unterstützten Codecs. Eine Liste der verfügbaren Codecs liefert transcode -y ffmpeg -F list. Der gewünschte Codec wird dann ebenfalls mit der -F Option ausgewählt. |
| mpeg2enc,mp2enc | MPEG2-Video, MP2-Audio. Die dabei entstehenden .m2v und .m2a Dateien fügt tcmplex zu einer .mpeg Datei zusammen. Das Modul unterstützt alle wichtigen Profile von VCD, über SVCD bis DVD. |
| wav | Reines Audio Export Modul zum Erzeugen von WAV-Dateien. |
Tabelle 3: Transcode Filter
| Filter | Beschreibung |
|---|---|
| 32detect | Detektion von Frames, die interlaced gespeichert sind. Die Option verbose=1 muss mit angegeben um zu überprüfen, ob Deinterlacing notwendig ist. |
| smartdeinter | Für den RGB Farbraum optimierter Deinterlacer. Portierung von VirtualDub’s smart deinterlacer |
| smartyuv | Für den YUV Farbraum optimierter Deinterlacer. Muss mit der Option -V verwendet werden |
| modfps | Framerate-Konvertierer (zum Beispiel PAL nach NTSC). Ziel-Framerate mit --export_fps angeben |
| logo | Anbringen eines festen Logos auf dem Bild |
| logoaway | Entfernen eines Senderlogos aus dem Bild |
| normalize | Normalisieren des Lautstärepegels |
| yuvdenoise | Für den YUV Farbraum optimiertes Geräuschentfernen. Nur zusammen mit der Option -V. |
| detectclipping | Ermittelt -j bzw. -Y Option zum Herausschneiden schwarzer Balken |
| pv | Öffnet ein Preview-Fenster. Der X-Server muss dazu über die XV-Extension verfügen |
Tabelle 4: Transcode Programme
| Name | Beschreibung |
|---|---|
| tccat | Liest Quelldateien ein und gibt diese auf der Standardausgabe wieder aus. Wird normalerweise intern von Transcode benutzt, kann aber auch zum Auslesen von DVD-Titeln verwendet werden. |
| tcscan | Analysiert eine Eingabedatei und gibt Informationen darüber aus. Dient in erster Linie zur Bestimmung der max. Lautstärke in einer Tonspur. |
| tcmodinfo | Gibt eine Dokumentation der Optionen eines Transcode Filter Moduls aus. |
| tcprobe | Analysiert eine Eingabedatei und gibt die wichtigsten technischen Eigenschaften aus. Vor der Verarbeitung mit Transcode sollte immer eine tcprobe Analyse stehen, um mit den richtigen Einstellungen arbeiten zu können. |
| tcrequant | MPEG Requantisierer. Reduziert die Bitrate einer MPEG Datei, ohne eine echte Neukodierung vorzunehmen. Bringt hochqualitative Ergebnisse in kurzer Zeit. |
| tcmplex | MPEG Multiplexing von MPEG Elementary Streams (Video + Audio) zu einem MPEG Program/System Stream. |
| avimerge | Verbinden mehrerer AVI-Dateien zu einer größeren AVI-Datei. |
| avisplit | Aufteilen einer AVI-Datei in mehrere kleinere AVI-Dateien. |
Infos
[1] http://www.zebra.fh-weingarten.de/~transcode/: Homepage von Transcode
[2] http://vdrsync.vdr-portal.de/: Vdrsync bereitet VDR Aufnahmen zur Weiterverarbeitung mit Transcode vor.
[3] http://lists.exit1.org/mailman/listinfo/: Mailinglisten zu Transcode.




