Analoge Videoquellen mit Linux digitalisieren

Analoge Videoquellen mit Linux digitalisieren

Wenn man alte analoge VHS-Kassetten oder andere analoge Video-Aufnahmen, z. B. von VHS-C, mit Linux capturen, also digitalisieren will, so ist dies mit einem gewissen Aufwand möglich.

Es gilt, einige Dinge zu beachten, die hohe Frustration erzuegen und so zum Scheitern des Projektes führen können. Es loht sich jedoch, am Schluß wird man aber mit einem Ergebnis mit höchster Qualität belohnt.


Das Capturen: die Hardware-Seite

Ich habe einen USB-Video-Grabber verwendet, den ich bei einem Discounter aus der Grabbelkiste für wenig Geld ergattert habe. Der dort verwendete Chipsatz wird gut unter Linux unterstützt.

Zuerst gilt es, mechanische Probleme zu lösen. Wenn der Videorecorder schon lange nicht mehr benutzt wurde, sollte man ihn u. U. öffnen, und kontrollieren, ob die Mechanik beim Einlegen einer Kassette noch optimal funktioniert. Eventuell muss der Treibriemen getauscht, oder die Rutschkupplung regeneriert / erneuert werden.

video-capture video-capture

Beim Anschluss ist zu beachten, dass die Ausgänge korrekt abgegriffen werden. Wenn man sich hier ob des eingesetzten Kabel-Materials nicht sicher ist, solltem man das vorher an einem Fernsehgerät probieren. Schade ist, wenn man länger nach einem Fehler sucht, und es dann bereits an falschem Kabel oder mechanisch schlecht justiertem Gerät scheitert.

video-capture video-capture

Ich hatte zusätzlich noch die Situation, dass eine der zu digitalisierenden Kassetten mechanisch angezählt war. Sie wurde vom Recorder nicht richtig “gezogen”, und es kam zum Band-Fresser, weil nicht aufgespult wurde. Hier hilft nur das Zerlegen, und z. B. Entfernen der Druck-Federn in der Kassette . Alternativ kann man auch stark Klopfen usw. um das Bandmaterial flach zu sortieren und die Reibung zu verringern. Besonders Kassetten, die lange lagerten, haben dieses Problem. Naja, muss ja nur noch einmal Abspielen verkraften …

video-capture video-capture

In diesem Stadium ist u. U. einiges feinmechanische Geschick vonnöten!


Das Capturen: die Software-Seite

Man denkt, jetzt wird es einfacher - aber auch hier lauern Fallstricke!

  • Wird das USB-Gerät nach dem Einstecken erkannt?
# lsusb
[...]
Bus 001 Device 003: ID eb1a:2820 eMPIA Technology, Inc.
[...]
  • Mit dmesg schauen wir nach, ob das Interface korrekt erkannt wurde und /dev/video0 verfügbar ist.
[ 4733.550119] em28xx 1-3:1.0: New device   @ 480 Mbps (eb1a:2820, interface 0, class 0)
[ 4733.550120] em28xx 1-3:1.0: Video interface 0 found: bulk isoc
[ 4733.602842] em28xx 1-3:1.0: chip ID is em2820
[ 4733.670073] em28xx 1-3:1.0: board has no eeprom
[ 4733.709071] em28xx 1-3:1.0: No sensor detected
[ 4733.720563] em28xx 1-3:1.0: found i2c device @ 0x4a on bus 0 [saa7113h]
[ 4733.747935] em28xx 1-3:1.0: Your board has no unique USB ID.
               A hint were successfully done, based on i2c devicelist hash.
               This method is not 100% failproof.
               If the board were misdetected, please email this log to:
                V4L Mailing List  <linux-media@vger.kernel.org>
               Board detected as EM2860/SAA711X Reference Design
[ 4733.885724] em28xx 1-3:1.0: Identified as EM2860/SAA711X Reference Design (card=19)
[ 4733.885726] em28xx 1-3:1.0: analog set to isoc mode.
[ 4733.885755] em28xx 1-3:1.0: Registering snapshot button...
[ 4733.885806] input: em28xx snapshot button as /devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.0/input/input11
[ 4733.885932] em28xx 1-3:1.0: Remote control support is not available for this card.
[ 4733.896890] em28xx 1-3:1.0: Registering V4L2 extension
[ 4734.155494] saa7115 12-0025: saa7113 found @ 0x4a (1-3:1.0)
[ 4734.636657] em28xx 1-3:1.0: Config register raw data: 0x00
[ 4734.979007] em28xx 1-3:1.0: V4L2 video device registered as video0
[ 4734.979010] em28xx 1-3:1.0: V4L2 extension successfully initialized
[ 4734.979011] em28xx: Registered (Em28xx v4l2 Extension) extension

Fehlt der Hinweis auf v4l2, ist auch /dev/video0 nach dem Einstecken des Gerätes nicht vorhanden. In meinem Fall lag es daran, dass die Konfiguration für den EM28xx-Chipsatz und V4L2 in der Kernel-Konfiguration nicht aktiv war. So muss es aussehen:

  • Ausschnit aus Datei /usr/src/linux/.config
[...]
CONFIG_VIDEO_EM28XX=m
CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_EM28XX_DVB=m
CONFIG_VIDEO_EM28XX_RC=m
[...]
  • Ist /dev/video0 vorhanden?
chrissie@fehmarn ~/my_txt $ ls -lha /dev/|grep -i video
[...]
crw-rw----  1 root     video     81,   0 Sep 16 06:52 video0
  • Der Benutzer, der captured, muss natürlich in der Gruppe Video sein!

  • mit Audio-Capture wird es ein wenig diffiziler Der Klinkenstecker vom Video-Capture-Gerät muss in den Line-In der Soundkarte gesteckt werden. Da die Onboard-Soundkarte bei mir viele Störungen bei der Aufnahme verursacht, habe ich sie deaktiviert und verwende eine PCI-Steckkarte Creative Labs CT5880. Außerdem habe ich den Nvidia-HDMI-Sound-Ausgang deaktiviert. Dies geschieht, in dem man das Kernel-Modul snd_hda_intel blacklistet und neu starten.

chrissie@fehmarn ~ $ cat /etc/modprobe.d/blacklist-snd.conf 
# blacklists nvidia nouveau hdmi sound card
blacklist snd_hda_intel

Ich habe so nur eine Soundkarte im System. So habe ich die Fehlerquelle, die richtige Soundkarte via ALSA anzusprechen, eliminiert. Wenn man sich seiner Sache sicher ist, kann man natürlich auch mehrere Soundkarten im System haben. Die Angaben zum Alsa-Device sind dann jeweils anzupassen.

  • Wiedergabe-Geräteanzeigen, um die Alsa-HW-Nummern herauszufinden
chrissie@fehmarn ~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: AudioPCI [Ensoniq AudioPCI], device 1: ES1371/2 [ES1371 DAC1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
  • Aufnahme-Geräteanzeigen, um die ALSA-HW-Nummern herauszufinden:
chrissie@fehmarn ~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
  • Einstellen des Capture-Kanals

Dies Problem hat mich länger beschäftigt: Man hört zwar den Ton vom Videorecorder in den PC-Lautsprecherboxen, aber er wird nicht aufgezeichnet. Das liegt daran, weil der Line-Eingang ge-unmutet werden muss und auf Capture gestellt werden muss. Zusätzlich muss der separate Capture-Kanal ge-unmuted werden und auch dort ein Pegel eingestellt werden. Das kann man alles mit dem Programm alsamixer erledigen. Un-Muten tut man mit der Taste M, Capture-Device auswählen mit der Taste Space. Wie hier muss es aussehen: Ge-Unmutete Kanäle werden mit OO grün gekennzeichnet, das zu capturende Signal mit rot CAPTURE. Dies sieht man aber erst, wenn man bei View F5 für ALL drückt. Aufgrund dieser Problematik habe ich mich deshalb dazu entschlossen, alle unnötigen Soundkarten aus dem System zu verbannen, um dies lösen zu können.

alsamixer-capture

  • Wiedergabe geht nicht mehr

Es trat dann ein weiteres Problem auf: Wiedergabe ging auf einmal nicht mehr. Also noch einmal alles durchdebuggen:

chrissie@fehmarn ~ $ cat /proc/asound/cards 
 0 [AudioPCI       ]: ENS1371 - Ensoniq AudioPCI
                      Ensoniq AudioPCI ENS1371 at 0xec00, irq 20
chrissie@fehmarn ~ $ aplay /usr/share/sounds/alsa/Front_Center.wav
aplay: main:830: audio open error: Device or resource busy

Ui, die Soundkarte ist jetzt durch irgendwas blockiert. Das war wohl der Firefox. Er blockert exklusiv die Soundkarte. Firefox schließen!j

Ich habe noch herausgefunden, dass es folgende alte Eintr\xc3\xa4ge in der alsa.conf waren:

##  ALSA portion
alias snd-card-0 snd-ens1371
## alias snd-card-1 snd-ens1371
##  OSS/Free portion
alias sound-slot-0 snd-card-0
##

Diese alias snd-card-… und alias sound-slot-… auskommentieren, und neu starten.

chrissie@fehmarn ~ $ su -
chrissie@fehmarn ~ # vi /etc/modprobe.d/alsa.conf
chrissie@fehmarn ~ # reboot
  • die Freude währte nur kurz, am nächsten Tag ging wieder nichts. Habe die Ensoniq Karte gegen eine mit CS4281 ausgetauscht. Sieht so aus, als ob die Soundkarte einen hardwaremäigen Defekt hat?? Muss ich aber noch überprüfen. Schön, wie man alle Fehler der Reihe nach durch macht.

Mann sollte wohl auch im Home-Verzeichnis eine .asoundrc anlegen mit diesem Inhalt:

defaults.pcm.!card CS4281
defaults.pcm.!device 0
defaults.pcm.!ctl CS4281

Den Namen kann man hier entnehmen:

chrissie@fehmarn ~ $ cat /proc/asound/cards 
 0 [CS4281         ]: CS4281 - Cirrus Logic CS4281
                      Cirrus Logic CS4281 at 0xfebff000, irq 20

neuer Test- geht erst mal wieder …

chrissie@fehmarn ~ $ aplay /usr/share/sounds/alsa/Front_Center.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
  • jetzt testen, ob das Capturen ansich geht

Am Videorecorder Play drücken, ein Bild sollte erscheinen, Ton sollte hörbar sein.

Input=1 ist bei meinem Capture-Device das Video Input. Das ist je nach Hardware verschieden, evtl. durchprobieren. Ansonsten /dev/vide0 und alsa:adevice=hw.0 beachten

mplayer tv:// -tv channel=0:driver=v4l2:device=/dev/video0:normid=5:input=1:width=720:height=576:norm=PAL:fps=25:alsa:adevice=hw.0:forceaudio:brightness=0:contrast=0:hue=0:saturation=0:buffersize=128

video-capture video-capture

  • Einen Frame capturen z. B. wenn man das zu Dokumentationszwecken braucht
mplayer tv:// -tv driver=v4l2:input=1 -vo png:z=9 -frames 1


kompletten Film capturen

  • Capture und Encode des Films in Einem

Achtung - endpos wird hier verwendet

Eventuell mit nice und sudo auf -19 stellen!

mencoder tv:// -tv channel=0:driver=v4l2:device=/dev/video0:normid=5:input=1:width=720:height=576:norm=PAL:fps=25:alsa:adevice=hw.0:forceaudio:brightness=0:contrast=0:hue=0:saturation=0:buffersize=256 -ovc xvid -xvidencopts fixed_quant=4:threads=2:turbo:nochroma_me:vhq=0 -oac mp3lame -lameopts cbr:br=128 -endpos 04:10:00 -o VHS1.avi
  • Zwei-Pass kann man so tun

pass 1:

mencoder tv:// -tv channel=0:driver=v4l2:device=/dev/video0:normid=5:input=1:width=720:height=576:norm=PAL:fps=25:alsa:adevice=hw.0:forceaudio:brightness=0:contrast=0:hue=0:saturation=0:buffersize=256 -oac pcm -ovc copy -endpos 04:10:00 -o VHS1raw.avi

pass 2:

mencoder -ovc xvid -xvidencopts fixed_quant=4 -oac mp3lame -lameopts cbr:br=128 -ofps 25 -o VHS1.avi VHS1raw.avi

oder pass2:

avconv -i VHS11raw.avi -acodec mp3lame -lameopts preset=medium:aq=0 -vcodec libx264 -qscale 3 -aspect 4:3 tape1.mp4
  • Andere Compress-Möglichkeiten

all being said, try something along the following:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a libfaac -b:a 192k -ac 2 out.mp4

If libfaac is not available, use this instead:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a aac -strict experimental -b:a 192k -ac 2 out.mp4

The main quality control knob will be your CRF setting. Experiment with that and use a lower value if you need better quality.

You can also choose the veryslow preset, which will give you better compression, but the encoding will obviously take longer.

If you can’t manage to get a decent quality file at a reasonable file size, then you’re out of luck. Better keep the original file as-is, without re-encoding. There’s no magic “keeping the same quality” tool when you’re compressing something that’s already compressed.

  • Wichtig ist, unter Gentoo mplayer mit dem encode-Use-Flag zu emergen, so dass auch der mencoder zur Verfügung steht!

  • Hat mir so ausgereicht. Es gibt noch einiges einzustellen und zu beachten, dazu hier weiterlesen. Es wird bei Linuxtv erklärt, wie man die Capture-Qualität auf dasMaaximale steigern kann!

https://wiki.ubuntuusers.de/Videograbbing/

http://linux.goeszen.com/digitising-vhs-tapes-on-linux.html

https://www.linuxtv.org/wiki/index.php/V4L_capturing

https://docs.salixos.org/wiki/How_to_create_a_video_DVD_from_the_command_line

Artikel erstellt am: 09 July 2020 , aktualisiert am 09 July 2020