vine/テレビ録画

テレビ録画サーバの構築

  • Linuxサーバにテレビキャプチャーカードを追加することで,テレビ録画サーバにしました.とりあえずはコマンドラインのスクリプトで録画・エンコードを行えるようにして,cronとatを使って録画をします.
  • アナログ地上波だけでなく,スカパーもAVケーブル経由で録画できるようにします.

キャプチャカードの設定

使用ハード

Linux Magazineや日経Linuxのテレビ録画特集の記事であげられており,動作が確実だったので選びました.今(2004/02/19)は,生産終了になってしまったようです.

スカパーの映像(黄色のコンポジット)はキャプチャカードに挿し,音声(白,赤のコンポジット)はこの変換コネクトを通してサウンドカードのマイクに挿しました.

テレビ映像の表示

  • bttvドライバの更新

映像に特に不都合はなかったのですが,後述しますが音声の録音がうまくいかなかったため,一応最新ドライバに更新しました.
bttyホームページからbttv-0.7.107.tar.gzをダウンロード

  • インストール手順
$ tar zxvf bttv-0.7.107.tar.gz
$ cd bttv-07.107
$ make KDIR=/usr/src/linux
$ su
# make install
  • /etc/modules.confの編集

ドライバを読み込むように下記を追加

options bttv card=81
options tuner type=17
  • 動作テスト

xawtvを使ってテレビ画面が表示されるかを確認.
インストールはVinePlusからaptを使ってインストール

# apt-get install xawtv

サウンドカードの設定

xawtvに付属のstreamerコマンドを使って録画をテストしてみる.

  • streamerで30秒録画をテスト
$ streamer -f mjpeg -F stereo -o test.avi -t 00:00:30
  • 録画テスト結果

映像はきちんと録画されているが,音声が録音されていない.少しは設定をいじらなければならないようだ.

使用サウンドカード

マザーボードにオンボードのサウンドカードをしようしています.チップセットはVIA KT600 + VT8237

キャプチャーカードとの接続

キャプチャーカードのAudioOUTから付属のケーブルをしようして,マザーボードのCD-INに接続をしました.

OSSドライバ

setupコマンドを使用してサウンドドライバを設定する.xmmsなどで音楽を再生する音が流れるのでドライバ設定はうまくいっているようだが,CDからの音楽を録音してもうまくいかない.

ALSAドライバ

OSSドライバではどうにもこうにも埒が開かなくなっていたので,ALSAで試してみることにしました.

  • VinePlusからaptでインストール
# apt-get install alsa-driver
# apt-get install alsa-utils
# apt-get install alsa-lib
  • alsa-driverのリビルド

ALSAはカーネルと関連が深いので,自前でkernelを再構築しているとVinePlusからインストールしてもうまく動作しませんでした.なのでsrc.rpmをVinePlusなどから,alsa-driver-1.0.2c-0vl1.src.rpm をダウンロードしてリビルド

$ rpm --rebuild alsa-driver-1.0.2c-0vl1.src.rpm  
$ su
# rpm -Uhv --force alsa-driver-1.0.2c-0vl1.rpm
  • /etc/modules.confの編集

ALSAホームページを参考にしてドライバを読み込む.VT8237の設定はなかったが,VT8235の設定をしようする.

# ALSA portion
alias char-major-116 snd
alias snd-card-0 snd-via82xx
#module options should go here

# OSS/Free portion
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0

# card #1
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss

音声の切り替え

アナログ地上波を録画するときはCD-INの音声を録音し,スカパーを録画するときはLine-INの音声を録音するようにする.alsaconfコマンドを使用して自動的に変更するようなスクリプトを作成するがうまく切り替わらなかった.
試行錯誤の結果,alsamixerを使って手動で行った設定をalsactlコマンドを使ってファイルへ保存・読み込みをすることで何とかできた.

  • アナログ地上波用の設定
# alsamixer
手動で設定.CD-INにカーソルを併せてspaceキーを押下してcaptureに指定し,
mキーを使ってミュートをはずす.
# alsactrl -f TV store
設定をファイル(TV)に保存.
  • スカパー用の設定
# alsamixer
LINEがcaptureになるように設定する.
# alsactrl -f SKY store
設定をファイル(SKY) に保存
  • 設定ファイルからの読み込み
# alsactrl -f <設定ファイル>

テレビ録画

キャプチャー

  • FFMPEGやmencoderなどを使いキャプチャーと同時にエンコードする方法も試したが,640x480のサイズでは,画像がカクカクとして今ひとつであったため,streamerを使いmjpegでキャプチャを行い,その後xvidに変換をすることにした.
  • streamerでの録画も15分以上しようとすると,途中でとまってしまうことが多かった.原因はつかめていないが,15分で2GBぐらいになっているので,ファイルフォーマットはext3なのだが,「2GBの壁か?」と納得をして,15分づつ分割してキャプチャをするようにした.

チャンネル設定

  • スカパー用のチャンネルを設定する
    • .xawtvに追加
[Sky]
source = Composite1
key = F1
capture = on
norm = NTSC-JP
color = 50%
bright = 40%
hue = 50%
contrast = 50%

エンコード

  • transcoderのフィルタを使いできるだけきれいにするようにする.その代わりかなりの時間がかかる
    • hqdn3d : Y/C分解をしてノイズを除去してくれるらしい
    • smartyuv : インターレースの解除
    • xsharpen : 画質をシャープにするらしい.

実行

  • 添付のシェルスクリプトで録画をする.
    • 実行方法
% rectv.sh F1 60 "タイトル"
F1 : チャンネル(ここではスカパー)
60 : 時間
"タイトル" : 完成後のファイル名を追加する.