概括

概括

我有一个 USB 网络摄像头,当我插入它时,它给出的结果不是最佳的(Linux 似乎应用了它自己的 V4L2 设置,它认为这是最好的,但事实并非如此)。主要是它以较低的 FPS 运行。但如果我打开 Guvcview,在菜单中选择“设置”->“硬件默认值”,并添加一些小的修改,我可以获得更高的 FPS 和整体更好的质量。

如果我关闭 Guvcview 并再次打开它,Guvcview 中的设置将被重置,但我所做的更改在视频聊天软件等其他应用程序中仍然有效。但是,如果我拔掉网络摄像头,所有更改都会丢失,并且再次插入后,质量再次变差。

我现在要做的是将 Guvcview 中的更改保存为 .gpfl 文件(菜单 -> “设置” -> “保存配置文件”),每当我重新连接网络摄像头时,我都会打开 Guvcview 并使用“加载配置文件”加载配置文件”。

如何使这些设置持续存在,以便我永远不必再次执行此操作,并将它们仅应用于此特定视频设备而不应用于其他设备?

答案1

你不能。所有摄像机在断电后都会恢复默认设置。 (即重新插入、重新启动电脑等)这是硬件的本质。

答案2

试试这个❗(如果您还没有……)我已经使用 Logitech C920 在 Debian 11 和 Ubuntu 22.04 上进行了测试。我每天都在 Debian 系统上使用它。总的来说,我拒绝相信 Linux 中“不能”做的事情。

概括

  1. 找出您的 Linux 设备的名称
  2. 创建要在登录时运行的脚本
  3. 指向 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 版本来启动!

相关内容