シンプルな画像キャプチャツール:capture-V4L

最終更新:2004/5/25,文責:向川康博

Video4Linuxは,Linuxでビデオキャプチャデバイスを扱うためのAPIです. 詳しくは「Video4Linux」をキーワードに Googleってみてください. きっと,いろんな情報が見つかるでしょう.

私はもともと,FreeBSD派でしたので,Meteorドライバを使っていました. 2003年から急にLinux派に転向したのを機会に, Video4Linux(V4L)を使ったシンプルなキャプチャプログラムを作成しました. たいしたもんではありませんが公開します. Web上で公開されているサンプルソースを参考に書きましたので, もはや私は著作権を主張する立場にはありません.

ソース一式:capture-V4L-v1.2.tgz


コンパイル方法

% tar xvfz capture-V4L-v1.2.tgz
で,capture-V4Lというディレクトリにファイルが展開されます.
% cd capture-V4L
% make
で,capture-V4Lという名前の実行バイナリが作成されるはずです.

ファイル構成

tarファイルに含まれているのは以下のファイルです. Video4Linuxを使って,実際に画像をキャプチャする部分は, capture.cとして明確に分けてあります. この実行バイナリ(capture-V4L)は,単なるサンプルですので, 自分で作成したプログラムに capture.c/capture.hを組み込むという使い方をするのもいいでしょう. capture.c/capture.h のみを取り出して画像キャプチャライブラリとして 使うのもいいかも知れません. 煮るなり焼くなりご自由にどうぞ.


ちょっとした特徴

PPM画像だけではなく, TEO画像 も出力することができます. ただし,コンパイルには特殊なライブラリは必要としません. このソースは, libteoライブラリを使わないTEOプログラミング の一例を示しています.


README

tarファイルに含まれている READMEを以下に示します.

Video4Linux APIを利用したビデオキャプチャツール capture-V4L

% capture-V4L [option]

 -d#: デバイス名をセットします.デフォルトは /dev/videoです.
 -s#: 入力端子を指定します(0:コンポジット, 1:コンポジット, 2:S端子)
      デフォルトは2(S端子)です.
 -t : TEOフォーマットで出力します.デフォルトはPPMフォーマットです.
 -m#: マルチフレーム(動画)をキャプチャします.# でフレーム数を指定します.
      デフォルトは1(静止画)です.
 -f#: 静止画のファイル名,連番のファイルフォーマットを指定します.
 -v : 冗長モード.いろんな情報が stderrに表示されます.
 -w#: gettimeofday()で計測したシステム秒が指定された時刻になるまで待機
 -a#: 連続して#枚を撮影し平均画像を出力します.ノイズ除去に効果-あり.
 -u : USBカメラモード(NTSCチェックを省略する)

◎特徴
 ・静止画/動画のどちらでもキャプチャ可能
 ・出力は,PPM/TEOの2種類のフォーマットをサポート
 ・コンパイル時に特殊なライブラリは不要(libteoも不要)

◎出力フォーマットについて
本ツールは,様々な出力フォーマットに対応しています.
 ・フォーマットはPPMか/TEOか
 ・シングルフレーム(静止画)か/マルチフレーム(動画)か
 ・標準出力に書き出すか/指定された名前のファイルに書き出すか

(PPM|TEO)*(静止画|動画)*(連番|マルチフレーム)の8通りがありますが,PPM
フォーマットの動画を標準出力に出力できませんので,実際には7通りです.

 (1) PPMの静止画を標準出力に書き出す.
     % capture-V4L > image.ppm

 (2) TEOの静止画を標準出力に書き出す.
     % capture-V4L -t > image.teo

 (3) PPMの静止画を指定されたファイルに書き出す.
     % capture-V4L -f image.ppm

 (4) TEOの静止画を指定されたファイルに書き出す.
     % capture-V4L -f image.ppm -t

 (5) TEOの動画を標準出力に書き出す.
     % capture-V4L -m 10 -t > image.teo

 (6) PPMの動画を連番のファイルに書き出す.
     % capture-V4L -m 10 -f image.%d.ppm 

 (7) TEOの動画を連番のファイルに書き出す.
     % capture-V4L -m 10 -f image.%d.teo -t

  ※ 連番ファイルのフォーマットは,printfの書式に従います.
     「-m 10 -f image.%d.ppm」の場合は,image.0.ppm〜image.9.ppm
     となります.個人的には,image.%03d.ppm などとしして桁を揃えると
     image.000.ppm〜image.009.ppmなどとなって,美しいかと.

◎履歴

2003/10/16 Ver1.0 とりあえずのプロトタイプ
2003/10/22 Ver1.1 同期撮影用に -wオプション追加
2004/05/25 Ver1.2 USBカメラモードを追加