SXGA(1280×1024)の60fps動画キャプチャ

ある家電量販店で買い物をしていると後ろの客が何やらSXGAサイズで60fpsで動画キャプチャをしたいと言っている。


店員はLogicoolのカメラを指して「このカメラでも60fps対応していますよ」とか言っているのだが、それは320×240において最大で60fpsであるに過ぎない。


客もそれをわかっているからしつこく食い下がる。デモ機を指しながら「これSXGAサイズにしてもらえますか」「これどう見ても8fpsぐらいしか出てないですよね?」


店員も負けてはいない。「このパソコンはCeleron2GHzでパソコンの性能も低いのですし」云々かんぬん。


客もそんなことには騙されない。「これ速いパソコンでも15fpsも出ないですよね?」


「そのへんは、チップセットによっても変わってきますし、WEBカメラにそこまで求めるのも」と言いながら店員は今度はビデオキャプチャボードを勧め出した。


客もそんなことでは誤魔化されず、「ビデオキャプチャでもUSB接続だと結局、60fpsは出ないんじゃないですか?」


店員「取り込みにタイムラグはありますが、60fps出ると思います」などといい加減なことを言い始める始末。


客のほうが賢く「この商品、SXGA対応してないじゃないですか。しかも、fpsは書いてなくてビットレートしか記載が無いですよね」などと話は迷走状態である。


この人たちは一体、何故こんな無駄な会話をしているのだろうか。プログラマならばSXGAで60fpsなんて出るはずがないことぐらい考えるまでもなくわかるところだろうが…。理由は簡単だ。


1280×1024(SXGA)と言うのは、1.25k × 1k = 1.25Mピクセル(およそ130万画素)である。1.25Mと言うのは、カメラに130万画素と書いてあるのでそこから単純に1.3Mと見積もっても良い。


次に、1つの画素はR,G,Bそれぞれ256段階(8bit)で取り込むのだろうから8bits×3 = 3 bytes必要である。つまりSXGAの静止画1枚を無圧縮で保存するには画素数の3倍のバイト数が必要だ。1.25MB×3 = 3.75MB。おおよそ4MBと考えても良いだろう。


そしてUSB2.0の転送速度は理論値が480Mbpsである。bpsはbits per secondの略なのでbyteに換算すると8で割って60MB/sである。60MB/sで4MBの画像を1秒間に何枚転送できるかと言うと、60 / 4 = 15枚である。これがSXGAで15fpsが理論的限界値である理由である。 このことから15fps以上出ないことは自明だし、商品の個別の記載を確認するまでもない。


賢明な読者ならUSBの帯域が問題になるならWEBカメラと本体の間で圧縮して送ればいいじゃないかと言われるかも知れないが、これだけのサイズの動画のリアルタイムエンコードには相当の計算コストがかかるので、ハードが非常に高価になるし、消費電力も増大してUSBのバスパワーでは賄えなくなる。要するにそんなWEBカメラは現実的ではないのだ。


これに対してUSB接続のビデオキャプチャ機器ではUSBの帯域が問題になるのでハードでエンコードするのが普通なのだが、それでもUSBの理論的限界値(普通はその2,3割しか出ないが)が出たとしても、15fpsにすらならないのだから、60fpsを達成しようと思うと少なくとも1/4のデータ量に圧縮しなければならないことになる。


USBの実効速度を加味すれば1/10以下に圧縮しないといけないだろう。MPEG2で1/10に圧縮してどれだけ動画が汚くなるかは言うまでもないことで、そんな製品は実用にならない。そんなわけでUSB接続でSXGAサイズの動画をキャプチャしようというのは(仮にそんな製品があったとしても)狂気の沙汰としか言いようがない。というか、そんな製品は存在しない。


せめてPCI接続か、欲を言えばPCI Expressで接続するものを選ぶべきだろう。だが、そうするとSXGA対応のものは値段は10万前後になってくる。それと、無圧縮でSXGA 60fpsの動画は3.75MB×60 = 225MB/sものサイズになり、普及帯のHDDの書き込み速度を大幅に超えている。1/4程度のbitrateに落としてもHDDへの書きこみが間に合わないので3〜6台ぐらいでRAIDを組むのが普通である。


要するにSXGAで60fpsでの動画キャプチャは非常に過酷な条件なのである。SXGAサイズ以上の液晶ディスプレイが普及してきた現在、USBとHDDの転送速度はそろそろいまの5倍ぐらいにはなって欲しいのだが。