罗技网络摄像头 - 焦点重置

Luk*_*kas 6 video webcam capture logitech

我想定期从 Logitech C910 网络摄像头捕获图像。问题是,拍摄一张照片后,相机会重置焦点,导致下一张照片无法对焦。

我用来v4l2-ctl设置焦点。

$v4l2-ctl --device=/dev/video1 --set-ctrl=focus_auto=0
$v4l2-ctl --device=/dev/video1 --set-ctrl=focus_absolute=119
Run Code Online (Sandbox Code Playgroud)

这是我的自动捕获脚本。

#!/bin/bash
while true; do
  ffmpeg -f v4l2 -i /dev/video1 -vframes 1 $(date '+%Y%m%d%H%M%S')
  sleep 60
done
Run Code Online (Sandbox Code Playgroud)

我尝试使用fswebcamandstreamer代替,但ffmpeg结果相同。每次拍摄时焦点都会重置。

从网络摄像头播放视频$mpv /dev/video1也会在播放器关闭后重置焦点。

当使用 检查当前值时,在进行第一次和第二次拍摄后v4l2-ctl --list-ctrls的值保持不变。focus_absolute但第二个的输出没有重点。

$v4l2-ctl -d /dev/video1 --list-ctrls
...
focus_absolute 0x009a090a (int) : min=0 max=255 step=17 default=68 value=119
focus_auto 0x009a090c (bool)    : default=1 value=0
Run Code Online (Sandbox Code Playgroud)

将焦点设置为 119 进行第一次拍摄,再次将焦点设置为 119 进行第二次拍摄也会导致第二张图像未对焦。然而,如果在拍摄第一张照片后我将焦点更改为其他值,然后又返回到 119,则两张图像都会对焦。

#!/bin/bash
# Set Manual Focus
v4l2-ctl --device=/dev/video1 --set-ctrl=focus_auto=0
# Infinite Loop
while true; do
  # Reset Focus
  v4l2-ctl --device=/dev/video1 --set-ctrl=focus_absolute=136
  v4l2-ctl --device=/dev/video1 --set-ctrl=focus_absolute=119
  # Save Image
  ffmpeg -f v4l2 -i /dev/video1 -vframes 1 $(date '+%Y%m%d%H%M%S')
  # Wait
  sleep 60
done
Run Code Online (Sandbox Code Playgroud)

...这是我当前的工作脚本,每 60 秒保存一次从网络摄像头捕获的聚焦图像。但是,每次拍摄时,相机中的镜头都会移动,机械装置甚至会发出奇怪的咔哒声。由于我想用它来制作每天数千张照片的长时间延时拍摄,我可以想象这会导致相机随着时间的推移而过度磨损。所以我仍在寻找不同的方法来做到这一点。注意:当我不执行重新对焦部分时,不会出现咔嗒声。

由于每次相机停止拍摄(并且相机 LED 关闭)时都会发生焦点重置。如何保持相机流打开并定期保存该流中的图片?还有其他方法可以尝试阻止相机在流结束后重置焦点吗?

// 我希望我没有把问题问得太广泛。