ビデオキャプチャ:デバイス編
ビデオキャプチャ:総合目次
- 表紙
- デバイス編
コンピューターに映像を取り込む経路は様々である。ざっと分類すると
- 普通のビデオカメラとビデオキャプチャボード
- USBカメラ
- IEEE1394カメラ
- デジタルビデオカメラをIEEE1394経由で
- ネットワークカメラ
それぞれ、カメラ画像の質であるとか、プログラミングのしやすさ、カメラ配置の自由度などに得失がある。 このページではそれぞれの特徴について事例を共有して、判断材料にしよう。
目次
ビデオカメラとビデオキャプチャボード
既存のビデオカメラを使える。カメラの機能が重要であったり、カメラをコンピューターからそこそこ離れた位置に置きたい場合には この方法がお薦めだ。画質はビデオキャプチャボードにも左右される。カメラ側の画質も含めて判断するべき。
OSのサポート
どんなビデオキャプチャボードがよいかは、そもそもシステムを組む OS 側でそれがサポートされているかどうかを 考慮しなければならない。Linux であれば、Linux対応ビデオ入力機器のページを参照されたい。
画像について
SAA7134系のキャプチャボードでは、入力画像のうち下から数ラインが黒や灰色のピクセルで占められている場合がある。 これは垂直回帰期間 (VBI) の信号がそのままデコードされているためである。普通のテレビ画面ではこの部分は画面の外にあたる(オーバースキャン) ので表示の上では問題がないのだが、キャプチャ画像にこれが含まれていると見苦しいので、この部分を取り除く必要がある。 一番確実なのは端の部分を切り捨てて中央部分のみ使う方法。tvtime はこの方法を採用している。
もう一つビデオ特有の問題として、インタレース走査の問題がある。一般的なビデオ信号は毎秒60フレームのスピードで撮影するが、 各フレームでは画面全体を撮影せず、1フレームごとに偶数本目の水平走査線・奇数本目の水平走査線とを分けて撮影・転送している。 これを人間の目でテレビ画面で見る分には問題ないのだが、ビデオキャプチャーではこの二つのフレームを合成して一つの画像としてキャプチャするので、 動きの激しい画像では水平走査線単位でズレを生じる場合がある(「くし形ノイズ」などと呼ばれる)。これを回避する方法は、
- 奇数フレームまたは偶数フレームのみ採用する
- デインタレース処理を施す
- カメラ側で「プログレッシブ撮影」をする
がある。1番目はドライバにパラメタを渡して実現するか、プログラム側で間引いていく。この場合垂直解像度が半減する。 2番目は DScaler や tvtime からコードを持ってきて組み込んでしまう。ただし画像処理の負荷が跳ね上がりレイテンシが増えてしまうのと、 そもそも完璧な処理は理論上不可能であるということは認識しておくべき。確実なのは3番目の方法。ビデオカメラの設定で「プログレッシブ撮影」 が可能であればそれを選択しておくと、プログレッシブ走査をするようになる。この場合撮影は毎秒30フレームとなり、 インタレース走査に比べて動きがパラパラして見える。これが気になる場合は、シャッタースピードを調節して適度にブレを生じるようにするとよいだろう。
入力コネクタについて
困ったことに最近のビデオキャプチャボードはビデオ入力が S・コンポジット両対応の口が一つだけあって、 コンポジットの線を接続するときは変換コネクタを必要とするものが多い。このタイプだと、現場で「コネクタが無い!」という事態を 招きやすいので、できるだけコンポジットの入力が独立にあるものを選んだ方がよい。
複数チャネルの同時キャプチャ
キャプチャボードを複数枚差して同時にキャプチャすることができる。ただしボードによっては複数枚差しに対応していない場合がある。 これまでの実績からいくと、Osprey-100 は二枚差しで問題なくキャプチャできた。 また、Bt848のボードと SAA7134のボードの2枚での同時キャプチャにも成功している。
USBカメラ
USBカメラは安価にビデオキャプチャ環境が構築でき、手軽である。ただし画質は期待できない。フォーカスの調整や細かいパラメタの調整は難しい場合がほとんど。 ズームレンズを持っていたりフィルタが装着できるものはまず見当たらない。ケーブル長にも制限がある。
諸問題
多くの USBカメラは USB1.1 規格のもので、データの転送速度が遅いため、画面解像度を上げることができない。 たいていの場合 320x240 の画面を 30fps で撮影するのが限界で、解像度を 640x480 にまで上げると 10〜15fps 程度にまで落ち込む。 フレームレートを維持しつつ解像度を稼ぎたい場合には、320x240 の画像を拡大するしかない。
USB カメラの多くは画像を圧縮して転送するので、「圧縮⇒転送⇒展開」という手順を踏む。このため、撮影されてから表示するまでの遅延がどうしても生じてしまう。
一部 USB カメラでは画像圧縮の際のブロックノイズがひどく、画像処理に影響を与える。
USB の帯域幅の制限のため、同時にキャプチャできる数はそれ程多くない。二台同時でもうフレーム落ちが発生する。
Linux での利用
OS として Linux を採用している場合には対応ドライバの有無をチェックする必要がある。 Linux対応ビデオ入力機器のUSBカメラの項およびその関連リンクを参照してほしい。
IEEE1394カメラ
IEEE1394 (FireWire) 対応のもので、「IIDC 1394-based Digital Camera Specification」と呼ばれる規格で規定されるデジタルカメラのこと。 次の項目で取り上げるダジタルビデオカムコーダとは異なることに注意。 具体的な製品としては、Unibrain の Fire-i や、Apple の iSight が該当する。これらのカメラは高解像度な画像を非圧縮で撮影・取り込みできる点が優れている。 非圧縮のため遅延が短かく、ブロックノイズなど圧縮に伴う画質の低下もない。カメラによってはズームレンズを内蔵していたり、 C/CS マウントのレンズを装着可能であったりするものもある。またシャッタースピードやホワイトバランスの調整なども IEEE1394 経由でできるものが多い。 じっくりと画質を調整したい場合にはこうした製品を選ぶべきだ。あと何といっても、ケーブルで給電できるタイプは現場でとかく重宝する。
欠点としては、ケーブルのとりまわしが若干面倒なのと、経路長制限があること。ケーブルは一般的に 5m 程度までなので、 それ以上長くしたい場合はリピータが必須となる。アナログ信号だと画像の乱れなどに反映されるのですぐに気がつくのだが、 デジタル信号だとまったく取り込めなかったり、次第に動かなくなったりと症状が一定しないのでなかなか気がつかない。 ケーブルやコネクタの不良でも同種の問題が生じるので、何かあったらまずこのあたりを疑ってみるべきだ。 あと、入手できるカメラの多くは監視カメラ用や工業用途用で、色合いの美しさなどは二の次な設計になっているものが多いことは考慮しておこう。
Linuxからの利用
IIDC でプロトコルも規定されているため、一通りの作業はどんなカメラでも同じようにできる。対応ドライバが提供されていなくても、 libdc1394 などを利用すればたいがいのことは可能。また libdc1394 に同梱されている dc1394_vloopback を使えば、 vloopback を経由して video4linux デバイスに見せかけることもできる。詳しくは libdc1394 のページを参照のこと。
複数台の同時キャプチャ
IEEE1394 の帯域幅とデバイス数制限に収まる限り、いくらでも同時にキャプチャすることができる。もちろん解像度やフレームレートとの 兼ね合いになるので、あまりに大規模なことはできないが。また、ケーブルから給電する場合は最大アンペアの確認も必要。 足りない場合は給電できるハブを挟むか、カメラ本体に別系統で給電する。
デジタルビデオカメラをIEEE1394経由で
市販されているデジタルビデオカメラ(ビデオカムコーダ)で IEEE1394 (FireWire) または iLink 対応、かつ DV 形式での出力に対応したものは、 コンピューターに映像を送出することができる。
映像は DV または miniDV テープに記録されるデータと同じように、圧縮された状態で送信される。そのため受信側でこれをデコードする必要がある。 そのため全体のレイテンシが高くなってしまうのが難点だが、カメラ部分の性能が期待できる。
Linuxからの利用
Linux からの利用は簡単ではない。IEEE1394 デバイスへのアクセスと DV 形式のデータのデコードをそれぞれ自力で行う必要がある。 video4linux に見せかけるような仕組も今のところない。 プログラミングは dvgrab や Kino のソースコードを参照するとよいだろう。
ネットワークカメラ
Ethernet や無線LAN経由で画像データを取得できる Web カメラを使うという手もある。利点としては、配線の自由度が非常に高いこと。 ハブを使ってケーブルを集約していけば、台数が増えても配線を簡潔に保つことができる。 最近では Power over Ethernet により給電も Ethernet ケーブルでできるものが出てきているので電源ラインを引き回すことを考えなくて済む場合もある。 イベント会場のあちこちにカメラを設置したいというような場合に向いている。 また画像の取得は非常に簡単で、たいていはそのカメラが用意している http サーバーにアクセスして、所定の URI をアクセスすれば画像をダウンロードできる。 ただ、フレームレートを上げようと思うともう少し高度なアクセスが必要になるかもしれない。
カメラ部の性能は、何が写っているかわかればよい程度のものが多く、まったく期待できない。