我有一个 USB 网络摄像头,当我插入它时,它给出的结果不是最佳的(Linux 似乎应用了它自己的 V4L2 设置,它认为这是最好的,但事实并非如此)。主要是它以较低的 FPS 运行。但如果我打开 Guvcview,在菜单中选择“设置”->“硬件默认值”,并添加一些小的修改,我可以获得更高的 FPS 和整体更好的质量。
如果我关闭 Guvcview 并再次打开它,Guvcview 中的设置将被重置,但我所做的更改在视频聊天软件等其他应用程序中仍然有效。但是,如果我拔掉网络摄像头,所有更改都会丢失,并且再次插入后,质量再次变差。
我现在要做的是将 Guvcview 中的更改保存为 .gpfl 文件(菜单 -> “设置” -> “保存配置文件”),每当我重新连接网络摄像头时,我都会打开 Guvcview 并使用“加载配置文件”加载配置文件”。
如何使这些设置持续存在,以便我永远不必再次执行此操作,并将它们仅应用于此特定视频设备而不应用于其他设备?
答案1
你不能。所有摄像机在断电后都会恢复默认设置。 (即重新插入、重新启动电脑等)这是硬件的本质。
答案2
试试这个❗(如果您还没有……)我已经使用 Logitech C920 在 Debian 11 和 Ubuntu 22.04 上进行了测试。我每天都在 Debian 系统上使用它。总的来说,我拒绝相信 Linux 中“不能”做的事情。
概括
- 找出您的 Linux 设备的名称
- 创建要在登录时运行的脚本
- 指向 Linux 自动启动中的脚本
细节
找出您的 Linux 设备的名称
在终端中:如果没有,请安装v4l-utils。然后运行以下命令:
v4l2-ctl --list-devices
您将看到类似于以下内容的输出:
HD Pro Webcam C920 (usb-0000:00:14.0-10.3):
/dev/video2
/dev/video3
/dev/media1
USB Video: USB Video (usb-0000:00:14.0-10.4):
/dev/video4
/dev/video5
/dev/media2
就我而言,使用网络摄像头 (Logitech C920),/dev/video2
因此我将在接下来的脚本中指定这一点。
创建要在登录时运行的 bash 脚本
做这件事有很多种方法。这里有两个:
获得权限后sudo
,将脚本放入/usr/local/bin
.我命名我的c920.sh
选项 1:使用 guvcview
例子:
#!/bin/bash
sleep 10
guvcview -d /dev/video2 --profile=<profile_name>.gpfl &
sleep 1
pkill -f "guvcview"
将配置文件名称更改为您保存配置文件的名称并包含路径。
该脚本运行 guvcview 并使用正确的配置文件指定所需的设备。我在那里添加了一些睡眠时间,以防您在登录时启动很多事情。根据您的需要进行调整。然后,脚本终止 guvcview 进程。就是这样。
man guvcview
有很多好东西。
选项 2:使用 v4l-utils
#!/bin/bash
sleep 10
v4l2-ctl -d /dev/video2 -c brightness=125
v4l2-ctl -d /dev/video2 -c contrast=126
v4l2-ctl -d /dev/video2 -c saturation=115
v4l2-ctl -d /dev/video2 -c white_balance_temperature_auto=0
v4l2-ctl -d /dev/video2 -c gain=175
v4l2-ctl -d /dev/video2 -c power_line_frequency=2
v4l2-ctl -d /dev/video2 -c white_balance_temperature=4515
v4l2-ctl -d /dev/video2 -c sharpness=128
v4l2-ctl -d /dev/video2 -c backlight_compensation=0
v4l2-ctl -d /dev/video2 -c exposure_auto=1
v4l2-ctl -d /dev/video2 -c exposure_absolute=250
v4l2-ctl -d /dev/video2 -c exposure_auto_priority=0
v4l2-ctl -d /dev/video2 -c focus_auto=0
注意:该程序具有截至 1/2024 的较新版本,具有不同的控件名称。有关新配置,请参阅本文末尾。
注意:我给出第二个选项是因为guvc视图可能与其他程序冲突并给出不同的结果。尝试一次仅使用一个网络摄像头配置程序。也就是说,如果您确实遇到冲突(设置突然更改值,例如增益),那么您可以找到您最喜欢的设置guvc视图,然后卸载该程序,并使用以下命令配置您的设置v4l-utils如上图所示。 vl4 实际上是我使用的,这些设置在我的实验室(深色背景)中有效,但您可能需要调整它们!此外,他们没有考虑分辨率和 FPS。但如果你用另一个程序设置这些,它们应该保留在 Linux 的“内存”中。
将脚本设置为可执行:chmod +x c920.sh
指向 Linux 自动启动中的脚本
有多种方法可以做到这一点。我在这里使用桌面条目:转到/etc/xdg/autostart
并创建一个 .desktop 文件。我选择c920.desktop
作为名字。
添加以下内容:
[Desktop Entry]
Type=Application
Exec=/usr/local/bin/c920.sh
尝试注销并重新启动。确保它有效
该解决方案只是一种可能性。在Linux中,有好几个!
请注意,如果您有多个视频设备和多个路径,您可能会遇到不稳定的问题。准备好排除故障!通常这意味着两个网络摄像头配置程序存在冲突。人们还可以考虑研究 udev 规则,或者 Linux 中带有服务的单元文件。请参阅下面的链接了解更多信息。有人提到将脚本(命令)放在 .bashrc 中,但这是有问题的,因为每次打开 bash shell/终端时它都会运行,除非您将其合并到 for 循环中。另外,有些人使用 C922 和/或 Brio(尤其是在 Ubuntu 上)运气更好。
这个链接v4l-utils
一般而言,有关于在 Linux 中使用和网络摄像头设置的大量信息。
最后说明:在理想的世界中,Logitech、Razer、Rode 等公司会拥抱 Linux 社区。我认为简单的 GUI 界面和驱动程序的要求并不高。我会选择 .deb 版本来启动!