安装

在 Debian / Ubuntu 系统中安装 v4l2-ctl(属于 v4l-utils 软件包):

apt install v4l-utils

查看设备列表

v4l2-ctl --list-devices

输出会列出每个设备及其关联的 /dev/videoN、/dev/mediaN 节点:

HikCamera: UVC Camera (usb-0000:02:03.0-1):
        /dev/video0
        /dev/video1
        /dev/media0

查看设备详细信息

v4l2-ctl -d /dev/video0 --all

示例输出:

Driver Info:
        Driver name      : uvcvideo
        Card type        : HikCamera: UVC Camera
        Bus info         : usb-0000:02:03.0-1
        Driver version   : 5.15.199
...

查看支持的格式、分辨率和帧率

v4l2-ctl -d /dev/video0 --list-formats-ext

示例输出:

ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'YUYV' (YUYV 4:2:2)
                Size: Discrete 256x392
                        Interval: Discrete 0.040s (25.000 fps)
                ...
        [1]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 120x160
                        Interval: Discrete 0.040s (25.000 fps)
                ...
        [2]: 'H264' (H.264, compressed)
                Size: Discrete 240x320
                        Interval: Discrete 0.033s (30.000 fps)

设置采集格式

设置 800×600 的 UYVY 格式:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=800,height=600,pixelformat=UYVY

设置前应先通过 --list-formats-ext 确认该设备支持对应的像素格式和分辨率;驱动可能会将不支持的请求调整为最接近的有效值。

获取一帧数据

采集一帧 YUYV 原始数据:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=256,height=392,pixelformat=YUYV --stream-mmap --stream-count=1 --stream-to=frame.raw

采集一帧 MJPEG 数据:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=256,height=392,pixelformat=MJPG --stream-mmap --stream-count=1 --stream-to=frame.jpg

--stream-mmap 表示使用 mmap 方式采集;--stream-count=1 限制采集一帧;--stream-to 指定输出文件。YUYV 输出是裸像素数据,需要按分辨率和像素格式解释;MJPEG 输出通常可直接作为 JPEG 图片打开。