15. Mai 2016
Nerd deluxe: Videotext von VHS auslesen – Teil 3
Im dritten Teil meiner Artikelserie zu „Videotext von VHS auslesen“ beschreibt die Installation von Linux, CUDA, Python und des Zielprogramms vhs-teletext.

Der Artikel gliedert sich in zwölf Schritte, teilweise mit Unterschritten. Ich habe mich bemüht, alles möglichst verständlich zu beschreiben.
Vorbemerkungen
Sie sollten zumindest über rudimentäre Kenntnisse im Umgang mit dem Linux-Terminal („Bash“) verfügen. Falls das nicht der Fall ist, empfehle ich, vorab ein paar entsprechende Anleitungen auf Youtube einzusehen. Hier einige der wichtigsten Kommandos:
Kommando als Supervisor ausführen: $ sudo <kommando>
Verzeichniswechsel: $ cd <verzeichnis>
Ins Home-Verzeichnis wechseln: $ cd ~
Bildschirm löschen: $ clear
Verzeichnisinhalt ausgeben: $ ls
Datei editieren: $ nano <dateiname>
Freien Festplatten-Speicherplatz ausgeben: $ df -h
Das führende $ Zeichen bedeutet im Folgenden, dass dieses Kommando im Linux-Terminal eingeben wird.
Achten Sie peinlichst genau auf Tippfehler, diese können alle Bemühungen leicht zunichte machen und einen in den Wahnsinn treiben. Besser ist es, die Kommandos vom z.B. Browser per Kopieren auszuschneiden und mittels Einfügen im Terminal einzusetzen.
Schritt 1: Linux installieren
Wie in Teil zwei erwähnt empfehle ich dringend, Linux Ubuntu 64bit zu verwenden. Die Version, auf die ich in dieser Anleitung verwende, ist die 16.04 LTS. Ein paar Hinweise dazu:
- Installieren Sie die deutsche Version, darauf beziehe ich mich nachfolgend
- Der Rechner muss eine Verbindung zum Internet haben
- Deaktivieren Sie nach der Installation die Bildschirmabschaltung (Systemeinstellungen > Helligkeit und Sperren), damit Sie später längere Zeit ungestört der Aufzeichnung zusehen können
- Das Terminal öffnet sich in Ubuntu mit rechte Maustaste (auf den Desktop), „Terminal öffnen“
- Werden Sie bei den folgenden Kommandos im Terminal gefragt, ob weitere Pakete installiert werden sollen („Möchten Sie fortfahren“), immer mit Ja (J) antworten
Dieser Schritt sollte das kleinste Problem sein.
Schritt 2: Module für die TV-Karte permanent starten
Der Linux-Kernel beinhaltet die Treiber für unsere im Teil zwei bereits beschriebene TV-Karte. Diese müssen nur noch aktiviert werden, und zwar dergestalt, dass sie mit jedem Neustart automatisch eingebunden werden. Dafür editieren wir zuerst die Datei rc.local:
$ sudo nano /etc/rc.local
Es öffnet sich der Editor, schreiben Sie die folgenden Kommandos vor das abschließende „exit 0″:
modprobe bt878
modprobe dvb_core
modprobe dst
modprobe dvb-bt8xx
Speichern Sie die Änderungen ab (Control + X).
Schritt 3: Nvidia-Treiber aktivieren
CUDA arbeitet nur mit den original Nvidia-Treibern zusammen. Diese aktivieren wir in diesem Schritt.
- Im Ubuntu Menü links auf das Symbol „Systemeinstellungen“ klicken
- Rubrik „System“ > „Anwendungen & Aktualisierungen“ > Reiter „Zusätzliche Treiber“
- NVIDIA binary driver – bei mir Version 361.42 – aktivieren
Starten Sie dann den Rechner mit
$ sudo reboot
neu. Anschließend können Sie mit dem Kommando
$ nvidia-smi
überprüfen, ob der ausgewählte Treiber wirklich läuft.
Schritt 4: TVTime installieren
Um den richtigen Kanal auswählen und das von VHS übertragene Bild sehen zu können, benötigen wir ein entsprechendes Programm. Ich habe mich für TVTime entschieden.
Es wurde zwar anscheinend länger nicht mehr gepflegt und zeigt sich manchmal boshaft, der Kanalsuchlauf funktioniert ggf. beim ersten Mal nicht – es unterstützt aber unsere Oldie-TV-Karte und erfüllt seinen Zweck. So installieren Sie das Programm:
- Im Ubuntu Menü links auf das Symbol „Ubuntu Software“ klicken
- Nach „TVTime“ suchen (das Programm heißt vollständig TVTime Television Viewer) und es über den nebenstehenden Button installieren
- TVTime starten („Rechner durchsuchen“-Symbol ganz oben links, nach „TV“ suchen)
Beim Linux-Start gibt es (anscheinend durch dieses Programm verursacht) ggf. wiederholend eine Fehlermeldung („Problem mit einer Systemanwendung festgestellt“), diese ignorieren Sie bitte.
Anschließend nehmen Sie bitte noch die folgenden Einstellungen im Programm selber vor (Klick mit der rechten Maustaste ins Programmfenster ruft das Menü auf). Der VHS-Rekorder sollte zu diesem Zeitpunkt an die TV-Karte angeschlossen sein und ein Band abspielen, damit Sie den richtigen Kanal finden:
- „Eingangssignal“ > „Fernsehnorm“ von NTSC auf PAL stellen (anschließend „mit dieser Einstellung neu starten“ wählen)
- „Senderplätze einstellen“ > „Kanalsuche starten“ (bei mir fand sich das VHS-Bild entweder auf 88 oder 109. Sollte kein Signal gefunden werden, die Suche nach ein paar Sekunden wiederholen)
- „Senderplätze einstellen“ > „Signalprüfung deaktivieren“ (wichtig, da andernfalls das Signal abbrechen und es zu Aussetzern („Frame-Drops“) kommen kann)
Damit wäre Linux für unsere Zwecke soweit eingerichtet.
Schritt 5: CUDA über den Synaptic-Paketmanager installieren
Starten Sie die Installation des Paketmanagers mit
$ sudo apt-get install synaptic
Falls Sie während des Installations-Vorgangs nach der TV-Norm gefragt werden, PAL und Europa auswählen. Anschließend starten Sie das Programm (über den Menüpunkt „Rechner durchsuchen“, nach „Synaptic“ suchen). In Synaptic suchen Sie nach „nvidia-cuda-dev“, wählen es aus und installieren es mittels der Schaltfläche „Anwenden“.
Schritt 6: Holen von vhs-teletext
Zuerst müssen wir git installieren, anschließend wird darüber vhs-teletext V2 auf die Festplatte geladen:
$ sudo apt-get install git
$ git clone https://github.com/ali1234/vhs-teletext.git
Im Installationsskript fehlen aus mir unbekannten Gründen drei Einträge, dies tragen wir nun nach, damit die späteren Aufrufe korrekt funktionieren:
$ sudo nano ~/vhs-teletext/setup.py
Es öffnet sich wieder der Editor, tauschen Sie die Zeile
scripts=['deconvolve', 't42pipe', 'vbiview', 'vbicat', 'training'],
gegen
scripts=['deconvolve', 't42pipe', 'vbiview', 'vbicat', 'training', 't42html', 't42interactive', 't42service' ],
aus und speichern Sie die Datei wieder ab.
Schritt 7: Anpassung von vhs-teletext an die deutschen Sonderzeichen
Wie erwähnt muss der Quellcode angepasst werden, damit die deutschen Umlaute korrekt erscheinen. Hinweis: hier ändern wir den vhs-teletext-Quellcode. Die Änderungen beschreiben den Stand Mai 2016, zu einem späteren Zeitpunkt kann der Quellcode anders aussehen.
Bitte achten Sie unbedingt auf das korrekte Einrücken der jeweiligen Zeilen, diese Einrückung ist eine besondere Eigenschaft von Python:
$ sudo nano ~/vhs-teletext/teletext/t42/printer.py
Es öffnet sich der Editor, schreiben Sie in die erste Zeile
# -*- coding: utf-8 -*-
Ändern Sie den Block
else:
if c == ord('#'):
return unichr(0xa3) # pound sign
elif c == ord('_'):
return unichr(ord('#'))
elif c == ord('`'):
return unichr(0x2014) # em dash
elif c == ord('~'):
return unichr(0xf7) # division symbol
elif c == 0x7f:
return unichr(0xe65f) # rectangle
else:
return unichr(c)
am Anfang der Datei in der Klasse „PrinterANSI“ zu:
else:
if c == 0x7f:
return unichr(0xe65f) # rectangle
else:
return unichr(c)
Wir deaktivieren hier die speziellen englischen Zeichenzuordnungen. Nun müssen noch die deutschen Umlaute eingesetzt werden, ändern Sie den Block
else:
body = self.linkify(body)
return head+body.encode('utf8')+foot+'\n'
am Dateiende zu
else:
body = self.linkify(body)
body_de = body.encode('utf8')
body_de = body_de.replace("¤","$")
body_de = body_de.replace("@","§")
body_de = body_de.replace("[","Ä")
body_de = body_de.replace("\\","Ö")
body_de = body_de.replace("]","Ü")
body_de = body_de.replace("`","°")
body_de = body_de.replace("{","ä")
body_de = body_de.replace("|","ö")
body_de = body_de.replace("}","ü")
body_de = body_de.replace("~","ß")
return head+body_de+foot+'\n'
und speichern Sie diese Änderung ab. Hinweis: durch diese Änderung werden die Umlaute in der späteren HTML-Ausgabe korrigiert, nicht jedoch in der interaktiven Seitenanzeige. Ich hatte den Autor um Hilfe angefragt, jedoch keine Antwort erhalten.
Schritt 8: Rechtschreibkorrektur auf Deutsch einstellen
Wir editieren wieder den Python-Quellcode:
$ sudo nano ~/vhs-teletext/teletext/t42/packet.py
In ca. der Dateimitte ändern Sie die Zeilen
import enchant
d = enchant.Dict('en_UK')
bitte zu
import enchant
d = enchant.Dict('de_DE')
und speichern die Änderungen ab. Das war es schon für diesen Schritt.
Schritt 9: Virtual Environment für Phyton einrichten
Damit vhs-teletext korrekt funktioniert, richten wir den Programmen nun mit den folgenden Kommandos eine virtuelle Umgebung ein:
$ sudo apt install python-pip
$ sudo apt install virtualenv
$ cd ~/vhs-teletext
$ virtualenv venv
$ source venv/bin/activate
Diese virtuelle Umgebung werden wir später noch permanent machen.
Schritt 10: Installation von Phyton-Abhängigkeiten
Es folgt die Installation einiger weiterer Programme, damit vhs-teletext korrekt funktioniert:
$ sudo apt-get install python-numpy python-scipy python-pycuda nvidia-modprobe python-enchant
$ pip install scikit-cuda
$ sudo apt-get install libblas-dev liblapack-dev gfortran
$ pip install scipy pyenchant
Das Ganze dauert eine Weile, bitte haben Sie Geduld.
Schritt 11: Python-Warnungen nicht anzeigen, Environment permanent einrichten
Hier nehmen wir eine Einstellung vor, welche irritierende Python-Warnungen unterdrückt und die virtuelle Umgebung aus Schritt 9 automatisch startet:
$ sudo nano ~/.bashrc
Im Editor tragen Sie die folgenden zwei Zeilen am Dateiende ein:
export PYTHONWARNINGS="ignore"
source ~/vhs-teletext/venv/bin/activate
und speichern die Änderung wieder ab.
Schritt 12: Installieren von vhs-teletext
Nun sollte alles bereit sein, wir installieren („make install“) die Zielsoftware vhs-teletext:
$ python setup.py install
Wenn hier Fehlermeldungen auftauchen, haben Sie vermutlich bei der Änderung des Python-Sourcecodes (Schritt 7) die Einrückung nicht korrekt beachtet. Überprüfen Sie dann die gemeldeten Fehler, deren Zeilennummer angegeben wird. Der Editor nano zeigt mit Alt+C die aktuelle Zeilennummer im Fenster unten an.
Sollten Sie nicht weiterkommen, empfiehlt sich zur Fehlersuche die Installation von PyChecker. Wenn alles ohne Fehlermeldung durchläuft, müssen wir nur noch ein paar Dateien installieren und kopieren:
$ cp config_bt8x8_pal.py venv/bin/
$ sudo apt-get install tv-fonts rxvt-unicode
$ cd /etc/fonts/conf.d
$ sudo rm 70-no-bitmaps.conf
$ sudo ln -s ../conf.avail/70-yes-bitmaps.conf .
Damit ist die Installation abgeschlossen, starten Sie den Rechner mit
$ sudo reboot
neu.
Nachtrag vom 19. April 2017
Durch einen Hardwarefehler musste ich meinen VHS-Videotextrechner kürzlich neu aufsetzen. Dabei sind mir zwei Dinge aufgefallen, was vielleicht für jemanden hilfreich sein könnten:
Numpy
Es gibt im Jahre 2017 ein Problem in der Python-Bibliothek „Numpy“, welches dazu führt, dass die Erzeugung der Videotext-Dateien mittels des Befehles „deconvolve“ abbricht, siehe https://github.com/ali1234/vhs-teletext/issues/5. Dies liegt an einer neueren Numpy-Version 1.12.x und (laut Aussage des Software-Autors) an einem Fehler in vhs-teletext.
Als Lösung muss Numpy zu der früheren Version 1.11.2 zurückgeführt werden („downgrade“). Laden Sie die Datei numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl aus dem Netz in ~/Downloads herunter und führen Sie die folgenden Kommandos aus:
$ sudo apt-get remove python-numpy
$ cd ~/Downloads
$ pip install numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl
Mit
$ pip freeze | grep 'numpy'
können Sie dann überprüfen, ob die Version 1.11.2 wirklich läuft. Vermeiden Sie bis zur Fehlerbehebung unbedingt, dass Linux das Paket später wieder updated oder wiederholen Sie dann den Downgrade.
Alte Nvidia-Grafikkarte und CUDA
Wenn Sie eine alte Nvidia-Grafikkarte verwenden möchten, die CUDA gar nicht, eingeschränkt oder nur fehlerhaft unterstützt, kann Linux bei der in diesem Artikel beschriebenen Installation so durcheinander geraten, dass Sie beim Start in eine Passworteingabe-Endlosschleife geraten.
Bei mir war das bei einer Ersatzkarte Modell Geforce 8600 GT der Fall. Um so eine Karte (bzw. jede anderen Grafikkarte) zu verwenden, lassen Sie bei der Neuinstallation alles mit CUDA weg:
- Schritt 3 und 5: keine Aktion
- Schritt 10: Nur die folgenden Kommandos anwenden:
$ sudo apt-get install python-numpy python-scipy python-enchant
$ sudo apt-get install libblas-dev liblapack-dev gfortran
$ pip install scipy pyenchant
Weiter im vierten Teil
Zuletzt führen wir einen Auslese- und Berechnungslauf durch, mehr dazu im vierten Teil.