Ubuntu 12.04 „Precise Pangolin“
Ubuntu 11.10 „Oneiric Ocelot“
Ubuntu 10.04 „Lucid Lynx“
"Videograbbing" ist die Betrachtung oder Aufnahme (Digitalisierung) von Videos von externen analogen Videoquellen mittels einer TV-Karte oder Video-Capture-Karte (auch Videograbber oder nur Grabber genannt). Auch eine Webcam oder Spezialgeräte wie z.B. ein USB-Mikroskop können dafür genutzt werden (im weiteren Artikel ist vereinfachend nur von einer TV-Karte die Rede).
Im Unterschied zu den großen Lösungen wie MythTV oder VDR geht es hier darum, ohne großen Installationsaufwand eine Videoquelle zu betrachten und Aufnahmen zu erstellen.
Die Angaben in diesem Artikel wurden mit einem EasyCAP DC 60 Videograbber und einem Medion:Medion TV-Tuner 7134 PCMCIA auf einem System mit 1 GB RAM und einer Dualcore-CPU mit 1,83 Mhz getestet.
Betrachten und Digitalisieren von VHS-Kassetten (VHS rippen)
Nutzung einer Überwachungskamera, Webcam, USB-Mikroskop ...
Fernsehen/ Aufnehmen vom Sat- oder Kabelreceiver
Für das Videograbbing eignet sich jede TV-Karte mit Composite- und/oder S-Video-Eingang, sofern sie von Linux erkannt wird). Für die Aufnahme von einem VHS-Rekorder mit analogem Antennenausgang kann auch der analoge Antenneneingang einer TV-Karte genutzt werden.
Nach dem Hochfahren des Systems bzw. nach dem Einstecken der Karte (PCMCIA oder USB) zeigt der Aufruf von
ls /dev/video*
ob ein Videogerät angelegt wurde, bzw. wie viele Videogeräte im System vorhanden sind. Wenn der Eintrag /dev/video0 (bzw. /dev/video1 ... 2 ... bei mehreren Karten im System) zwar vorhanden ist, aber der Zugriff verweigert wird, dann kann mit
sudo chmod a+r /dev/video0
das Videogerät für alle Nutzer lesbar gemacht werden.
Wenn der Eintrag /dev/video0 überhaupt nicht vorhanden ist, dann ist noch Handarbeit für die Installation nötig. Ein Blick auf die Ausgabe von
dmesg
gibt detaillierte Informationen über die Karte, die geladenen Treiber und eventuelle Fehlermeldungen.
Für die Konfiguration der Betrachter- und Aufnahmeprogramme muss man die Gerätedateien ("device nodes") kennen, an denen das Betrachterprogramm das Video- und Audiosignal „abholen“ kann.
Linux legt für jede (erkannte) analoge TV-Karte im System den Geräteknoten /dev/videoX an (/dev/video0 für die erste TV Karte, /dev/video1 für die zweite etc.). Die einzelnen Eingänge der TV-Karte werden als Input
angesprochen. In der Syntax von MPlayer sieht das dann bei einer Karte mit Analog-TV, Composite (CVBS), und S-Video Eingängen (z.B. Medion TV-Tuner 7134 PCMCIA) so aus:
Analog TV: device=/dev/video0:input=0
Composite: device=/dev/video0:input=1
S-Video: device=/dev/video0:input=2
Aus Sicht des ALSA-Soundsystems gilt die TV-Karte einfach als weitere Soundkarte. Weil in der Regel eine Soundkarte im System vorhanden ist, ist die erste TV-Karte die zweite Soundkarte. Die Nummern der Soundkarten können mit den Befehl
cat /proc/asound/cards
Beispiel für die Ausgabe auf der Konsole:
0 [Intel ]: HDA-Intel - HDA Intel HDA Intel at 0xf0580000 irq 43 1 [EasyALSA0 ]: easycapdc60 - easycap_alsa easycap_alsa 2 [SAA7134 ]: SAA7134 - SAA7134 saa7134[0] at 0x48000000 irq 18
in Erfahrung gebracht werden. In der Syntax von ALSA hat der Eingang der zweiten Soundkarte die Bezeichnung: hw:1,0
. In der Syntax von MPlayer wird die Soundeingabe der TV-Karte so angesprochen:
alsa:adevice=plughw.1,0
Alternativ kann der Name der Soundkarte (steht hinter der Nummer in eckigen Klammern) angegeben werden. Das ist bei manchen Webcam-Modellen notwendig. Beispiel für MPlayer:
alsa:adevice=plughw.SAA7134
OSS Audio wird nur noch unter Lucid unterstützt
Das Audiosignal wird im OpenSoundSystem auf /dev/dsp ausgegeben. Um den Ton von der TV-Karte zu bekommen, müssen die Mixereinstellungen (am Besten mit alsamixer in der Konsole) entsprechend angepasst werden.
In der Syntax von MPlayer wird die Soundeingabe über OSS so angesprochen:
:adevice=/dev/dsp
Wenn die TV-Karte keinen Audioeingang hat (z.B. eine Webcam), oder wenn er einfach nicht funktioniert, dann kann das Audiokabel auch am Line-in- (oder Mikrofon-)Eingang der Soundkarte angeschlossen werden. Im Betrachter-/Aufnahmeprogramm müssen dann nur die entsprechenden Parameter der Soundkarte (z.B. bei ALSA: hw:0,0
) angegeben und die Mixereinstellungen entsprechend angepasst werden.
Alle folgenden Beispiele gehen davon aus, dass das Videosignal vom Geräteknoten /dev/video0 kommt, die Input-Nummer ist 1
und die TV-Karte wird von ALSA als zweite Soundkarte registriert.
Bei einer anderen Konfiguration des Systems müssen die Angaben für tvtime, MPlayer/MEncoder oder VLC entsprechend der Konfigurationshinweise (siehe oben) geändert werden.
tvtime ist ein Fernsehanzeigeprogramm für analogen TV-Empfang, bei dem vor allem auf die Bildqualität wert gelegt wird. Mit tvtime kann jede analoge Videoquelle unter Linux betrachtet werden. Aufnehmen ist mit tvtime nicht möglich. Wenn tvtime über das Menü aufgerufen wird, kann man im OSD von tvtime über "Eingangssignal -> Videoquelle wählen" den Eingang der TV-Karte auswählen, an dem die Videoquelle angeschlossen ist. Nicht alle TV-Karten spielen mit tvtime auch den Ton ab.
SoX, ein universaler Audioplayer und -konverter für die Kommandozeile, wird benötigt, wenn man mit tvtime keinen Ton hört. Auf der Kommandozeile kann man tvtime gemeinsam mit Sox zum Abspielen des Tons aufrufen.
tvtime -d /dev/video0 -i 1 -n PAL | sox -t alsa plughw:1,0 -s2 -c 2 -r 48000 -s2 -t alsa default
Wenn bei der TV-Karte zuvor ein anderer Eingang (z.B. Composite) genutzt wurde, dann funktioniert der Antennenempfang gegebenenfalls nur, wenn die Karte zuvor neu initialisiert wurde (z.B. über das Aus- und wieder Einstecken der Karte bzw. Neustart des Systems).
tvtime wurde entwickelt, um analoges Antennenfernsehen unter Linux sehen zu können. VHS-Rekorder geben beim Abspielen das Videosignal auch über den Antennenausgang aus. Mit tvtime kann man das ausnutzen, um alte VHS-Aufnahmen anzuschauen. Dafür muss das Antennenkabel beim Ausgang des VHS-Rekorders und beim (analogen) Antenneneingang der TV-Karte angesteckt werden. Während eine Kassette abspielt, wird mit tvtime eine Kanalsuchlauf durchgeführt.
Wenn bei diesem Verfahren zwar das Video zu sehen aber kein Ton zu hören ist, kann man den Befehl tvtime mit SoX verwenden. Die Input-Nummer muss entsprechend angepasst werden, sie kann aber auch im OSD-Menü von tvtime umgestellt werden.
Mplayer und MEncoder werden in den entsprechenden Wikiartikeln in ihrer Funktion beschrieben. Wer mehr über die in den MPlayer- und MEncoder-Befehlen verwendeten Optionen, weitere Einstellungsmöglichkeiten und die Tastatursteuerung wissen möchte, kann die Manpage
(sehr umfangreich) zu Rate ziehen.
mplayer tv:// -tv driver=v4l2:width=720:height=576:outfmt=uyvy:device=/dev/video0:input=1:fps=25 -nosound
mplayer tv:// -tv driver=v4l2:width=720:height=576:outfmt=uyvy:device=/dev/video0:input=1:fps=25:alsa:amode=1:forcechan=2:audiorate=48000:adevice=plughw.1,0:forceaudio:immediatemode=0 -ao sdl,alsa
mplayer tv:// -tv driver=v4l2:width=720:height=576:outfmt=uyvy:device=/dev/video0:input=1:fps=25:amode=1:forcechan=2:audiorate=48000:adevice=/dev/dsp:forceaudio:immediatemode=0 -ao oss,sdl
Der Vorteil bei der Aufnahme mit MEncoder liegt darin, dass in Kombination mit den unten angegebenen Filtern Videodateien entstehen, die nicht mehr umkodiert werden müssen.
DivX/avi ist ein speichersparendes universales MPEG4/MP3-Format (ca. 10MB/ Minute), das von nahezu allen Media- und Hardwareplayern (z.B. DVD-Player, PVR-Receiver) abgespielt werden kann. Die Qualität kann durch Erhöhen oder Herabsetzen der Bitrate (Standardeinstellung: vbitrate=1200
) verändert werden.
Die Installation von lame (MP3-Encoder) ist notwendig für die Aufnahme im DivX/avi-Format!
Das MPEG2/MP2-DVD-Format eignet sich zum Erstellen von eigenen DVDs (ca. 40 MB/ Minute). Die aufgenommen avi oder mpeg-Videos können anschließend z.B. mit Avidemux geschnitten werden.
mencoder tv:// -tv driver=v4l2:width=720:height=576:outfmt=uyvy:device=/dev/video0:input=1:fps=25 -nosound -ffourcc DX50 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:turbo:vbitrate=1200:keyint=15 -o Aufnahme.avi
mencoder tv:// -tv driver=v4l2:width=720:height=576:outfmt=uyvy:device=/dev/video0:input=1:fps=25:alsa:adevice=plughw.1,0:audiorate=48000:amode=1:forceaudio:immediatemode=0 -ffourcc DX50 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:turbo:vbitrate=1200:keyint=15 -oac mp3lame -o Aufnahme.avi
mencoder tv:// -tv driver=v4l2:width=720:height=576:outfmt=uyvy:device=/dev/video0:input=1:fps=25:adevice=/dev/dsp:audiorate=48000:amode=1:forceaudio:immediatemode=0 -ffourcc DX50 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:turbo:vbitrate=1200:keyint=15 -oac mp3lame -o Aufnahme.avi
mencoder tv:// -tv driver=v4l2:width=720:height=576:outfmt=uyvy:device=/dev/video0:input=1:fps=25:alsa:adevice=plughw.1,0:audiorate=48000:amode=1:forceaudio:immediatemode=0 -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=8000:vbitrate=5000:keyint=15:acodec=ac3:abitrate=192:aspect=4/3 -o test.mpg
-aspect 16:9 | ändert das Bildformat bei der Wiedergabe auf 16:9 |
-endpos hh:mm:ss | Beendet die Wiedergabe/Aufnahme nach Ablauf der angegebenen Zeit |
Wenn die Filter bei der Aufnahme mit MEncoder eingesetzt werden, muss das Video nicht mehr nachbearbeitet werden.
-vf | eröffnet die Filterkette, nach einem Leerzeichen werden die einzelnen Filter, jeweils durch ein Komma getrennt, angefügt |
pp=lb | ein Deinterlace-Filter (hat sich u.a. bei der Digitalisierung von VHS-Kassetten bewährt) |
crop=w:h:x:y | schneidet einen Ausschnitt aus dem Videorahmen heraus. w ist die Breite und h die Höhe des Ausschnitts, x gibt an wie viele Pixel der Ausschnitt von links verschoben ist, und y gibt an, wie viele Pixel der Ausschnitt von unten verschoben ist. |
scale=w:h | verkleinert oder vergrößert das Video entsprechend der angegebenen Pixelwerte. Ein Verkleinern des Videos erhöht (!) die Qualität, weil es Artefakte verringert. |
Beispiele:
Beim Zuschneiden oder Skalieren des Videos ist zu beachten, dass das Seitenverhältnis (4:3 oder 16:9) beibehalten wird, um Verzerrungen zu vermeiden. Die Werte von Breite und Höhe sollten immer ein Vielfaches von 8 sein, damit das Video zum AVI-Standard kompatibel bleibt.
crop=720:406:0:68 | schneidet von einem 4:3 Video oben und unten einen Balken mit 68 px Breite ab, das Ergebnis ist eine Video im Verhältnis 16:9 |
crop=720:568:0:8 | schneidet von einem 4:3 (VHS)-Video unten einen 8 px breiten Rand (flimmernde Kontrollspur) weg |
scale=640:480 | verkleinert eine 4:3 Video |
scale=704:396 | verkleinert ein 16:9 Video |
crop=720:320:0:43 | schneidet von einem Cinemascope Film der im 16:9 Format vorliegt die schwarzen Ränder ab |
Beispiel für ein Filterkette (wird am Ende des MEncoder-Befehls angehängt):
-vf pp=lb,crop=720:406:0:68,scale=704:396
Für MPlayer/MEncoder gelten die gleichen technischen Voraussetzungen wie für tvtime.
mplayer tv:// -tv driver=v4l2:chanlist=europe-west
Mit den Tasten H (= higher) und L (= lower) kann man die Kanäle durchsuchen (wird auf der Konsole angezeigt), bis man den Kanal des VHS-Rekorders gefunden hat. Wenn der Kanal gefunden ist, kann man ihn in die Befehlszeile eintragen:
mplayer tv:// -tv driver=v4l2:chanlist=europe-west:channel=60
Um den Ton zu hören, müssen noch die Parameter für das Audiogerät angehängt werden:
mplayer tv:// -tv driver=v4l2:chanlist=europe-west:channel=60:alsa:adevice=plughw.1,0:audiorate=48000:amode=1:forceaudio:immediatemode=0
Zum Aufnehmen verwendet man die schon von oben bekannte MEncoder-Befehlszeile mit der Angabe der chanlist
und des channel
.
mencoder tv:// -tv driver=v4l2:chanlist=europe-west:channel=60:fps=25:alsa:adevice=plughw.1,0:audiorate=48000:amode=1:forceaudio:immediatemode=0 -ffourcc DX50 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:turbo:vbitrate=1200:keyint=15 -oac mp3lame -o test.avi
FFmpeg (ab Ubuntu 12.04 avconv) ist ein Konsolenprogramm zum Konvertieren von Mediendateien, mit dem auch analoge Videoquellen aufgezeichnet werden können. Betrachten ist mit ffplay (avplay) möglich. In den Grundfunktionen ist FFmpeg/avconv mit Mencoder vergleichbar.
Für die folgenden Befehle müssen die libav...-extra Pakete (Unterstützung für den MP3-Encoder) installiert sein.
ffmpeg -f video4linux2 -aspect 1.3333 -s 720x576 -r 25 -vc 1 -pix_fmt yuv420p -i /dev/video0 -f alsa -ar 44100 -ac 2 -acodec pcm_s16le -i hw:1 -vcodec mpeg4 -vtag DX50 -b 1200k -r 25 -acodec libmp3lame -ar 44100 -ac 2 -ab 128k -y test.avi
ffmpeg -f video4linux2 -i /dev/video0 -aspect 1.3333 -s 720x576 -r 25 -vc 1 -pix_fmt yuv420p -f oss -ar 44100 -ac 2 -acodec pcm_s16le -i /dev/dsp -vcodec mpeg4 -vtag DX50 -b 1200k -r 25 -acodec libmp3lame -ar 44100 -ac 2 -ab 128k -y test.avi
FFmpeg ist weniger umfangreich dokumentiert als MPlayer/MEncoder.
Über den Parameter -vc 1 kann man die input Nummer an der TV-Karte angeben. In der Manpage von FFmpeg steht, dass dieser Parameter nur für DV1394 Geräte gilt.
Die in Ubuntu 11.10 enthaltene Version von FFmpeg (0.7.2-4) arbeitet nicht mit einer TV-Karte zusammen. Auf der Konsole wird folgende Fehlermeldung ausgegeben:
/dev/video0: could not find codec parameters
avconv ist in Ubuntu der auf Libav basierende Nachfolger von ffmpeg (das "alte" FFmpeg wird getrennt von Libav weiterentwickelt). Folgende Befehlszeile für die TV-Aufnahme funktioniert in Ubuntu 12.04, die Qualität kommt aber (noch) nicht an Mencoder heran.
avconv -f video4linux2 -aspect 1.3333 -s 720x576 -channel 1 -pix_fmt yuv420p -i /dev/video0 -f alsa -ar 44100 -ac 2 -acodec pcm_s16le -i hw:1 -vcodec mpeg4 -vtag DX50 -b 1200k -r 25 -acodec libmp3lame -ar 44100 -ac 2 -ab 128k -y test.avi
Der VLC-Mediaplayer wird im entsprechenden Wikiartikel beschrieben. Er hat nicht nur ein grafisches Menü, sondern kann auch von der Kommandozeile mit direkt angegebenen Parametern gestartet werden.
vlc v4l2:///dev/video0:input=1:width=720:height=576:norm=PAL :input-slave=alsa://plughw:1,0 --demux rawvideo
VLC bietet ein umfangreiches grafisches Menü, in dem man alle Gerätedateien und Einstellungsparameter eingeben kann. Im Menü "Medien > Aufnahmegerät öffnen" kann man die Video- und Audiogerätenamen eingeben (siehe Bild). Die Eingaben im Bild entsprechen dem VLC-Befehl für die Kommandozeile (oben).
Über den Menüpunkt "Extras > Spur-Synchronisierung" kann eine verzögerte Tonspur auf "lippensynchron" korrigiert werden. Erfahrungsgemäß ist eine Korrektur von -300 bis -500 ms notwendig.
Will man OSS-Audio verwenden, muss man im gleichen Dialog unten das Feld "Mehr Optionen anzeigen" auswählen und in der Zeile Optionen bearbeiten :input-slave=alsa
durch :input-slave=oss
ersetzen (siehe Bild).
Um ein Video mit VLC aufzunehmen, wählt man im Dialog "Aufnahmegerät öffnen" unten statt "Wiedergabe" - "Konvertieren/ Speichern" aus. Im nächsten Dialog gibt man den Namen der Zieldatei (des Videos) an und wählt ein Profil (das Dateiformat) aus. Es stehen viele Profile zur Auswahl, für die die Einstellungen für die Videoqualität (Bitrate etc.) über den Button
noch individuell angepasst werden können.
Bei einigen Profilen sind die Bitraten für den Video- und Audioencoder standardmäßig sehr niedrig angesetzt, durch Erhöhen kann man eine bessere Qualität der Aufnahme erreichen.
Folgende Programme werden hier nur erwähnt:
xawtv - Ein TV-Anzeigeprogramm, in den Funktionen vergleichbar mit tvtime, aber mit Aufnahmemöglichkeit.
Mtvcgui (Mencoder TV Capture GUI) - ein Pythonprogramm für TV-Aufnahmen mit MEncoder.