PC-Blues # 041 テレビを見る

目次

  1. ことのおこり
  2. 使用法
  3. カードのインストール
  4. ドライバのインストール
  5. カーネルの再構築
  6. ドライバのコンパイル
  7. 起動

ことのおこり

久しぶりにハードを買った。玄人志向SAA7130TVPCIである。時価4000円である。ウインドウズ用のソフトウェアが付属しており、これのないバージョンSAA7130TVPCI/Bというのもあり、Linux専用であればこちらで充分である。差額1020円を出してウインドウズ用のソフトつきを買ったのは失敗としかいいようがない。

さて、各種あるビデオキャプチャーだが、Linuxでドライバが提供されているものは数少ない。chipとしてはSAA713X,BT8X8といったところである。ところがコアチップは同じでも回路はバラバラで実際使用できるかどうかはやってみないとわからない部分がある。はっきりサポートが明記されているのは以下のカードである。

saa7134 supported cards
  1 -> Proteus Pro [philips reference design]   [1131:2001]
  2 -> LifeView FlyVIDEO3000
  3 -> LifeView FlyVIDEO2000
  4 -> EMPRESS                                  [1131:6752]
  5 -> SKNet Monster TV                         [1131:4e85]
  6 -> Tevion MD 9717
  7 -> KNC One TV-Station RDS
  8 -> Terratec Cinergy 400 TV                  [153B:1142]
  9 -> Medion 5044                
 10 -> Kworld/KuroutoShikou SAA7130-TVPCI
 11 -> Terratec Cinergy 600 TV                  [153B:1143]

使用法

テレビを見る場合は xawtv & でxawtvを起動すればよい。操作は[↑][↓]キーでチャネルを変更し、[←][→]キーで微調整を行う。録画する場合はrを押せばダイアログが出る。ファイル名を指定してスタートボタンを押せばよい。jpgとwavを選ぶこともできるし、msのavi形式を選ぶこともできるが圧縮の効果的なcodecは用意されていない。 使用状況

ビデオデッキやDVDプレイヤの入力を見るときはコンポジット入力を使う。オプションウィンドウを出してビデオソースをComposite1にする。さてコピーガードのかかったテープやDVDはどうかというと大丈夫である。通常に再生される。録画もできるか試してみたところどうもできるようである。くれぐれも著作権者に迷惑をかけないように使用する必要がある。

留守録ということになるとffmpegを使うほうがよい。コマンドはこんなかんじである。

ffmpeg -vd /dev/video -ad /dev/dsp -s 640x480 -f avi -vcodec mpeg4 -ac 2 -acodec mp3 -b 1800 -t 01:12:34 output.avi

長いコマンドである。毎回やってらないといっても過言ではない。とりあえず、解説すると

ffmpeg

これは録画ソフトffmpegの起動。

-vd /dev/video

ビデオデバイスは/dev/video

-ad /dev/dsp

オーディオデバイスは/dev/dsp

-s 640x480

画像サイズは640x480
ちょっと大きい。320x240くらいでいいような気もする。

-f avi

ファイルタイプはavi。クイックタイムmovやmpeg2なんかもできるらしい。がよくしらない。

-vcodec mpeg4

CODECはこれでなぜかDIVX5である。

-ac 2

オーディオは2ちゃんねるステレオ。

-acodec mp3

オーディオはmp3圧縮をかける。

-b 1800

ビットレートは1800kb/s

これくらいだすと画質は問題ない。ただし、ファイルサイズはでかくなるし、マシンパワーも要求される。デフォルトの200くらいにすればサイズの点でもパワーの点でも有利だが、こんどは画質が落ちる。結局試行錯誤で自分の最低ラインをきめるのがよいようである。これで30分ほどの番組を録画してみると概ね300Mbyteくらいである。これをmencoderで

mencoder output.avi -ovc divx4 -oac mp3lame -lameopts vbr=3 -o compress.avi

などとやるとさらに150Mbyteくらいになった。これなら2時間で600Mbyteといったところである。画質についてはさてどんなものか。わたしの望みはかなり低い。

-t 01:12:34

録画時間は1時間12分34秒。これは指定しなければ[q]キーを押すまで無制限ということになる。

output.avi

出力ファイルの名前である。任意の名前でよいが、拡張子は内容に対応させたほうがよいだろうし、日本語のファイル名はトラブルのもとである。

とはいうものの毎回こんな長い呪文は覚え切れないし、なんといってもわたしはマウスは苦手だが、キーボードも苦手である。そんなわけで次のようなバケの皮をかぶせて使用している。

~$ cat recvideo
#!/usr/bin/bash
if [ $1 == "" ] ; then
 OUTPUT="noname.avi"; echo "Output file is $OUTPUT";
else
        if [ -f "$1" ]; then
        mv "$1" "$1.org";
        fi
 OUTPUT="$1"; echo "Output file is $OUTPUT";
fi
if [ $2 != "" ]; then
RECTIME="-t $2"; echo "Time is $RECTIME";
fi
ffmpeg -vd /dev/video -ad /dev/dsp -s 640x480 -f avi -vcodec mpeg4 -ac 2 -acodec mp3 -b 1800 $RECTIME $OUTPUT

こいつを/usr/local/bin/にでも置いておく。

~$ recvideo teruteru.avi 00:15:00

とやれば、出力ファイルはteruteru.aviで15分間録画されるしかけである。 ところでチャンネルと入力もとだがこれはこういうコマンドを使う。

~$ v4lctl setinput Television

これでテレビである。コンポジット入力の場合は

~$ v4lctl setinput Composite1

でよい。チャンネルは同様に

~$ v4ctl setchannel 3

これで3チャンネルに設定である。 結局番組予約はcrontab -e を起動して

15 8 * * * 	v4ctl setinput Television;v4ctl setchannel 3;recvideo teruteru.avi 00:15:00

と書けばよい。これで毎日朝八時十五分から十五分間3チャンネルの番組が録画されることになる。何でもいいが、たかがテレビの留守録にこんなに手間がかかるあたり、さすがパソコン。趣味のオモチャとしての面目躍如である。

カードのインストール

PCIカードなのでどうということはない。PCIスロットに挿しこむだけである。ISAなんかにはサイズのおかしいものや挿しこみにコツを要するものがあったがさすがPCIは規格がきっちりしているだけあって簡単である。ところが、わたしのマシンでは本体のVGAもネットワークカードもキャプチャーもIRQ11に集中しているせいか、電源に根性がないせいかマシンがまったく起動しなくなってしまった。悲しいのはAopenのBiosでこういうときにスロットごとのIRQ指定などはできない。あちこち挿しかえてみるがものの見事に集中する。ところが起動しないといっても背後のメインスィッチを一度抜いてまたいれ、電解コンデンサに電荷がたまっているうちにまた起動してやると今度は起動する。ようするに原因不明でジャマくさいマシンだが動いているものはまあいいかと思っている。 なお、音声はこのカードの背面のオーディオアウトから出るので付属の3.5φプラグでサウンドカードのラインインに結線しなけばならない。コンポジット入力はビデオやDVD,LDなどと結線するがその場合オーディオ入力はこのカードのオーディオインにつないでもうまく出力されなかった。直接サウンドカードの入力につなぐほうがうまくゆく。しかし、これはテレビ入力とバッティングするのでその度挿しかえるか、switchまたはmixするようなアダプタをつくるかする必要がある。

ドライバのインストール

ドライバのインストールは結構手間である。

  1. カーネルの再構築
  2. ドライバのコンパイル
  3. 起動

と三段階となる。

カーネルの再構築

とりあえずカーネルにパッチをあてて再構築しなくてはドライバが動かないらしい。パッチそのものは http://bytesex.org/patches/にあるがわたしの使用しているPlamo3.2の付属カーネルは2.4.20、ここには2.4.22,2.4.23,2.6.0のものしかない。ひょっとしたらこれらのカーネル用のパッチでも動くのかもしれないが、よい機会であるからringサーバからlinux-2.4.22.tar.bz2をとってきた。再構築の手順はこんなところである。

#cp linux-2.4.22.tar.bz2  patch-2.4.22-kraxel.gz /usr/src 
#cd /usr/src
#mv linux linux.old
#tar xvjf linux-2.4.22.tar.bz2
#ln -s linux-2.4.22 linux
#gzip -dc patch-2.4.22-kraxel.gz|patch -p0 
#cd linux
#make menuconfig

ここでマシンにあわせてコンフィギュレーションをする。ただし、忘れずにI2CとVIDEO_DEVをモジュールにしておく。

#make dep ;make clean
#make bzImage
#cp arch/i386/boot/bzImage System.map /

これはPlamoLinuxのブートにgrubを使用しているためである。/etc/grub.confには/bzImageでブートするように書いておく。わたしは/vmlinuzはオリジナルのカーネルを残している。bootにliloを使用しているなら、make bzliloでよく、cp の行は不要である。

#make modules
#make modules_install
#reboot

いったんリブートして新しいカーネルで作業する。しかし、そのまえにネットワークやその他コンフィギュレーションに間違いがないか確認する。

ドライバのコンパイル

ドライバのコンパイルはらくちんである。saa7134-0.2.8.tar.gzを展開して./configre;make;make installの三拍子でおわる。

$tar xvfz saa7134-0.2.8.tar.gz
$cd saa7134-0.2.8
$./configure
$make
$su -c 'make install'

ドライバが動作しているか確認するにはテレビプログラムを利用することになっている。同じbytesex.orgからxawtv_3.90.tar.gzを入手しこれをメイクする。このとき付属のスクリプトで/dev/vbiも作成しておくとキャプチャーなんかにはよろしい。

$tar xvzf xawtv_3.90.tar.gz
$cd xawtv-3.90
$su -c "./MAKEDEV.v4l"
$./configure
$make
$su -c "make install"

ドライバのロードはroot権限でmodprobeを行うがこの際、オプションでカードの番号をいれる。

$su -c "modprobe saa-7134 CARD=10"

lsmod を使用してきちんとロードされていることを確認するのもよいかもしれない。当家では次のようである。

tuner                   9344   1 (autoclean)
saa7134                56392   0
i2c-core               12644   0 [tuner saa7134]
soundcore               3492   0 [snd saa7134]
video-buf              10000   0 [saa7134]
videodev                5760   2 [saa7134]
v4l2-common             3104   0 [saa7134]
v4l1-compat            11224   0 [saa7134]

なお、dmesgには次のように表示されている。

~$ dmesg|grep saa71
saa7130/34: v4l2 driver version 0.2.8 loaded
saa7130[0]: found at 01:07.0, rev: 1, irq: 11, latency: 32, mmio: 0xd4000000
saa7130[0]: subsystem: 1131:0000, board: Kworld/KuroutoShikou SAA7130-TVPCI [card=10,insmod option]
i2c-core.o: adapter saa7130[0] registered as adapter 0.
saa7130[0]: Huh, no eeprom present (err=-5)?
saa7130[0]: board init: gpio is 407f
i2c-core.o: client [Philips NTSC_M (MK2)] registered to adapter [saa7130[0]](pos. 0).
saa7130[0]: registered device video0 [v4l2]
saa7130[0]: registered device vbi0

起動

動作実験用のxawtvだが、実はXを起動していなくてもaalibを使ってAsciiArtでテレビをみることもできる。ただ、番組をよほど選ばないとわけのわからない文字の嵐となる。aalibでのテレビ放送

Xでテレビを見る場合はxawtvを起動してとりあえずはオプションを開く。[o]キーまたは右ボタンでクリックである。TV normをNTSCとし、Video sourceはTelevisionにFrequency tableをjapan b-castとする。これで日本のテレビ放送に合う。ケーブルテレビの場合はjapan-cableである。コンポジット入力の場合はビデオモードをcomposite1とする。

[前へ] [次へ]
[Home] [目次]

2003/11/15