Ich habe immer noch ein paar alte VHS-Videokassetten im Schrank stehen und hoffe inständig mein alter Videorekorder hält lange genug bis ich die VHS Videokassetten digitalisieren kann. Dann sah ich den PVG-100 USB-Stick bei Pollin und dachte mir für unter zehn Euro kann man nicht viel falsch machen. Der Stick ist leicht anzuschließen. Einfach die drei Composite Stecker (gelb, weiß, blau in den Video Rekorder und auf der anderen Seite in den Stick stecken und den USB-Stick mit einem freien USB-Port verbinden. Der Stick braucht unbedingt einen USB 2.0 Port. Mit einem USB 1.1 oder USB 3.0 Port funktioniert er nicht richtig. Zuerst habe ich die mitgelieferte Windows Software VHS to DVD ausprobiert. Das klappt out-of-the-box. Ich musste nur die Einstellungen des Treibers von NTSC auf PAL-B umstellen (PAL-G ginge auch) und schon sah ich das Bild des Videorekorders. Leider zeichnet der Stick unter Windows 10 dann nur in halber Auflösung auf. Also in einer Art Mini-Bild, das auch noch unschärfer wird, als die alten Videoaufzeichnungen ohnehin schon sind.
Geht das vielleicht auch unter Linux?
Also habe ich geguckt, ob ich den Stick unter Linux zum Laufen bringe. Das war „etwas“ aufwändiger. Es gibt aber eine gute Anleitung direkt vom Entwickler des Treibers, Steve Lacy, wie die nachfolgende Anleitung zeigt. Um den Treiber zu übersetzen benötigt man zwei Entwicklerpakete, die man unter Debian installiert mit:
sudo apt-get install ligcrypt11-dev libusb-1.0.0-dev
Im Ergebnis kann man mit dem Programm „somagic-both“ wunderbar Bild und Ton in getrennte RAW Dateien aufnehmen und sie dann zusammen mixen. Das zusammen mixen allerdings ist bei RAW Dateien ohne Timestamp wirklich schwierig. Am Erfolgreichsten war ich mit flowblade. Dort kann man beide Dateien als Video und Tonspur laden und dann manuell synchronisieren. Um der Frage zuvor zukommen wieso die beiden Spuren nicht sowieso synchron sind: Das liegt daran, dass bei den Aufzeichnungen der ein oder andere Frame ausgelassen (gedropped) wird. Ich erhalte dann immer Dateien, die ein paar Sekunden in der Länge auseinander liegen. Alles in Allem ein wirklich zeitraubender Weg, den ich für ca. 50 Videokassetten nicht weiter verfolgen wollte. Die entstandenen Filme sind aber qualitativ klasse, da flowblade noch jede Menge Filter und Bearbeitungsoptionen anbietet, die keine Wünsche offen lassen.
Der nächste Versuch mit einer alten TV-Karte
Dann kam mir aber die Idee, das ich noch eine alte TV-Karte habe. Es ist eine WinTV-PCI von Hauppauge, die auf dem BT848 Chip basiert. Diese Karte weist auch drei Composite Eingänge auf, so daß ich sie prima mit dem Videorekorder verbinden kann und hoffte damit die VHS Videokassetten digitalisieren zu können.
Nachdem ich die alte Karte in den einzigen PCI Slot meines aktuellen Mainboards gesteckt und den Rechner eingeschaltet habe, wurde die Karte direkt von Video4Linux2 (im Kernel enthalten) erkannt. Um den Ton zu bekommen, muss man die Karte mittels einen 3.5mm Klinke auf 3.5mm Klinke-Stecker-Kabel an die Soundkarte anschließen.
Die Aufnahmen mache ich mit mencoder und zum anschauen der Videos verwende ich tvtime. An den Parametern für mencoder habe ich schon eine Weile ausprobiert bis es klappte. Aber dafür ist das Ergebnis wirklich vorzeigbar. Video und Ton sind synchron und die Qualität ist wie auf den Videos und die Dateigröße ist auch akzeptabel.
Aufzeichnen mit mencoder
Aufgezeichnet wird mit dem Kommando (PAL, 4:3, Stereo):
mencoder tv:// -tvdriver=v4l2:device=/dev/video0:normid=5:input=1:alsa=1:adevice=hw.0,0:audiorate=48000:amode=1:width=768:height=576 \
-oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 \
-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=4/3 \
-ofps 25 -o outfile.mpg
Das geht auch automatisch
Um es noch etwas komfortabler zu bekommen, habe ich ein kleines Shell-Skript geschrieben, das auch ein einige Parameter akzeptiert, um z.B. 4:3 und 16:9 Formate auszuwählen oder auch eine Aufnahme, die sich mit dem oben genannten Kommando nicht aufzeichnen läßt, als RAW Datei zu digitalisieren (war bei mir ein Video von einem DAT Band überspielt auf VHS vor ca. 20 Jahren). Das beschleunigt das VHS Videokassetten digitalisieren nochmal ordentlich.
# !/bin/bash
#
# rec_vhs.sh - Skript zum Aufnehmen von VHS Videos über eine BT848 Fernsehkarte
# Version: 0.1
# Autor: Hans Matzen
#
raw="0"
format="16/9"
tvtime="0"
outfile="capture"
while getopts hr4to: opt
do
case $opt in
h) echo "rec_vhs.sh - Skript zum digitalisieren von VHS Videos per TV-Karte"
echo "Aufruf:"
echo "rec_vhs.sh "
echo "Optionen:"
echo "-h - gibt diesen Hilfetext aus"
echo "-4 - verwendet 4:3 Format anstatt 16:9 Format"
echo "-r - zeichnet RAW Daten auf anstatt MPEG"
echo "-t - startet tvtime und beginnt mit der Aufnahme, wenn tvtime beendet wird (ESC)"
echo "-o - gibt wie die Ausgabedatei heißen soll (ohne Suffix)"
echo ""
exit 0;;
r) raw="1";;
4) format="4/3";;
t) tvtime="1";;
o) outfile=$OPTARG;;
?) echo "Ungültige Option"; exit 1;;
esac
done
# multiplex /dev/video0 to /dev/video1
# ffmpeg -f v4l2 -i /dev/video0 -f v4l2 /dev/video1 &
# input 0 fpr antenne, 1 for composite, 2 for s-video
tvdriver_opt="driver=v4l2:device=/dev/video0:normid=5:input=1:alsa=1:adevice=hw.0,0:audiorate=48000:amode=1:width=768:height=576 "
if [ $tvtime == "1" ]; then
tvtime
fi
if [ $raw == "1" ]; then
echo "Starte Aufzeichnung mit RAW Daten"
# RAW Daten speichern
mencoder tv:// -tv $tvdriver_opt -oac copy -ovc copy -o $outfile.avi
else
echo "Starte Aufzeichnung mit MPEG Daten"
# mpg aufnehmen von bt848
mencoder tv:// -tv $tvdriver_opt \
-oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 \
-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=$format \
-ofps 25 -o $outfile.mpg
fi
Das digitalisierte VHS Video schneiden
Um das Video hinterher zu schneiden notiere ich mir unter flowblade die Timestamps an denen ich schneiden möchte und verwende ffmpeg, um die Datei zu schneiden:
ffmpeg -i outfile.mpg -ss 00:00:08 -to 01:21:50 -c copy outfile_cut.mp4
Dabei gibt man die Startzeit mit -ss <Stunde>:<Minute>:<Sekunde> und die Endzeit mit -to <Stunde>:<Minute>:<Sekunde> an.
Die Nachbearbeitung dauert also etwas 5 Minuten pro Aufnahme. Die Digitalisierung solange wie der Film, aber ich muss nicht dabei sein.
Fazit zum VHS Videokassetten digitalisieren: Knapp 10 Euro aus dem Fenster geschmissen, aber einen Weg gefunden die VHS Videokassetten zu digitalisieren.
Im nächsten Schritt möchte ich noch ausprobieren, ob es mir gelingt über das v4l2loopback Modul das Video während der Aufnahme auch sehen zu können.
Mit dem Verfahren kann man auch seine Musikvideos wunderbar auf die Festplatte bannen.
Hallo Hans,
vielen dank für den Artikel.
Benutze wie du eine alte TV-Karte mit BT848 Chip unter Manjaro Linux.
Unter VLC kann ich auch das Video In Signal mit Ton via soundkarte hw:0,0 wiedergeben. Mit deinem script erhalte ich jedoch nur das videosignal.
Ihr sprecht dort vom Alsa-Loopback-Device. Was ist das genau, da ich denke, das dort mein Problem liegt.
Für jeden weiteren Denkanstoß wäre ich dankbar.
Gruß, Peter
Hallo Peter,
ob Du das loopback device geladen hast, kannst Du mit lsmod überprüfen. Das Modul heißt snd_aloop und Du kannst es mit modprobe snd_aloop laden und mit aplay -l prüfen, ob es funktioniert.
Viel Glück, Hans
Hallo Hans,
das war schon eine Aufgabe für mich alten Man. Aber letztendlich war die Lösung eine kleine Änderung bei der alsa Eingabe in deinem script.
…..alsa:amode=1:forcechan=2:audiorate=48000:adevice=plughw.0,0:forceaudio:immediatemode=0 brachte mir den Erfolg.
Werde morgen mal die „VHS Kassette“ kopieren.
Ich bedanke mich für den Beistand.
Gruß von einem glücklichen Peter
Hallo, Hans,
viel scripten war doch nicht nötig, fürs PVG-100 passt alles in eine Zeile, die (expliziten) Pipes kann man auch weglassen (In der Kürze liegt die Würze:-)):
nice -n -19 somagic-both 2> >(nice -n -18 aplay -f s16_le -r 47950 -D hw:Loopback,0 -) | nice -n -17 ffmpeg -f rawvideo -use_wallclock_as_timestamps 1 -thread_queue_size 64 -pixel_format uyvy422 -video_size 720×576 -framerate 25 -i – -f alsa -thread_queue_size 64 -itsoffset -0.62 -i plughw:Loopback,1 -vf hqdn3d -vcodec libx264 -preset ultrafast -qp 27 -vsync 1 -r 25 out.mkv
Vorab natürlich einmalig pro Rechnerstart: modprobe snd-aloop, keine Einträge in .asoundrc notwendig.
Per: mplayer out.mkv kann man sich das Ergebnis noch während der Aufnahme ansehen und dann ggfs. noch den itsoffset (Verzögerung Bild gegen Ton) anpassen.
> hätte nicht gedacht, dass das geht
Der notwendige Trick war das Alsa-Loopback-Device:-) Und durch die nice-Anweisungen kann man auch während der Aufname den Rechner weiterbenutzen, ohne daß Bildfehler auftreten. Die leicht modifizierte Samplerate von 47950 hilft gegen wachsenden Offset bei Bild/Ton.
Danach rechne ich das Ergebnis nochmal mit avidemux klein und komme so bei brauchbarer Qualität auf ca. 0,5 bis 1 GB/h. Mein 4 Stunden-Testband kam als mkv auf 12,5 GB und nach runterrechnen auf 2,5 GB. Im Prinzip könnte man das auch direkt im ffmpeg kleinrechnen lassen, jedoch ist meine kleine Kiste dafür zu langsam, die Aufnahme muß ja in Echtzeit erfolgen.
Viel Spaß beim ausprobieren, und ich widme mich jetzt meiner Sammlung:-)
Hallo Helmut,
klasse, das probiere ich auch aus. Vielen Dank.
Hallo, Hans, Danke für deine Anregungen:-)
Da ich leider nur einen Miniaturrechner ohne Steckplatz habe, war ich gezwungen, den USB-PVG-100 zum Kassetten digitalisieren einzusetzen. Nach ein bischen herumspielen habe ich das Bild-Ton-Sync-Problem doch eliminieren können. Es gibt zwar einen konstanten Versatz von ca. 0,5 bis 1 s, der sich jedoch mit ffmpeg nachträglich einfach herausrechnen läßt. Funktioniert mit Hilfe von Pipe’s, Alsa-Loopback und ffmpeg.
3 Prozesse werden gebraucht:
ffmpeg -f rawvideo -use_wallclock_as_timestamps 1 -thread_queue_size 64 -pixel_format uyvy422 -video_size 720×576 -framerate 25 -i video.pipe -f alsa -thread_queue_size 64 -i plughw:Loopback,1 -vcodec libx264 -preset ultrafast -b:v 6000k -vsync 1 -r 25 outfile.mkv
aplay -f s16_le -r 48000 -D Loopback,0 audio.pipe
somagic-both 1>video.pipe 2>audio.pipe
Vorher Kernelmodul snd_aloop laden und die Pipe’s anlegen.
Wenn ich das alles fertig durchgespielt und gescriptet habe, gibts einen frischen Kommentar.
Hallo Helmut,
danke für die Ergänzung, hätte nicht gedacht, dass das geht und bin gespannt auf den nächsten Kommentar
Hallo, ich finde den Artikel sehr interessant.
Ich habe jetzt das shell script kopiert, erhalte aber Fehlermeldungen:
Fehler in Zeile 63: multiplex: Befehl nicht gefunden
Fehler in Zeile 67: input: Befehl nicht gefunden
Sind dies scripts von Dir oder Kommentare? Ich vermute letzteres…
Ich möchte eigentlich vom s-video Eingang aufnehmen im RAW Format. Dann wäre die Zeile tvdriver_opt manuell anzupassen mit „input=2“
Danke schon mal.
Micha
Hallo Michael,
danke für den Hinweis. In der Tat fehlen da drei # als Kommentarzeichen. Ich habe die drei Zeilen jetzt auskommentiert, so dass es jetzt passen sollte. Genau input=2 sollte es tun. Je nachdem was Du für eine Karte hast probiere auch mal die input=3 aus.
Viel Erfolg, Hans
Pingback: VDR Streams schneiden und konvertieren mit dvbcut und avidemux
Hallo, Danke für den tollen Artikel.
Ich habe auch schon einige Parametrisierungen mit mencoder getestet und die Ergebnisse auf einem TV mit integrierten Mediaplayer verglichen. Die Ergebnisse mit einer mp4-Codierung waren bei mir durchaus besser (vBitrate mit 6000), da der Film flüssiger läuft.
Unabhängig von der Parametrisierung fällt mir auf, dass z. B. eine Video8 Cassette mit 60 Min. Spielzeit durchaus Film-Dateien mit der Länge von 1 Std. 10 erzeugen kann (lt. VLC- bzw. mplayer). Die Ursache dazu habe ich noch nicht gefunden.
Hallo Andre,
schön, wenn Dir der ARtikel gefällt. Kann das irgendwie mit der Anzahl Bilder pro Sekunde zusammen hängen? Ich kenne den Video8 Standard nicht.
Gruß, Hans