Videos Digitalisieren und Nachbearbeiten unter Linux

Hinweis: Die Informationen die im folgenden gegeben werden, beziehen sich auf OpenSuse in verschiedenen Versionen (10.0 – 11.3). Ich mache immer mal einen Update auf den Text, wenn ich wieder was digitalisiere.

Das Thema Videobearbeitung ist unter Linux gut abgedeckt. Leider gibt es zahllose Tools, so dass dem Anfänger unklar ist, welche Tools er eigentlich braucht. Lange Suchen im Internet zeigen, dass jeder das Thema für sich selbst entdecken muss, da sich die Tools, die Linux-Distributionen und die genutzte Hardware doch sehr unterscheiden.

Ich gebe im folgenden einige Tipps zum Vorgehen, wobei keine besonders anspruchsvollen Kenntnisse vorausgesetzt werden. Verwendet wurde OpenSuse ab der Version 10.0.

Mein Szenario

Ich wollte ca. 50 VHS-Videokassetten mit ca. 200 Stunden Film digitalisieren. Die ältesten Bänder waren aus den 80er Jahren. Als „analoge Hardware“ stand mir ein ganz einfacher Videorecorder zur Verfügung (Philips VR 151, Mono-Ausführung). Außerdem habe ich 2009/2010 eine Sammlung historisch bedeutsamer Kassetten aus Mitte der 80ger Jahren digitalisiert.

Die TV-Karte

Vor einem Kauf einer solchen Karte sollte unbedingt das Internet konsultiert werden. Neue tolle Karten und Karten unbekannter Hersteller (die oft sehr billig zu haben sind) werden möglicherweise nicht oder nur sehr begrenzt von Linux unterstützt. Ich bin die Nummer Sicher gegangen und habe eine Karte gekauft, die schon lange am Markt ist. Aus Internet-Foren war ersichtlich, dass viele Leute mit dieser Karte erfolgreich unter Linux arbeiten. Marktführer bei TV-Karten sind wohl Hauppauge und Pinnacle.

Meine eigene Umgebung war die folgende:

  • Hauppauge WinTV Express: Die Karte setzt auf dem bt778 Chipsatz auf. Dieser wird in Linux schon sehr lange unterstützt. Die Karte hat einen Analog-Tuner. Dies war für mich ok, denn ich hänge am Kabelnetz, eine DVB-Karte war somit nicht erforderlich. Die Karte hat einen Composite Eingang, einen S-Video Eingang sowie einen Tuner Eingang. Sie hat einen Audio-Ausgang. Dieser muss mit einem Audio-Eingang der Soundkarte verbunden werden (möglicherweise geht das auch anders, bei mir hat es aber so funktioniert. Das Verbindungskabel liegt der Karte bei). Die Karte hat keinen eigenen Hardware-Codec, so dass die Kompression vom Rechner selbst übernommen werden muss. Kostenpunkt der Karte : <40Euro. Die Karte wurde unter Linux nicht ganz richtig erkannt (Tuner wurde nicht korrekt erkannt), ich habe folgende Zeile in /etc/modprobe.conf hinzugefügt: options bttv card=10 tuner=41 gbuffers=16
  • Hauppauge Karte WinTV Nova-SE2 mit Conexant CX23883: Diese Karte habe ich ab 2009 verwendet. Wird ebenfalls sehr gut unterstützt.
  • Rechner: Über die Jahre gab es da Veränderungen:
    • Bis 2007: Intel Pentium 4 mit 3GHz und Hyperthreading. Als Zielplatte habe ich eine 300GB-Platte mit 16MB Cache angeschafft. Damit ist Echtzeitencoding von 720×540 mit 25FPS im komprimierten AVI-Format möglich.
    • Seit 2007: Intel Quad Core Q6600. Zielplatten mit 500GB/1TB.
    • Die letzten Digitalisierungen habe ich auf einer etwas älteren Plattform durchgeführt: Eine stromsparende AMD 64Bit CPU 3400+ mit 2,4 Ghz. Auch da gabs performance-seitig überhaupt keine Probleme, auch nicht mit Echtzeit-Kodierung in XVID aus analoger Datenquelle ohne HW-Support.
  • OpenSuse Linux Distribution: heruntergeladen aus dem Internet

WinTV Express Karte ohne eigene MPEG-Hardware. Sie ist nur in leistungsstärkeren Rechnern, ich würde mal schätzen P4 mit >1,6Ghz, gut nutzbar.

Eine WinTV Express Karte mit MPEG Chip. Diese Karte kann auch in leistungsschwachen Rechnern zur Kompression eingesetzt werden.

Typische Anschlüsse einer Video-Karte (Von links: Kabeltuner In, S-Video In, Composite In, Audio/Line In, Anschluss für Infrarot-Sensor.

MPEG-Hardware: Der Conexant MPEG Encoder Chip CX23416

Software

Analoges Fernsehen: kdetv ist defaultmässig unter OpenSuse Linux 10.0 schon installiert. Es handelt sich um ein simples Anzeigeprogramm für die Tunerkarte. Damit kann man einmalig alle Sender suchen lassen, die Namen werden automatisch erkannt Das Programm kann auch Videotext. Man kann zwischen den Eingangskanälen (Composite, S-Video und Tuner) umschalten.

mplayer mit seinen graphischen Frontends smplayer und gmplayer: Dieses Programm ist ein Medienplayer. Man kann zahllose Formate abspielen, u.a. auch Windows-native-Codecs einbinden. Dieses Programm erlaubt aber auch, auf die TV-Karte zuzugreifen und ersetzt in Teilen die Funktion von kdetv. Gmplayer kann kein Videotext. Ich nutze im Normalfall nur noch gmplayer statt kdetv. Die Optionen für den Zugriff auf die TV-Karte sind:

gmplayer -tv chanlist=europe-west:channel=$1:driver=v4l2:input=0:forceaudio:adevice=/dev/dsp0:norm=PAL:amode=1:chanlist=europe-west tv://

wobei $1 der Kanalname ist, z.B. „e1“. Mplayer hatte ich schon auf dem Rechner drauf, entweder ist es Teil von OpenSuse Linux oder ich hatte es von Pacman installiert. Mplayer läuft auch unter Windows.

Man kann auch auf die evtl. vorhandenen Composite und S-Video-Eingänge der Karte zugreifen, bei mir erfolgt der Zugriff auf den ersten Composite-Eingang wie folgt:

gmplayer -tv device=/dev/video0:driver=v4l:input=0:width=768:height=576:norm=pal:adevice=/dev/dsp tv://0

mencoder: Dieses Programm ist Teil der Mplayer-Distribution. Es ist ein Encoding-Programm mit unglaublich vielen Optionen. Damit kann man Video von der TV-Karte in Echtzeit digitalisieren und in einer Datei ablegen. Das Ausgabeformat kann aus zahllosen Formaten ausgewählt werden. Desweiteren kann das Encoding selbst (z.B. Die Qualität) mit den Optionen beeinflusst werden.

Die Optionen, die ich für mencoder nutze, habe ich mir aus Foren im Internet zusammengesammelt. Das Handbuch ist nur schwer verständlich und setzt tiefes Verständnis von Videoformaten und Kompressionsalgorithmen voraus.

Meine Kommandozeile ist folgende:

/usr/bin/mencoder tv:// -tv driver=v4l2:norm=pal:input=1:fps=25:audiorate=48000:width=720:height=540 -noodml -ovc lavc -lavcopts     vcodec=mpeg4:vhq:vbitrate=1200 -ffourcc XVID -oac lavc -vf pp=lb -o outfile.avi

Dies bedeutet im einzelnen:

-tv: Zugriff auf die Tuner-Karte; input=1 ist der Composite Eingang.

-noodml: AVI-Chunks sind auf 1023MB begrenzt. Für grössere Dateien werden von mencoder neue Chunks geschrieben. Nicht jeder Player kann dies wiedergeben. Dies kann mittels dieser Option verhindert werden. Die Chunks werden dann so gross wie erforderlich.

Nachtrag 02/2007:  Obige Audio-Einstellungen führen dazu, dass die Dateien nicht immer unter Windows abgespielt werden können (es entsteht Audio mit variabler Bitrate). Mit den fogenden geänderten Einstellungen habe ich bisher gute Erfahrungen gemacht:

/usr/bin/mencoder -tv driver=v4l2:norm=pal:input=1:fps=25:audiorate=48000:width=768:height=576 -noodml -ovc lavc -lavcopts         vcodec=mpeg4:vhq:vbitrate=2000 -ffourcc XVID -oac mp3lame -lameopts cbr:br=192 -vf crop=720:544:24:16,pp=lb -o outfile.avi tv://

Vorhande Aufnahmen können einfach konvertiert werden (nur die Audio-Spur ist betroffen):

/usr/bin/mencoder  -noodml -ovc copy -ffourcc XVID -oac mp3lame -o outfile.avi infile.avi

avidemux2: Dieses Programm erlaubt das ganz einfache direkte Schneiden der mit mencoder erstellten AVI-Dateien. Andere tolle Programme definieren eigene Formate oder konnten das AVI-Format nicht lesen, so dass erst eine Konversion erforderlich wäre. Jede Konversion verschlechtert aber die Videoqualität. Avidemux2 kann ohne Umrechnung die Daten bearbeiten, so dass die Qualität gleich bleibt. Beim Encoding von analogen Quellen (Videokassetten) nimmt man meist zu viel am Anfang und am Ende auf. Das kann man ganz einfach mit avidemux2 wegschneiden. Genauso einfach können Werbeblöcke entfernt werden. Am Ende der Schneidaktion wird die Ergebnisdatei geschrieben. Dies geht auch sehr flott, eine 1GB-Datei wird in weniger als 1 Minute geschrieben.

avidemux2 Screendump. Mittels der „A“ und „B“ Buttons kann ein Bereich selektiert werden, der mit „Entf“ einfach gelöscht werden kann. Der gezeigte Film wurde vorher bereits mit mencoder beschnitten, so dass schwarze Bereiche hier nicht mehr Teil des Films sind.

Entfernen schwarzer Streifen bei Breitwandformaten

die störenden und platz verschwendenden Streifen kann man beim Kodieren mittels mencoder gleich mitentfernen. Das relevante Rechteck (also das Rechteck, in dem der Film liegt, kann man mittels gmplayer ermitteln, hier legt die Option
gmplayer -vf rectangle=w:h:x:y …
ein sichtbares Rechteck als Overlay in den abgespielten Film. Durch experimentieren mit den Werten ermittelt man das passende Rechteck und gibt dieses dann bei der eigentlichen Konversion mittels mencoder und der Option „crop“ an:
mencoder …  -vf crop=700:466:12:47
an.

Platzbedarf

Für 200h Video ergab die von mir gewählte Bildgröße und Qualität insgesamt ca. 150GB Platzbedarf. Pro Stunde Video waren ca. 0,7GB erforderlich.

Der Platzbedarf variiert stark mit der Bildqualität. Hier zwei Richtwerte:

  1. Kompression mit 1200 KBit/s variabler Rate. Dies bedeutet rund 48KBit also 6 KByte pro Einzelbild. Inklusive der Audiokompression von etwa 250KBit/s kommt man so auf etwa 1550 KBit/s, also etwa 194KByte/s und damit 0,7GByte/h.
  2. Kompression mit 2000 KBit/s variabler Rate. Dies bedeutet rund 64KBit also 8 KByte pro Einzelbild. Inklusive der Audiokompression von etwa 250KBit/s kommt man so auf etwa 2220 KBit/s, also etwa 277KByte/s und damit 1GByte/h.
  3. Umkonvertieren von Quellen, die schon digital im MPEG2 Format vorliegen. Dies sind Daten, die via Satellitenfernsehen auf den Rechner kamen. Deren Qualität ist sehr hoch. Ich konvertiere die Daten aus Platzgründen nach XVID mit 3000 KBit/s. Allerdings ist sogar mit dieser Bitrate noch eine Verschlechterung des Signals durchaus erkennbar.

Leistungsbedarf

Echtzeit-Encoding von 720×540 mit 25FPS im komprimierten AVI-Format ist mit meiner weiter oben beschriebenen Hardware möglich, auch mit dem alten Pentium Rechner und mit der AMD-CPU. Der Pentium-Rechner ist dabei beispielsweise zu 50% CPU belastet, man kann nebenher ohne die Kompression zu stören normal arbeiten. Der Rechner ist nicht spürbar belastet.

Eine Konversion von MPEG-2 in 768×576 nach XDIV ist schon auf dem Pentium-Rechner mit mehr als 25 FPS möglich. Da man üblicherweise noch Streifen wegschneidet, ist das Zielformat etwas kleiner (bei Breitwand z.B. 760×330) und dann sind Konvertierungsraten bis zu 50 FPS üblich.

Die Platte muss bei der Echtzeit-Kompression eine Transferrate von ca. 0,3 MByte/s bewältigen. Dies kann sie ohne jede Probleme, in meinem Rechner wird auf internen Platten eine Transferrate von 60 MByte/s erreicht, also fast das zweihundertfache. Aussagen zu Transferraten habe ich in einem anderen Dokument beschrieben.

Performance

Videokonversion ist rechenintensiv. Im folgenden habe ich verschiedene Rechnermodelle bezüglich ihrer Laufzeit verglichen.

Szenario: Komplette Konversion eines MPEG2-Videos nach MPEG4. Das Video „merry_melodies_falling_hare.mpeg“ kann im Internet Archive hier heruntergeladen werden (ca. 200MB). merry_melodies_falling_hare.mpeg ist ein Film im Format 720×480, mit 30fps und 875KBytes/s digitalisiert.

Die Kommandozeile für den mencoder ist:

time mencoder merry_melodies_falling_hare.mpeg -o merry_melodies_falling_hare.avi -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:vbitrate=1800:threads=# -oac copy

„threads“ beschreibt die Anzahl parallel laufender Konversions-Threads. In der folgenden Tabelle sind die Frames pro Sekunde sowie die Gesamtzeit dargestellt. Bei einer Multi-Core CPU steigt die Konversionsgeschwindigkeit an, wenn mehrere Threads verwendet werden. Es gibt ein Maximum, wenn die CPU voll ausgelastet ist, danach gibt es keine Leistungssteigerung durch zusätzliche Threads.

Rechner Jahr der

Messung
Threads=1 Threads=2 Threads=3 Threads=4 Threads=5
Intel Pentium 4, 2.26Ghz, 1GB RAM
(OpenSuse 11.1 32 Bit)
2008 33 (7:26) 32 (7:53) n.g. n.g. n.g.
Intel Atom 270N mit Hyperthreading, 1.6Ghz, 512MB RAM
(ACER Aspire One 110L, Linpus Linux)
2009 29 (8:37) 37 (6:51) 35 (7:19) n.g. n.g.
Intel Pentium 4, 2.4Ghz, 1.5GBRAM (OpenSuse 11.3 32Bit) 2010 45 (5:36) 44 (5:43) n.g. n.g. n.g.
AMD Athlon 64 3400+, 2,4Ghz, 1.5GB RAM
(OpenSuse 11.0 64 Bit)
2009 49 (5:29) 46 (5:26) n.g. n.g. n.g.
Intel Pentium 4 mit Hyperthreading (Prescott), 3Ghz, 2G RAM
(OpenSuse 10.2 32 Bit)
2008 60 (4:11) 66 (3:52) 60 (4:10) n.g. n.g.
Notebook: Acer Extensa 5635Z, Intel Pentium Dual Core T4300,
2×2.1Ghz, 1MB L2 Cache. 800Mhz FSB,
45nm, Q2/2009, 2GB RAM (OpenSuse 11.2 64Bit)
2010 68 (3:44) 84 (3:00) 77 (3:17) n.g. n.g.
Notebook: Fujitsu-Siemens Amilo Li 1818, Intel Core 2 Duo T5300
2×1.73Ghz, 2MB L2 Cache, 533Mhz FSB,
65nm, Q12007, 2G RAM (OpenSuse 10.2 32 Bit)
2009 71 (3:33) 105 (2:24) 95 (2:39) 104 (2:26) n.g.
AMD Athlon II X2 3,3Ghz Dual Core, je Kern 64+64KB L1, je Kern 1MB L2, 45nm, ca. 2010, 4G RAM (OpenSuse 12.1 32 Bit) 2012 128 (1:58) 160 (1:35) <140 (Test per Hand abgebrochen)
Intel Core 2 Quad Q6600, 4×2.4GHz , 2x4MB L2 Cache, 65nm, 2G RAM
(OpenSuse 10.3 Beta 3 64 Bit)
2008 113 (2:13) 160 (1:35) 201 (1:15) 255 (0:59) 203 (1:14)
Intel Core 2 Quad Q6600, 4×2.4GHz , 6G RAM
(OpenSuse 11.1 64 Bit)
2009 143 (1:46) 177 (1:36) 201 (1:15) 194 (1:18)
Intel Core i7 3770 4×3,4Ghz mit Hyperthreading,
16GB RAM, OpenSuse 12.2
2013 Threads=6:
601 (0:25)

Tabelle: Performance bei der Videkonvertierung (n.g. = nicht gemessen)

Unter http://www.linuxhardware.org/article.pl?sid=06/11/02/142244 sind Werte für noch schnellere CPUs beschrieben. Für einen 3Ghz-Quad Core (Core 2 Extreme QX6700) ist dort die Konversion in 1:05 fertig. Ich komme allerdings mit genau denselben Parametern auf 0:59 :-), vermutlich wegen des sehr neuen eventuell und schnelleren Motherboards. Weswegen die Kompression unter OpenSuse 11.1 langsamer ist als unter 10.3 ist mir unklar.

Bei den Notebooks erstaunt, dass der T5300 mit 1,73Ghz deutlich schneller umcodiert als der T4300, der mit immerhin 2,1Ghz rennt. Evtl. spielt hier der geringe L2-Cache des T4300 (1MB versus 2MB beim T5300) eine deutliche Rolle.

Qualität

Die von mir gewählte Qualität von 1200KBit/s Videodaten ist VHS-Bändern angemessen. Die Bänder waren teilweise über 20 Jahre alt und entsprechend schlecht abzuspielen. In Einzelfällen (ca. 5% der Fälle) habe ich auf die Digitalisierung verzichtet, weil schon das Band zu schlecht war. Bei schlechten Bändern können einzelne Frames nicht digitalisiert werden. Diese werden dann von mencoder übersprungen. Werden zu viele übersprungen, wird das Ergebnisvideo sprunghaft, weil die 25 FPS nicht mehr erreicht werden. 50 gut verteilte defekte Frames in einem Film von 2 Stunden Länge fallen nicht auf. Ein Schnitt von 13FPS fällt ganz deutlich auf und ist unbrauchbar, auch wenn der Ton noch fehlerfrei sein sollte. Der Ton ist insgesamt weniger kritisch.

Die Qualität ist „sehr ähnlich“ zum Original, man kann das Ergebnis mit gmplayer abspielen und parallel dazu das Original laufen lassen, dann kann man gut vergleichen. Der Farbkontrast ist in hellen, kontrastarmen Szenen schlechter (schwächer) und das Bild in Bewegungen verschwommener. Desweiteren treten ganz selten blockhafte Strukturen im Bild auf (Typische Szenen hierfür: bildfüllend Wasserfälle oder Wasserstrudel, Flammenmeer). Insgesamt bin ich mit dem Ergebnis recht zufrieden, denn die Videokassetten werden immer älter und schlechter. Man kann auch die Aufnahmequalität erhöhen, dann werden allerdings die Dateien grösser. Für mich war aber die Qualität mit den gewählten Optionen ausreichend.

Nachtrag: Analoge Aufnahmen direkt vom TV-Tuner: Der TV-Tuner liefert eine deutlich höhere Qualität als der Videorecorder. Daher wäre 1200KBit/s eine Verschlechterung des Videosignals. Ich habe bisher Aufnahmen mit 2000KBit/s direkt vom Tuner gemacht, die sehr gute Qualität haben. Es treten keinerlei blockhafte Strukturen auf und der Farbkontrast ist auch in Verläufen ganz sauber. Bei Aufnahme von Band ist 128 KBit fürs Audio ausreichend, ich bin aber bei Aufnahmen von TV später auf 192KBit übergegangen.

Nachtrag 2, 2010: Digitale Aufnahmen via Satellit: Hier ist die Qualität sehr hoch. Ich komprimiere die als MPEG2 ankommenden Streams/Dateien aus Platzgründen auf XVID-Format mit 3000KBit/s um, wobei dennoch eine leichte Verschlechterung zum MPEG2-Original sichtbar ist. Möglicherweise müsste man hier ein 2-Pass-Encoding anwenden, das dauert mir aber zu lange 🙂

Sonstige nützliche Tipps

Während der Kompression kann man -je nach Konstellation- nicht immer gleichzeitig das Bild verfolgen. Damit wird das Starten und Stoppen des Encodings zum Blindflug. Man kann vorher Startzeit und Endzeit des Films am VCR ermitteln, was aber aufwendig ist und Zeit kostet. Ich habe mir daher bei ebay einen billigen kleinen LCD-Fernseher (Casio TV-880) für 27 Euro gekauft, der einen AV-Eingang besitzt.

Das Kabel vom VCR wird per Adapter auf zwei Chinchbuchsen verteilt. Damit kann sowohl der Computer als auch der kleine LCD-Monitor angesteuert werden. Somit kann man zu jeder Zeit das aufgenommene Bild verfolgen und ist von der Computerhardware/Software unabhängig. Dies macht den Aufnahmevorgang deutlich einfacher.

Adapter 1x Chinch auf 2 x Chinch

Casio TV-880

Andere Software

Ich habe auch andere Software ausprobiert:

kdenlive: Das beste mir momentan bekannte Schnitt- und Videobearbeitungsprogramm unter Linux. Mit kdenlive kann man einen ganzen Film machen, mit Vorspann und Übergängen zwischen den Szenen und Videoeffekten. Ist also viel weitergehender als das oben benutzte kdenlive.

ffmpeg: Dies ist eine Art Konkurrenz zu mencoder, und ebenfalls extrem flexibel. Ich habe auch viel mit ffmpeg gemacht, gerade wenn es um Formatkonversion geht.

kino: Fokus auf dem DV-Format. Konvertiert meine MPEG-Daten zuerst ins DV-Format, dann kann man mit kino ganz schon im Video schneiden und zusammenfügen. Tool ist gut, mir misfielen aber die nötigen und zeitraubenden Konversionen. Ausserdem hatte ich das Gefühl dass das Programm mit Full HD nicht umgehen kann.

mpegtools: erfordern ein eigenes, internes Format (enc), war daher für mich uninteressant.

Cinerella: scheint eine Super-Software zu sein. Ist allerdings so komplex, dass ich es nicht verstanden habe. Ohne viel Zeit wird man mit Cinerella nichts tun können.

Versuche unter Windows

Mit der Hauppauge-Karte kommt auch Windows Software mit, z.B. Treiber und ein Software-Videorecorder. Ich hatte dies alles auf dem selben Rechner unter Windows 2000 installiert. Leider hatte ich unter Windows nach 30 Minuten Aufnahme in den Ergebnisdateien deutliche Abweichungen zwischen Bild und Ton (Ton kam 5 Sekunden vor dem zugehörigen Bild). Wie unter Windows die Codecs konfiguriert werden können, habe ich nicht herausgefunden. Da ich unter Windows ohnehin nicht arbeite, habe ich diesen Weg nicht weiter verfolgt.

Schreibe einen Kommentar