久しぶりにハードを買った。玄人志向の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するようなアダプタをつくるかする必要がある。
ドライバのインストールは結構手間である。
と三段階となる。
とりあえずカーネルにパッチをあてて再構築しなくてはドライバが動かないらしい。パッチそのものは 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とする。
2003/11/15