Linux ムービー・動画環境

ビデオ録画

せっかくずっと PC 立ちあげているのでテレビ録画とかしたいと思って、ビデオキャプチャ・チューナカードを買ってみました。Linux では Bt878というキャプチャの石?が実績があるとのことなのでそれを内蔵した ATI TV Wonder VE を近所のサトームセンで 6500円で購入。チューナはモノラル、ビデオ入力は Composite のみです (S端子がないということ)。 他にも AOpen の VA1000 が 7500円、ATI TV Wonder が 9800円で売っていました。VA1000 はS端子が付いていてよさそうだったのですが、最新の bttv (Bt878 のドライバ) にサポート対象としてリストされていなかったので避けました。ATI TV Wonder は TV Wonder VE の上位バージョンでチューナがステレオ、S端子付きでしたが、ちょっと高めだったのでやめました。
以下にやったことなどを書き立てます。

1. ハードのインストール
2. ソフトのインストール・設定
3. 外部ビデオ入力
4. テレビ画面保存・録画
5. 予約録画
6. 録画した画像 (Motion JPEG 形式) の再生
7. MPEGへの変換

1. ハードのインストール

PC の電源を切り、ATI TV Wonder VE を PCI バスに挿します。TV Wonder VE にチューナの音声出力があるのでそこからサウンドカードの Line in に入力します。(ケーブルは付属)
外部ビデオを見る場合はビデオ入力端子にビデオデッキの出力から同軸で繋ぎます。(音声などは後述)
 

2. ソフトのインストール・設定

PC を起動すると Vine 2.1.5 は Bt878 デバイスを自動認識します。bttv もカーネルのオプションとして存在し、モジュールになっています。ただし、/etc/conf.modules で bttv の option で適切なカード番号を設定する必要があります。(後述)
テレビを見るときは xawtv を使います。rpm はないけど、

# rpm -ta xawtv-3.xx.tar.gz

とやるだけで /usr/src/redhat/RPMS/i386/ に rpm ができてしまいます。 いくつか rpm ファイルができますが、その中のうち、xawtv-3.xx-1.i386.rpm をインストールすればいいでしょう。テレビを見る xawtv、録画をする streamer 等がインストールされます。

$ xawtv

とコマンドラインからうてば起動します。ただし、このままでは何も映りませんでした。
bttv で TV Wonder VE にあった設定をする必要があります。
/etc/conf.modules に以下のようにして card 番号を設定する必要があります。

options bttv card=xx # xx はカード番号

Vine-2.1.5 のカーネル 2.2.18 の bttv には TV Wonder VE に対応するカード番号は無いようです。
tuner の設定は置いておいて、card=0 から 17まで composite 入力が映るかで試したけど全て映りませんでした。(17が最高値のようだ。18以降を設定するとbttv起動事エラーがでる)
Vine-2.1.5 のカーネル 2.2.18 の bttv は 0.5.x で古いためみたいです。
そこで最新の bttv-0.7.69 に CARDLIST というファイルがあるので中身を見ると TV Wonder VE は card=64 でした。やった!対応している。
さっそくインストールと行きたいとこだが、i2c というものが必要だそうです。 i2c のインストールには3パターンあって、

  1. カーネルとは別にインストールする
  2. カーネルに半分組み込んでインストールする
  3. カーネルソースにパッチをあててインストールする
がある。 1, 3 がおすすめだそうなのですが、難しそうな 3をやってみました。 i2c でパッチを充てるとカーネルのメニューに i2c が現れるのでモジュールとしてインストール。
続けて bttv-0.7.69 もインストール。成功。
しかし modprobe bttv しても emu10k1 がビジーとかでロードに失敗してしまいました。
そこでカーネル 2.2.19 にはもちっと新しい bttv が入っていることを期待して カーネル 2.2.19 にしてみます。 しかし bttv は同じく 0.5.x。 再度最新版 bttv を試すことに。
今度は i2c は 1の方法でインストール。 bttv もインストール。
テレビを見るのにはチューナの設定も行う必要があります。テレビチューナは tuner.o というモジュールがあり xawtv 等を起動すると bttv と一緒に自動的にロードされます。チューナの設定は、/etc/conf.modules

options tuner tuner=2

と書きます。2 でいいみたいです。

するとあっさり bttv は modprobe でき、xawtv でビデオ入力映像が見られました。カーネルを新しくしたからか i2c のインストール方法を変えたからかは判らずじまい。

xawtv 右クリックでメニューが現れ様々な設定をが出来ます。 それだけでもなんとか使えますが、デフォルトが PAL だったり不便なので ~/.xawtv ファイルに設定事項を書いておけ ば便利です。このサンプルファイルでいいと思います 。
これで画面をクリックするとチャンネルが選べたり、最初から NTSC だったり出来ます。 ただし、overlay 式だと画像にノイズが走るし画面サイズを大きくすると画面の一部しか表示されない。。ビデオカード変えた方がいいのかな? cpu を介する、grabdisplay 式だとノイズは消えるけど、画面サイズを大きくするとコマ落ちしてしまうのですが。。

3. 外部ビデオ入力

ビデオのComposite出力をチューナカードの Composite 入力(黄色い奴)に繋ぎます。 チューナカードのチューナでテレビを見る場合、音声はチューナカードの音声出力をサウンドカードのラインインに入力して音を出しています。 従ってビデオ入力の時はビデオのラインアウトをサウンドカードに入力すればいいです。 ただし、これだとチューナとビデオの音が切り替えができません。どちらかをサウンドカードの Mic in に入力してみたましたが Mic in の音は全く聞こえなかったです。なぜだろう・・・ 従って予約録画もビデオ入力かチューナかどちらかしかできないのですね。

4. テレビ画面保存・録画

テレビを見るだけならホントのテレビで充分です。PC でテレビを見て嬉しいのはやはりHDD等に録画してとっておけることではないでしょうか。ノート PC にコピーすればいつでもどこでも観られます。
まず xawtv ではテレビを見ながら静止画保存と動画保存が可能みたいなので試してみます。
右クリックで出るメニューで行います。
しかし xawtv から静止画保存 (jpeg/pcm) は可能だけど xawtv での動画保存はファイルは作られるけど再生できませんでした。 avi は windows のメディアプレーヤやLinux の xanim ではサポート外ファイルタイプとなってしまうのです。 しかも音声は別の wavファイル。 →その後の調べで xawtv の画面の上で "Microsoft AVI (RIFF) Format" を選択すればいいことに気づいた (2001/09/01)
そこでコマンドラインの録画プログラム streamer を使ってみました。すると画像と音声が同時に AVI 形式で録画できました。 (streamer だと画面を見ながら録画できないけど) 細かい設定ができ、Motion JPEG (MJPEG) 方式で録画できます。 mjpeg で保存すると xanim で再生可能。音声もしっかり記録されます。
フレームレート (fps)、音質なども設定できます。

streamer -r 10 -o abc.avi -f mjpeg -t 12000 -n ntsc -F stereo -R 11025 -i Composite1 -j 50

-r でフレームレート (fps) を設定します。テレビ等は 10fps ぐらいだとなんとか見られます。5fps だとかなり見づらいです。 -f でファイル形式を指定します。AVI の場合、圧縮しない形式 の rgb15 (15 ビットカラー)、rgb24 (24 ビットカラー)、圧縮する mjpeg、jpeg があります。圧縮しない形式だと、記録が追い付かないでエラーになります。-n で ntsc を指定、-F でサウンドのステレオ/モノラル 、量子化ビット数をしていします (モノラルの場合のみ)。-R でサウンドのサンプリング周波数を指定します。サウンドの設定によってもエラーが出たりでなかったりします。その他の設定に関しては、streamer -hとやってヘルプを表示させてみてください。

色々試してみました。30fps、320x240だと記録時にコマ落ちしてしまいます。 10fpsぐらいだと問題ないがさすがにカクカクしています。 bttv のバッファ数 (デフォルトは 2) を8ぐらいに増やすと30fps、320x240でもほぼ問題ないです。以下のように設定します。
options bttv card=64 gbuffers=8
それでもさすがに30fps,640x480だとコマ落ちどころか途中でエラーで終了してしまいます。 15fps程度だとほぼ問題ありませんが。 音質を落としたり、画質を落としたり色々やってみて自分に適したモードを選びます。
高速なHDDにすると大丈夫かもしれない。 今はU-DMA でもないし、容量が少なく記録密度も低いので転送速度はかなり低いと思います。高速HDDで記録専用のパーティションを用意すれば大丈夫かもしれないですね。

→その後、Ultra DMA100 の 80GB の HDD を買ったが、コマ落ちはあまり改善しないし、エラーも起こってしまった。ログを見ると "Sound: DMA (input) timed out" とあったので、サウンドカードのデジタル化の速度が追い付いていない様です。今は ISA のサウンドカードなので PCI のものにすれば大丈夫かな?

→その後、HDD が DMA 設定になっていないことが判明。hdparm で DMA の設定をすると見違えるほどスムーズにキャプチャできるようになりました。それでも 640x480、ステレオ44.1KHz とかだときついけど。

高画質だと容量が膨大になります。50分、320x240、10fps、音声 ステレオ 11025hz (結構低画質) でも 440MB。

また、ビデオソフトのコピーガードは効かないようです。 最近のキャプチャカードはコピーガードが効くって聞いていたけどなんでなんでしょうね?おそらくWinなソフトでガードかけているからかな?Linuxソフトだとかけていないのかもしれない。 ただし容量の問題で、画像縮小、コマ数を落としているのでとても満足できるようなものではありません。たとえ記録できてもファイルサイズが2GBを越えて記録が途中でストップしてしまうでしょう。 155分の映画で、15fps, 320x240, 22050Hz ステレオで記録したところ最後のキャスト表示の途中で切れていました。ファイルサイズは 2GB。Mpeg4、530kbps 圧縮にしたら 680MBぐらいでなんとか CD-R に収まるぐらいです (圧縮については後述)。こりゃあまともな画質でとっておこうと思ったら DVD-R とか要りますね。あと、2GB 以上のファイルを作れるように、LFS も対応しておく必要が有ります。(未実施)

5. 予約録画

せっかくサーバとして PC をずっと立ちあげているので予約録画をしたいですね。 aumix と streamer を実行する簡単なシェルスクリプトを作ります。
スクリプトの中身は #!/bin/sh

/usr/bin/aumix -f /etc/rec_aumixrc -L
/usr/bin/X11/streamer -r 25 -o /data/pub/video/abc.avi -f mjpeg -t 75000 -n ntsc -F stereo -i Composite1
/usr/bin/avi2mpg -i /data/pub/video/abc.avi -vb 600 -ab 96

上の avi2mpg というのは、MJPEG Tools を使った変換スクリプトでMPEG ビデオファイルの作り方で解説しています。

ただし、上に示すように内蔵チューナかビデオの音声しか入力できないのでどちらかを選ぶしかない。 衛星放送を録画することが多いので、今のところビデオデッキの音声を入力しています。この方法にはひとつ問題があります。ビデオデッキ側でも予約をしなければいけないのです。とほほ。

6. 録画した画像 (Motion JPEG 形式) の再生

streamer で記録した画像は Motion JPEG (MJPEG) で xamin で問題なく再生できますが、他人にあげたりする場合 Windows でも観られた方がいいです。
しかし AVI 形式なんだけど、MJPEG 形式は特別なコーデックが必要みたいで Windows 98 のメディアプレーヤーでは再生できませんでした。 そこで 3rd パーティーのコーデックや DirectX8.0a (NT4.0不可) をインストールすると再生できます。
DirectX8.0a は http://www.microsoft.com/japan/directx/homeuser/downloads/default.asp にあります。
ただし、DirectX8.0aのコーデックは Windows Media Player で再生する時のみ使用できるようで、他の編集ソフトなどでは MJPEG ファイルを開けるようにはなりません。けちー
その点 3rd party コーデックは他の編集ソフトでも開けます。 しかも 3rd party コーデックの方がパフォーマンスがいい。私の持っているカシオのノートパソコン FIVA 102 (MediaGX 233MHz) だと 3rd party のコーデックでの再生はスムーズだけど DirectX での再生はコマ落ちします。 3rd party のコーデックでは MainConcept のものがおすすめです。再生は非商用なら使用条件なし。エンコード (MJPEG を作成する場合) はシェアウェアです。MJPEG から他のフォーマットに変換する分には問題ないです。NT4.0も大丈夫。

7. MPEGへの変換

上記のように Motion JPEG 形式のファイルは再生に苦労することが多いです。MPEG に変換しておけばまずどこのプラットフォームでも再生できるでしょう。

Windows の aviutl または TMPGenc (MPEG1も可能) というツールを使います。細かい設定ができて good。 MPEG4 エンコードにはMS のmediatools というのをインストールする必要があります。

また Linux でエンコード (mpeg1のみ) するには、
http://einai.l.chiba-u.ac.jp/~nyoshi/makempeg.html を参照して行いました。 必要ソフトへのリンクとそれらを使った mpeg 化を自動化するスクリプトがおかれています。試してみました。(詳細は上のページを参照してください)

→その後、MJPEG Tools なるものを Source Forge で発見。エンコード速度も速くて簡単でばっちり。これについては MPEG ビデオファイルの作り方 で解説。


関連リンク:


戻る | real-baishi に戻る