v4l-utils 包

v4l2-ctl 是 Linux 下调试、配置视频设备(特别是摄像头)非常常用的命令行工具,它来自 v4l-utils 包。下面详细讲讲它的用法、常用选项、例子和注意事项。


🚀 v4l2-ctl 是什么

  • 全名:Video4Linux2 Control
  • 用途:查询设备信息、设置参数(分辨率、帧率、曝光等)、抓取图像帧
  • 适用对象:V4L2 兼容的视频设备,例如 USB UVC 摄像头、CSI 摄像头模块等。

🛠 安装

Debian/Ubuntu:

sudo apt update
sudo apt install v4l-utils

其他发行版:

sudo dnf install v4l-utils   # Fedora
sudo pacman -S v4l-utils     # Arch

🔍 基本用法

1️⃣ 列出所有视频设备

v4l2-ctl --list-devices

输出示例:

Logitech HD Webcam C270 (usb-0000:00:14.0-6):
	/dev/video0
	/dev/video1

2️⃣ 查看设备支持的格式、分辨率

v4l2-ctl --device=/dev/video0 --list-formats-ext

输出示例:

[0]: 'MJPG' (Motion-JPEG)
	Size: Discrete 1280x720
		Interval: Discrete 0.033s (30.000 fps)
	Size: Discrete 640x480
		Interval: Discrete 0.033s (30.000 fps)

说明支持 MJPEG 编码,分辨率和帧率如上。


3️⃣ 查询当前设置

v4l2-ctl --device=/dev/video0 --all

输出会包含:

  • 驱动名、设备能力
  • 当前分辨率、像素格式
  • 亮度、对比度、曝光等参数

4️⃣ 设置参数

✅ 分辨率、帧率:

v4l2-ctl --device=/dev/video0 --set-fmt-video=width=640,height=480,pixelformat=MJPG
v4l2-ctl --device=/dev/video0 --set-parm=30

✅ 曝光(假设摄像头支持):

v4l2-ctl --set-ctrl=exposure_auto=1     # 关闭自动曝光
v4l2-ctl --set-ctrl=exposure_absolute=100

✅ 调整亮度、对比度等:

v4l2-ctl --set-ctrl=brightness=128
v4l2-ctl --set-ctrl=contrast=32

5️⃣ 捕获一帧图像

v4l2-ctl --device=/dev/video0 --set-fmt-video=width=640,height=480 --stream-mmap --stream-count=1 --stream-to=frame.jpg

💡 输出图像文件 frame.jpg


6️⃣ 连续抓帧(调试用)

v4l2-ctl --device=/dev/video0 --stream-mmap --stream-count=100 --stream-to=video.raw

这会抓取 100 帧视频数据(裸流格式)。


🎨 常用选项清单

选项含义
--list-devices列出视频设备及节点
--list-formats / --list-formats-ext列出支持的视频格式和分辨率
--all显示设备全部信息
--set-fmt-video设置视频格式(分辨率、像素格式)
--get-fmt-video查看当前视频格式
--set-parm设置帧率
--get-parm查看帧率
--get-ctrl / --set-ctrl获取或设置控制参数(亮度、曝光等)
--stream-mmap使用内存映射方式抓帧
--stream-to=文件名抓帧数据保存到文件
--stream-count=N抓取 N 帧

⚠️ 注意事项

  • 并非所有摄像头支持所有控制参数,--list-ctrls 可以查看支持的参数。

    v4l2-ctl --list-ctrls
    
  • 如果摄像头只有 YUYV 格式,抓取的图像可能要用工具转换(如 ffmpeg)。

  • USB 带宽和供电不足会导致高分辨率高帧率设置无效。


🌟 一个完整例子

假如你有一个摄像头 /dev/video0,想:

  • 设置 1280x720,MJPEG,30fps
  • 关闭自动曝光,设置固定曝光值
  • 抓一帧保存

可以这样:

v4l2-ctl --device=/dev/video0 --set-fmt-video=width=1280,height=720,pixelformat=MJPG
v4l2-ctl --device=/dev/video0 --set-parm=30
v4l2-ctl --set-ctrl=exposure_auto=1
v4l2-ctl --set-ctrl=exposure_absolute=200
v4l2-ctl --stream-mmap --stream-count=1 --stream-to=frame.jpg

💡 小技巧

  • 配合 ffplay 实时预览:

    ffplay /dev/video0
    
  • 自动化脚本里可以先用 v4l2-ctl 设置参数,再启动视频采集程序。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值