V4l2-ctl

v4l-utils是一个用于处理媒体设备的软件包,包括工具如media-ctl和v4l2-ctl,用于配置摄像头参数和排查V4L2设备问题。v4l2-ctl可以设置图像格式、分辨率、帧率等,并提供了查询设备详细信息、控制曝光模式等功能。文章列举了多个示例,展示如何使用v4l2-ctl进行设备控制和抓帧操作。

1 v4l-utils

v4l-utils是一种用于处理媒体设备的软件包,它主要包含两个常用工具1:

  1. media-ctl:用于配置拓扑结构中各节点的format、大小、链接;操作/dev/medio0节点;获取Camera支持数据格式等。
  2. v4l2-ctl:用于获取和设置v4l2设备的参数。

它托管在[ v4l-utils.git ]中,并打包在大多数发行版中。提供了一系列库和实用程序,可用于控制板

l-utils还包含其他一些实用程序和库,用于处理视频4 Linux(V4L)设备驱动程序和相关功能。用于排查V4L2设备问题的实用程序。它可以检查设备连接、功能和参数配置,并生成详细的错误报告。

以下是v4l-utils中一些常用工具的简要说明:

  1. v4l2-ctl:用于控制和配置V4L2设备的功能和参数。它可以设置图像分辨率、帧率、缩放、旋转等参数,以及控制摄像头的基本设置。
  2. v4l2-overlay:用于在屏幕上叠加图像或文本,以提供对图像的注释或标记。它可以将自定义的图像或文本叠加在视频流上,并支持透明度和位置调整。
  3. v4l2-format:用于查询和设置设备图像格式的实用程序。它可以列出设备支持的所有图像格式,并选择要使用的特定格式。
  4. v4l2-capture:用于捕获视频帧的实用程序。它可以读取设备缓存中的视频帧,并将其保存为图像文件或进行其他处理。
  5. v4l2-zoom:用于缩放视频图像的实用程序。它可以将图像放大或缩小,同时支持平滑的缩放效果。
  6. v4l2-exposure:用于控制摄像头曝光时间的实用程序。它可以设置曝光时间、曝光补偿、手动/自动曝光模式等参数。

这些工具可以单独使用,也可以与其他V4L2相关的库和应用程序一起使用,以实现更复杂的功能和操作。

这里只展开v4l2-ctl

2 v4l2-ctl

 v4l2-ctl --help 查询支持的所有命令

 v4l2-ctl --help

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-subdev      sub-device 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.
  --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
 

 2.1 常用命令

2.1.1 v4l2-ctl --list-devices  

列出系统中所有的V4L2设备

下图2路usb摄像头

 2.1.2  v4l2-ctl -d /dev/veoxx --all

查询相机的详细信息   v4l2-ctl  -d  /dev/video11

rk3568_r:/ $ v4l2-ctl -d /dev/video11 --all
Driver Info:
        Driver name      : uvcvideo
        Card type        : USB2.0_ CAM2: USB2.0_ CAM2
        Bus info         : usb-fd800000.usb-1.1
        Driver version   : 4.19.219
        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, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:
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=0 value=0
	    //对比度
                       contrast 0x00980901 (int)    : min=0 max=100 step=1 default=50 value=50
	  //饱和度
                     saturation 0x00980902 (int)    : min=0 max=100 step=1 default=64 value=64
	//色度
                            hue 0x00980903 (int)    : min=-180 max=180 step=1 default=0 value=0
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=100 max=500 step=1 default=300 value=300
           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=55 value=55
	//背光补偿
         backlight_compensation 0x0098091c (int)    : min=0 max=2 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=166 flags=inactive
         exposure_auto_priority 0x009a0903 (bool)   : default=0 value=1
                   pan_absolute 0x009a0908 (int)    : min=-57600 max=57600 step=3600 default=0 value=0
                  tilt_absolute 0x009a0909 (int)    : min=-43200 max=43200 step=3600 default=0 value=0
	//变焦
                  zoom_absolute 0x009a090d (int)    : min=0 max=3 step=1 default=0 value=0

2.1.3 查询指定格式下各种分辨率支持

v4l2-ctl --list-framesizes=MJPG -d /dev/video11

 2.1.4 查看usb摄像头所有可用的分辨率 

v4l2-ctl --list-formats-ext --device /dev/video11

列出了 yuyv /mpeg 支持的多有分辨率 及帧率等

v4l2-ctl --list-formats-ext --device /dev/video11
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)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1024x768
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x960
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1600x1304
                        Interval: Discrete 0.200s (5.000 fps)

        Index       : 1
        Type        : Video Capture
        Pixel Format: 'MJPG' (compressed)
        Name        : Motion-JPEG
                Size: Discrete 640x480
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1024x768
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x960
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x1024
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1600x1200
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1600x1304
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)

 2.1.5 显示摄像头参数

 v4l2-ctl -d /dev/video11 --list-ctrls

2.2 设置相关命令

不是所有相机以下参数设置都支持,修改前先查询,在已知参数属性的基础上修改.

2.2.1 曝光模式

exposure_auto是v4l2-ctl命令中的一个参数,用于设置相机的曝光模式。

exposure_auto的取值可以是以下几种:

  1. Off:自动曝光时间调节处于禁用状态;
  2. Once:曝光时间会自动进行调整,以达到指定的目标值。当达到目标值时,自动功能将自动设为Off,并且新的参数值将应用到后续图像;
  3. Continuous:在采集图像时持续调整曝光时间。调整过程将持续,直到参数设为Once或Off为止。

v4l2-ctl -d /dev/video11 --set-ctrl exposure_auto=3

2.2.2 测试显示信息test_pattern

正常结果

 

2.2.3 增加图片亮度analogue_gain

 而此设备可能是这个参数

打开相机来试试

2.2.3 打开相机并显示

linux可用cheese 显示设备 

cheese -d /dev/video

或 GStreamer/ffmpeg。。

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

2.3 使用v4l2-ctl抓帧

v4l2-ctl -d /dev/video1 --set-fmt-video=width=800,height=600,pixelformat=NV12 --stream-mmap=3 --stream-to=/sdcard/out.yuv --stream-skip=9 --stream-count=1 m-mmap=3 --stream-to=/sdcard/out.yuv --stream-skip=9 --stream-count=1

貌似不支持一次抓怕多张

for i in {1..10}; do
    v4l2-ctl -d /dev/video0 --set-ctrl exposure_absolute=$(($i * 10)) --get-ctrl exposure_absolute --get-fmt-video width --get-fmt-video height --get-fmt-video pixfmt --get-fmt-video field --get-fmt-video timeperframe --get-fmt-video sizeimage --get-fmt-video planes --get-fmt-video depth --get-fmt-video fcc --get-fmt-video tvnorm --get-fmt-video width --get-fmt-video height --get-fmt-video pixfmt --get-fmt-video field --get-fmt-video timeperframe --get-fmt-video sizeimage --get-fmt-video planes --get-fmt-video depth --get-fmt-video fcc --get-fmt-video tvnorm --save /path/to/image-$i.jpg
done

 


 

<think>我们正在处理关于v4l2-ctl工具的使用和配置问题。根据提供的引用,我们可以总结出一些关键信息: 引用[1]展示了使用`v4l2-ctl --list-formats-ext -d /dev/video11`来列出指定视频设备(/dev/video11)支持的格式及其扩展信息。 引用[2]提到了使用`media-ctl`来设置CSI2捕获格式,并指出如果系统有多个视频设备,可能需要通过`--device`指定设备,例如:`v4l2-ctl --device=/dev/videoN --list-ctrls-menus`。 引用[3]给出了安装v4l-utils包的命令(适用于yum包管理器)以及使用v4l2-ctl列出设备和用ffmpeg录制视频的例子。 引用[4]则是一个Makefile示例,用于编译V4L2驱动模块,与v4l2-ctl的直接使用关系不大。 用户的问题是关于v4l2-ctl的使用和配置。因此,我们需要提供v4l2-ctl的常见用法和配置方法。 v4l2-ctl是一个用于控制视频4Linux2(V4L2)设备的命令行工具。它可以用来查询设备能力、设置设备属性(如亮度、对比度等)、设置格式、设置帧率等。 常见的使用场景包括: 1. 列出系统中可用的视频设备。 2. 查询特定设备的功能(支持的格式、分辨率、帧率等)。 3. 设置设备参数(如曝光、白平衡等)。 4. 捕获帧或视频(通常与其他工具如ffmpeg配合)。 根据引用,我们可以整理出以下命令: - 列出设备:`v4l2-ctl --list-devices` (引用[3]) - 列出指定设备的所有控制项和菜单:`v4l2-ctl --device=/dev/videoN --list-ctrls-menus` (引用[2]) - 列出指定设备支持的格式和分辨率、帧率范围:`v4l2-ctl --list-formats-ext -d /dev/videoN` (引用[1]) 此外,还可以设置格式、分辨率、帧率等: - 设置视频格式(像素格式)和分辨率:`v4l2-ctl --device=/dev/videoN --set-fmt-video=width=W,height=H,pixelformat=PIXEL_FORMAT` - 设置帧率:`v4l2-ctl --device=/dev/videoN --set-parm=FRAMERATE` 注意:不同的设备支持的控制项和格式可能不同,因此需要先查询设备支持哪些。 另外,引用[3]还提到了使用ffmpeg录制视频,这通常与v4l2-ctl配合使用,因为我们可以先用v4l2-ctl设置好设备参数,然后用ffmpeg捕获。 因此,回答将包括: 1. 如何安装v4l2-ctl(如果系统未安装)。 2. 如何列出视频设备。 3. 如何查询设备支持的格式和分辨率。 4. 如何设置设备参数(如格式、分辨率、帧率等)。 5. 如何查询和设置控制项(如亮度、对比度等)。 6. 如何配合ffmpeg使用。 由于引用中提供的信息有限,我们将基于常见的v4l2-ctl用法进行补充。 注意:用户可能是在嵌入式环境(如引用[4]中的Makefile所示)中操作,但问题集中在v4l2-ctl的使用上,因此我们主要关注命令的使用。</think>### v4l2-ctl 使用与配置指南 `v4l2-ctl` 是 Linux 下用于控制 V4L2 (Video4Linux2) 视频设备的命令行工具,主要用于摄像头参数配置和状态查询。 #### 🔍 常用操作命令 1. **列出所有视频设备** ```bash v4l2-ctl --list-devices ``` 输出示例: ``` UVC Camera (046d:0825) (usb-0000:00:14.0-1): /dev/video0 /dev/video1 ``` 2. **查询设备支持格式** ```bash v4l2-ctl --device=/dev/video0 --list-formats-ext ``` 输出包含分辨率、帧率范围: ``` [0]: 'YUYV' (YUYV 4:2:2) Size: Stepwise 32x32 - 1280x720 with step 8/8 Frames: 5, 10, 15, 20, 25, 30... ``` 3. **设置分辨率与帧率** ```bash v4l2-ctl --device=/dev/video0 \ --set-fmt-video=width=640,height=480,pixelformat=YUYV \ --set-parm=30 ``` 4. **调整摄像头参数** ```bash # 设置亮度 v4l2-ctl --device=/dev/video0 --set-ctrl=brightness=120 # 查询所有参数 v4l2-ctl --list-ctrls ``` 5. **CSI-2摄像头配置** 需配合 `media-ctl` 设置传感器接口[^2]: ```bash media-ctl --set-v4l2 '"sensor":0[fmt:SBGGR10/1280x720]' ``` #### ⚙️ 配置示例 **配置Logitech摄像头为720p@30fps:** ```bash v4l2-ctl --device=/dev/video0 \ --set-fmt-video=width=1280,height=720,pixelformat=YUYV \ --set-parm=30 ``` **验证配置:** ```bash v4l2-ctl --get-fmt-video --get-parm # 输出: # Width/Height: 1280/720 # Pixel Format: 'YUYV' # Frames per second: 30.000 (30/1) ``` #### 📝 使用技巧 1. **多设备选择** 系统存在多个摄像头时需指定设备路径: ```bash v4l2-ctl --device=/dev/videoN [命令] ``` 2. **录制测试视频** 配合ffmpeg验证配置[^3]: ```bash ffmpeg -f v4l2 -input_format YUYV -video_size 1280x720 \ -framerate 30 -i /dev/video0 output.mp4 ``` 3. **驱动开发调试** 开发V4L2驱动时需确保内核头文件路径正确[^4]: ```makefile KERN_DIR = /usr/src/linux-headers-$(shell uname -r) ``` #### 💡 故障排查 - **无设备列表**:检查摄像头连接或加载驱动 `sudo modprobe uvcvideo` - **格式不支持**:尝试 `pixelformat=MJPEG` 或 `pixelformat=H264` - **权限问题**:将用户加入 `video` 组 `sudo usermod -aG video $USER` > 提示:完整参数手册可通过 `v4l2-ctl --help` 查看,设备支持的功能取决于驱动实现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值