_ kernel-2.4.24 で ELSA EX-VISION 500TV にて mencoder で録画する設定
日経Linux誌に執筆した記事は、2.4.22 を対象に記述したので補足です。
kernel の再構築
# cd /usr/src/
# tar jxvf linux-2.4.24.tar.bz2
# rm linux-2.4
(# rm linux)
# ln -s linux-2.4.24 linux-2.4
# ln -s linux-2.4.24 linux
# ln -s /usr/src/linux/include/asm-i386 /usr/include/asm
# ln -s /usr/src/linux/include/linux /usr/include/linux
ここまでが、下準備 として kernel-2.4.24 の展開と symlink の張り直しです。
展開した kernel-2.4.24 に V4L2パッチ(含むsaa7134ドライバ)を適用します。
http://bytesex.org/patches/2.4.24-1/
patch-2.4.24-rc1-kraxel.gz
で動作することを確認できました。以下の手順です。
# gunzip patch-2.4.24-rc1-kraxel.gz
# patch -p0 < patch-2.4.24-rc1-kraxel
# cp ./linux-2.4.20-8/configs/kernel-2.4.20-i686.config ./linux/.config
# cd ./linux
# make menuconfig
Loadable module support ---> [ ] Setversion information on all module symbols
Processor type and features ---> (Pentium4) Processor family
Multimedia devices ---> Video For Linux ---> [M] SAA7134 Video For Linux (NEW)
kernel を make する前にソースを2箇所、訂正する部分があります。
1) /usr/src/linux/drivers/media/video/tuner.c の 232行目を修正します。
VHFしか表示できないので、UHF帯も表示できるようにします。
{ "HITACHI V7-J180AT", HITACHI, NTSC,
修正前 16*170.00, 16*450.00, 0x01,0x02,0x00,0x8e,940 },
^^^^
修正後 16*170.00, 16*450.00, 0x01,0x02,0x08,0x8e,940 },
2) /usr/src/linux/drivers/media/video/saa7134-cards.c 477行目〜496行目 を編集します。
音がでないためです。
変更前
[SAA7134_BOARD_ELSA_500TV] = {
.name = "ELSA EX-VISION 500TV",
.audio_clock = 0x00187de7,
.tuner_type = TUNER_HITACHI_NTSC,
.inputs = {{
.name = name_svideo,
.vmux = 7,
.amux = LINE1,
},{
.name = name_tv,
.vmux = 8,
.amux = TV,
.tv = 1,
},{
.name = name_tv_mono,
.vmux = 8,
.amux = LINE2,
.tv = 1,
}},
},
変更後
[SAA7134_BOARD_ELSA_500TV] = {
.name = "ELSA EX-VISION 500TV",
.audio_clock = 0x00187de7,
.tuner_type = TUNER_HITACHI_NTSC,
.inputs = {{
.name = name_svideo,
.vmux = 7,
.amux = LINE1,
},{
.name = name_tv,
.vmux = 8,
.amux = LINE2,
.tv = 1,
}},
},
ここで通常の手順で、kernel の再構築を行います。
# cd /usr/src/linux
# make dep ; make bzImage
# make modules ; make modules_install
# installkernel 2.4.24 ./arch/i386/boot/bzImage System.map
# cd /boot/
# mkinitrd -f initrd-2.4.24.img 2.4.24
lilo や grub の、ブートローダの設定ファイルを編集しておきましょう。
/etc/modules.conf の内容は、サウンド関連のみに限っては、kudzu が検出した設定、
alias sound-slot-0 ymfpci
post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :
(これは、YMF724の場合です。)
で構いませんが、/etc/rc.local に以下を追記しないと、必要な module が読み込まれないようです。
# For Sound
insmod /lib/modules/2.4.24/kernel/drivers/sound/soundcore.o
これで再起動できる事を確認します。
_ テレビを観よう
何度も長いコマンドを打つのは面倒なので、シェルスクリプトを用意してみましょう。
/home/video/bin/tv.sh
#! /bin/sh
v4lctl -c /dev/video0 setnorm NTSC
mplayer -vo x11 -tv driver=v4l:width=640:height=480:norm=ntsc:input=1:amode=1:chanlist=japan-bcast:channel=$1 tv://
としました。XV(X Video Extension)が有効なビデオカードであれば -vo x11 は不要で、しかも全画面表示が可能です。
$ chmod 755 bin/tv.sh
で実行権を与えます。40チャンネルを観たいのあれば、
$ ./bin/tv.sh 40
とします。終了後に音声だけが残ってしまうので、
/home/video/bin/stop_snd.sh
#! /bin/sh
sudo /sbin/rmmod saa7134
sudo /sbin/insmod /lib/modules/2.4.24/kernel/drivers/media/video/saa7134.o card=15
をラウンチャに登録してクリックで消すようにしています。
録画鯖用途であれば、これでも不自由しないのです。
_ 録画します。
/home/video/bin/saa_rec.sh
#!/bin/sh
v4lctl -c /dev/video setnorm NTSC
/usr/bin/mencoder -tv driver=v4l:input=1:width=640:height=480:norm=NTSC:forceaudio:amode=1:chanlist=japan-bcast:audiorate=48000:channel=$1
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=8000 -oac mp3lame -lameopts cbr:br=128:vol=5:aq=0 -endpos 00:$2:00 tv:// -o /home/video/$3
sudo /sbin/rmmod saa7134
sudo /sbin/insmod /lib/modules/2.4.24/kernel/drivers/media/video/saa7134.o card=15
というスクリプトで、とりあえず録画ができます。
実行時に与えるパラメータは チャンネル, 録画時間(分), ファイル名 の3つです。
40チャンネルを、30分間であれば、
$ ./bin/saa_rec.sh 40 30 test.avi
で録画できます。
映像と音声のずれも起きない指定になっています。
再生には、
$ gmplayer test.avi
などとしましょう。Fusion878A よりもくっきりした綺麗な映像です。
玄人志向の SAA7130-TVPCI も使用できますが、モノラルチューナなので注意しましょう。
Linux で使用できる、SAA7130/34 で、ステレオチューナ搭載品は、ELSA 500TV が現状ではベストです。
録画ツール、
[ webmencoder ]で、Fusion878A ともども、サポートしていますので、よろしく。
;; と、さりげなく宣伝させてくださいな (w
[1/28補足] ELSA EX-VISON 500TV で audiorate=48000 を指定すると、映像と音声の同期が狂う模様です。削除してください。
cbr 指定はそのままで構いません。
;; Fusion878A では、audiorate=48000, cbr ともに必要です。
いじょ。