pet*_*etr 4 linux webcam debian v4l2 raspberry-pi
我的 Logitech 摄像头 (C300) 已被正确检测并显示在 /dev/video0。但是,默认情况下,图像的对比度和饱和度设置为最大值,这会显着降低图像质量。我可以使用 guvcview 更改设置,但退出后设置恢复正常(我使用 mplayer 捕获帧)。如何使我在 guvcview 中所做的更改永久化?
编辑:
看起来 guvcview 的设置确实是“粘性的”——如果我再次打开它,图像保持不变。所以这是其他程序对网络摄像头的初始化所做的事情(mplayer 和 vlc 上的问题相同)
首先是坏消息:我所知道的任何发行版中目前都没有内置的解决方案可以做到这一点。
好消息是,这样的解决方案非常容易实现,并且可以适用于许多类似的问题:我们只需要使用一点 udev 和 bash。
首先,我们需要一种编程(脚本友好)的方式来设置这些设置。我最喜欢的是v4l2ctrl,因为它可以保存 V4L2 配置,然后按需恢复。例如:
然后,将相机设置保存到文件中。(-d /dev/video0是可选的,但如果您有不止一台相机,则很有用。)
v4l2ctrl -d /dev/video0 -s camera-settings.txt
Run Code Online (Sandbox Code Playgroud)如果您拔下并再次插入,设置将丢失,但现在我们可以恢复它们:
v4l2ctrl -d /dev/video0 -l camera-settings.txt
Run Code Online (Sandbox Code Playgroud)一旦你让它像那样工作,就该用 udev 自动化它了。为此,我们将创建一个与相机匹配的我们喜欢的规则文件。该文件可以被调用/etc/udev/rules.d/99-v4l2-default-settings.rules并包含如下内容:
SUBSYSTEM=="video4linux", ATTR{name}=="HD Pro Webcam C920", RUN+="/etc/camera-defaults/udev-hook.sh"
Run Code Online (Sandbox Code Playgroud)
/etc/camera-defaults/udev-hook.sh 每当video4linux检测到或拔下制造商名称为“HD Pro Webcam C920”的子系统设备时,上述脚本将以 root 身份运行,我们将很快创建该脚本。
我们可以向我们的规则添加许多不同的过滤器。您可以使用udevadm info -a -p $(udevadm info -q path -n /dev/video0)获取设备及其父设备的所有可能变量。
最后,创建脚本。这里有一些简单的东西会起作用。给它执行权限!
#!/bin/bash
set -eu
# Useful for debugging, if you want to check what variables are available:
# set > /tmp/vars
if [ "$ACTION" == "add" ]; then
v4l2ctrl -d "$DEVNAME" -l "/etc/camera-defaults/camera-settings.txt"
fi
Run Code Online (Sandbox Code Playgroud)
移动camera-settings.txt到指定目录,拔掉再插。该文件中的设置应该已成功恢复。
将来任何时候您需要永久保存您的设置,使用您最喜欢的程序来调整它们,然后运行:
v4l2ctrl -s /etc/camera-defaults/camera-settings.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7476 次 |
| 最近记录: |