v4l2-ctl を使ってUSB Web カメラの情報を表示する
v4l2-ctl というツールを使うとLinuxマシンに接続したUSB Webカメラの持つ情報(例えば対応する解像度とか)を取得することができる。
が、頭おかしいぐらいオプションがある。
デフォルトで以下だが、 --help-all を付けたら A4 10ページ分ぐらいのオプションが表示されてあばばってなるので注意。
$ v4l2-ctl
General/Common options:
--all display all information available
-C, --get-ctrl=<ctrl>[,<ctrl>...]
get the value of the controls [VIDIOC_G_EXT_CTRLS]
-c, --set-ctrl=<ctrl>=<val>[,<ctrl>=<val>...]
set the value of the controls [VIDIOC_S_EXT_CTRLS]
-D, --info show driver info [VIDIOC_QUERYCAP]
-d, --device=<dev> use device <dev> instead of /dev/video0
if <dev> starts with a digit, then /dev/video<dev> is used
-e, --out-device=<dev> use device <dev> for output streams instead of the
default device as set with --device
if <dev> starts with a digit, then /dev/video<dev> is used
-h, --help display this help message
--help-all all options
--help-io input/output options
--help-misc miscellaneous options
--help-overlay overlay format options
--help-sdr SDR format options
--help-selection crop/selection options
--help-stds standards and other video timings options
--help-streaming streaming options
--help-tuner tuner/modulator options
--help-vbi VBI format options
--help-vidcap video capture format options
--help-vidout vidout output format options
--help-edid edid handling options
-k, --concise be more concise if possible.
-l, --list-ctrls display all controls and their values [VIDIOC_QUERYCTRL]
-L, --list-ctrls-menus
display all controls and their menus [VIDIOC_QUERYMENU]
-r, --subset=<ctrl>[,<offset>,<size>]+
the subset of the N-dimensional array to get/set for control <ctrl>,
for every dimension an (<offset>, <size>) tuple is given.
-w, --wrapper use the libv4l2 wrapper library.
--list-devices list all v4l devices
--log-status log the board status in the kernel log [VIDIOC_LOG_STATUS]
--get-priority query the current access priority [VIDIOC_G_PRIORITY]
--set-priority=<prio>
set the new access priority [VIDIOC_S_PRIORITY]
<prio> is 1 (background), 2 (interactive) or 3 (record)
--silent only set the result code, do not print any messages
--sleep=<secs> sleep <secs>, call QUERYCAP and close the file handle
--verbose turn on verbose ioctl status reporting
いくつか使いそうなのを列挙する。
カメラの対応する解像度の一覧
以下のコマンドでカメラの対応解像度一覧が表示される。
たいていの場合、YUYV と MJPG の2つがあるはず。
fpsが違う点に注意。
なんでフルHDで30fps出ないんだ!カメラのスペック上は出るって書いてるぞ!とか思ってたら YUYV だった、というケースはありがち。
$ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 176x144
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.083s (12.000 fps)
Size: Discrete 1600x1200
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 2048x1536
Interval: Discrete 0.500s (2.000 fps)
Size: Discrete 2592x1944
Interval: Discrete 0.500s (2.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 176x144
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1600x1200
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 2048x1536
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 2592x1944
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
ちなみに、USBカメラを2台とかつけてる場合は、 -d /dev/video2 とか デバイスを指定してあげる必要がある。
デフォルトは /dev/video0 。
カメラの現在の設定値情報一覧(輝度とかホワイトバランスとかの情報)
以下のコマンドでそのカメラに今設定されている露出やホワイトバランス、輝度などの設定値を取得できる。
$ v4l2-ctl --all
nfo (not using libv4l2):
Driver name : uvcvideo
Card type : USB Camera: USB Camera
Bus info : usb-0000:00:14.0-4
Driver version: 5.4.114
Capabilities : 0x84A00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'YUYV'
Field : None
Bytes per Line : 1280
Size Image : 614400
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Limited Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 640, Height 480
Default : Left 0, Top 0, Width 640, Height 480
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 640, Height 480
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
brightness 0x00980900 (int) : min=-64 max=64 step=1 default=20 value=20
contrast 0x00980901 (int) : min=0 max=100 step=1 default=32 value=32
saturation 0x00980902 (int) : min=0 max=100 step=1 default=60 value=60
hue 0x00980903 (int) : min=-180 max=180 step=1 default=5 value=5
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gain 0x00980913 (int) : min=0 max=128 step=1 default=64 value=64
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=1
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=10 default=4600 value=4600 flags=inactive
sharpness 0x0098091b (int) : min=0 max=100 step=1 default=50 value=50
backlight_compensation 0x0098091c (int) : min=0 max=1 step=1 default=0 value=0
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3
exposure_absolute 0x009a0902 (int) : min=50 max=10000 step=1 default=166 value=274 flags=inactive
exposure_auto_priority 0x009a0903 (bool) : default=0 value=0
focus_absolute 0x009a090a (int) : min=0 max=255 step=0 default=0 value=0 flags=inactive
focus_auto 0x009a090c (bool) : default=1 value=1
以上。