# TV

## TV-Input

Dieser Abschnitt behandelt das Anschauen/Grabben von einem V4L-kompatiblen TV-Empfänger. Siehe Manpage für eine Beschreibung der TV-Optionen und Tastensteuerungen.

### Compilierung

1. Zuerst musst du neu compilieren. `./configure` wird die Kernelheader vom v4l-Kram und die Existenz der `/dev/video*`-Einträge automatisch erkennen und TV-Unterstützung wird eingebaut werden (siehe Ausgaben von `./configure`).

2. Stelle sicher, dass dein Empfänger mit anderer TV-Software wie zum Beispiel XawTV unter Linux läuft.

### Tipps zum Gebrauch

Die vollständige Liste der Optionen ist in der Manpage verfügbar. Hier sind nur ein paar Tipps:

- Benutze die Option `channels`. Ein Beispiel:

      -tv channels=26-MTV1,23-TV2

  Erklärung: Durch Verwendung dieser Option sind nur die Kanäle 26 und 23 in Gebrauch, und es wird beim Kanalwechsel einen netten OSD-Text geben, der den Namen des Kanals anzeigt. Leerzeichen im Kanalnamen müssen durch das Zeichen "_" ersetzt werden.

- Wähle vernünftige Bildabmessungen. Die Abmessungen des resultierenden Bildes sollten durch 16 teilbar sein.

- Wenn du das Video bei einer vertikalen Auflösung höher als halb der vollen Auflösung einfängst (z.B. 288 für PAL oder 240 für NTSC), dann werden die 'Frames', die du erhältst, wirklich jeweils ausgelassene Paare von Feldern sein. Je nach dem, was du mit dem Video anfängst, kannst du es in dieser Form belassen, (zerstörend) deinterlacen oder die Paare zu einzelnen Feldern machen.

  Ansonsten wirst du einen Film erhalten, der während schnellbewegten Szenen gestört ist, und die Bitratenkontrolle wird vermutlich nicht in der Lage sein, die angegebene Bitrate einzuhalten, da die Interlacing-Artefakte hohe Details produzieren und daher eine Menge Bandbreite kosten. Du kannst Deinterlacing mit `-vf pp=DEINT_TYPE` aktivieren. Normalerweise leistet `pp=lb` gute Arbeit, aber das ist Geschmackssache. Schaue nach anderen Deinterlacing-Algorithmen im Handbuch und versuche es mit denen.

- Schneide tote Bereiche ab. Wenn du Video aufnimmst, sind die Bereiche an den Rändern normalerweise schwarz oder enthalten Rauschen. Diese wiederum verbrauchen unnötige Bandbreite. Genauer gesagt sind es nicht die schwarzen Bereiche selbst, sondern die scharfen Übergänge zwischen dem schwarzen und dem helleren Videobild, die das tun. Aber das ist für den Moment nicht so wichtig. Bevor du mit der Aufnahme beginnst, passe alle Argumente der Option `crop` so an, dass der ganze Müll an den Rändern abgeschnitten wird. Nochmal, vergiss nicht, die resultierenden Abmessungen vernünftig zu halten.

- Achte auf CPU-Load. Es sollte die 90%-Grenze die meiste Zeit über nicht überschreiten. Wenn du einen großen Aufnahmepuffer hast, kann MEncoder eine Überlastung für ein paar Sekunden überstehen, aber nicht mehr. Es ist besser, 3D-OpenGL-Bildschirmschoner und ähnlichen Kram abzustellen.

- Spiele nicht mit der Systemuhr herum. MEncoder benutzt sie für A/V-Synchronisation. Wenn du die Systemuhr anpasst (vor allem rückwärtig), verwirrt dies MEncoder, und du wirst Frames verlieren. Das ist ein wichtiger Sachverhalt, wenn du mit einem Netzwerk verbunden bist und Zeitsynchronisationssoftware wie NTP verwendest. Du musst NTP während des Aufnahmeprozesses ausschalten, wenn du zuverlässig aufnehmen möchtest.

- Ändere das `outfmt` nicht, es sei denn, du weißt, was du tust, oder deine Karte/Treiber den Standard (YV12-Farbraum) wirklich nicht unterstützt. In älteren Versionen von MPlayer/MEncoder war es notwendig, das Ausgabeformat anzugeben. Diese Sache sollte in aktuellen Releases behoben sein, und `outfmt` wird nicht weiter benötigt. Die Standardeinstellung genügt den meisten Zwecken. Zum Beispiel, wenn du mit libavcodec nach DivX aufnimmst und `outfmt=RGB24` angibst, um die Qualität der aufgenommenen Bilder zu erhöhen, so wird das aufgenommene Bild später tatsächlich zurück zu YV12 konvertiert. Die einzige Sache, die du erreichst, ist eine massive Verschwendung von CPU-Power.

- Um den Farbraum I420 anzugeben (`outfmt=i420`), musst du die Option `-vc rawi420` hinzufügen. Das liegt an einem Konflikt mit einem Intel Indeo Videocodec.

- Es gibt viele Möglichkeiten, Audio aufzunehmen. Du kannst den Ton grabben entweder mit deiner Soundkarte über ein externes Kabel zwischen Videokarte und Line-In oder durch Benutzung des eingebauten ADC im bt878-Chip. In letzterem Falle musst den den Treiber btaudio laden. Lies die Datei `linux/Documentation/sound/btaudio` (im Kernel-Tree, nicht in dem von MPlayer) für ein paar Anweisungen, wie dieser Treiber verwendet wird.

- Wenn MEncoder das Audiogerät nicht öffnen kann, stelle sicher, dass es wirklich verfügbar ist. Es kann Ärger geben mit Soundservern wie aRts (KDE) oder ESD (GNOME). Wenn du eine Vollduplex-Soundkarte hast (fast jede vernünftige Karte unterstützt dies heutzutage) und du KDE laufen hast, probiere die Option "Vollduplex" im Eigenschaftenmenü des Soundservers.

### Beispiele

Dummy-Ausgabe zu AAlib :)

    mplayer -tv driver=dummy:width=640:height=480 -vo aa tv://

Input von Standard-V4L:

    mplayer -tv driver=v4l:width=640:height=480:outfmt=i420 -vc rawi420 -vo xv tv://

Ein gehobenes Beispiel. Dies sorgt dafür, dass MEncoder das volle PAL-Bild einfängt, die Ränder abschneidet und einen Deinterlacer mit einem linearen Blendalgorithmus auf das Bild anwendet. Der Ton wird mit dem LAME-Codec bei konstanter Bitrate von 64kbps komprimiert. Diese Einstellungen eigenen sich für das Einfangen von Filmen.

    mencoder -tv driver=v4l:width=768:height=576 \
    -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 \
    -oac mp3lame -lameopts cbr:br=64 \
    -vf crop=720:544:24:16,pp=lb -o output.avi tv://

Dies wird zusätzlich die Bildabmessungen auf 384x288 ändern und das Video mit einer Bitrate von 250kbps im hochqualitativen Modus encodieren. Die Option vqmax lockert den Quantisierungsparameter und erlaubt dem Videokompressor, eine sehr niedrige Bitrate zu erlangen, sogar auf Kosten der Qualität. Dies kann verwendet werden für das Einfangen von langen TV-Serien, wo die Videoqualität nicht so wichtig ist.

    mencoder -tv driver=v4l:width=768:height=576 \
    -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=350:vhq:vqmax=31:keyint=300 \
    -oac mp3lame -lameopts cbr:br=48 \
    -vf crop=720:540:24:18,pp=lb,scale=384:288 -sws 1 -o output.avi tv://

Es ist außerdem möglich, in der Option `-tv` kleinere Bildabmessungen anzugeben und die Softwareskalierung auszulassen, aber dieser Ansatz nutzt die maximal verfügbaren Informationen und ist ein wenig resistenter gegen Störungen. Die bt8x8-Chips können das Mitteln der Pixel auf Grund einer Hardwarebeschränkung nur in horizontaler Richtung durchführen.

## Videotext

Videotext ist momentan nur in MPlayer verfügbar, für die Treiber v4l und v4l2.

### Anmerkungen zur Implementierung

MPlayer unterstützt regulären Text, Grafiken und Navigationslinks. Leider werden farbige Seiten momentan nicht vollständig unterstützt - alle Seiten erscheinen in Graustufen. Untertitelseiten (auch bekannt als "Closed Captions") werden auch unterstützt.

MPlayer beginnt beim Beginn vom TV-Empfang damit, alle Videoseiten zwischenzuspeichern, damit du nicht warten musst, bis die gewünschte Seite geladen ist.

Anmerkung: Benutzung von Videotext mit `-vo xv` verursacht komische Farben.

### Videotext verwenden

Um Decodierung von Videotext zu aktivieren, musst du das VBI-Gerät angeben, von dem die Videotextdaten empfangen werden (üblicherweise `/dev/vbi0` unter Linux). Dies kann erreicht werden durch Angabe der Option `tdevice` in deiner Konfigurationsdatei, siehe unten:

    tv=tdevice=/dev/vbi0

Du musst möglicherweise den Videotextsprachcode für dein Land angeben. Um dir alle Sprachcodes anzeigen zu lassen, verwende

    tv=tdevice=/dev/vbi0:tlang=-1

Hier ist ein Beispiel für russisch:

    tv=tdevice=/dev/vbi0:tlang=33