树莓派用v4l2与fswebcam拍摄时手动摄像头参数不生效问题咨询
解决方案
你遇到的参数不生效核心原因是fswebcam启动时会默认重置罗技C920的V4L2参数,你提前用v4l2-ctl设置的参数会被覆盖,不需要分开调用,直接把参数内嵌到fswebcam命令里即可。
具体修改方案
方案1:直接在fswebcam中嵌入参数(最稳定,适配C920)
所有摄像头参数用--set参数直接跟在fswebcam命令后,不需要提前调用v4l2-ctl,修改后的脚本如下:
注意:你原来的两次拍摄用了同一个#!/bin/bash DATE=$(date +"%y%m%d%H%M%S") SAVE_PATH="/media/networkshare/public/Temp Photo Holder SolidScape Right/" # 单次设置所有参数+拍摄,自动对焦相关参数需要时取消注释即可 sudo fswebcam -d /dev/video0 \ -r 1920x1080 \ --no-banner \ --set "focus_auto=false" \ --set "focus_absolute=35" \ --set "brightness=128" \ --set "contrast=128" \ --set "saturation=128" \ --set "gain=15" \ --set "sharpness=128" \ --set "exposure_auto_priority=1" \ "${SAVE_PATH}/timelapse_${DATE}_1.jpg" # 后续拍摄不需要重复设置参数,短时间内参数会保持 sleep 9 sudo fswebcam -d /dev/video0 -r 1920x1080 --no-banner "${SAVE_PATH}/timelapse_${DATE}_2.jpg" sleep 9$DATE变量,会导致后拍的照片覆盖前一张,这里给文件名加了后缀区分,不需要的话可以自行调整。方案2:保留v4l2-ctl调用的适配方法
如果要保留提前用v4l2-ctl设置的逻辑,需要给fswebcam加--no-controls参数,禁止fswebcam重置摄像头参数:# 原来的v4l2-ctl设置部分保留不变 sudo v4l2-ctl -d /dev/video0 -c brightness=128 sudo v4l2-ctl -d /dev/video0 -c contrast=128 # 其余参数设置不变,sleep 2也保留 sleep 2 sudo v4l2-ctl -c exposure_auto_priority=1 # 拍摄时加--no-controls参数 sudo fswebcam -d /dev/video0 -r 1920x1080 --no-banner --no-controls /path/to/save.jpg
额外注意事项
- 罗技C920的手动对焦生效前提是必须先关闭自动对焦,如果你要固定对焦,记得取消脚本里两行对焦参数的注释
- 测试参数时可以先单独运行
v4l2-ctl -d /dev/video0 --list-ctrls确认所有参数的可选值范围,避免设置超出范围的无效值
内容的提问来源于stack exchange,提问作者Mikey
相关产品推荐
相关产品推荐

