我想间歇性地从 Logitech C910 网络摄像头捕获图像。问题是,拍摄一张照片后,相机重置焦点,导致下次拍摄时无法对焦。
我正在使用v4l2-ctl
它来设置焦点。
$v4l2-ctl --device=/dev/video1 --set-ctrl=focus_auto=0
$v4l2-ctl --device=/dev/video1 --set-ctrl=focus_absolute=119
这是我的自动捕获脚本。
#!/bin/bash
while true; do
ffmpeg -f v4l2 -i /dev/video1 -vframes 1 $(date '+%Y%m%d%H%M%S')
sleep 60
done
我尝试使用fswebcam
和streamer
代替 ,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
将焦距设置为 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
...这是我当前的工作脚本,每 60 秒保存一次从我的网络摄像头捕获的聚焦图像。但每次拍摄时,相机中的镜头都会移动,机械装置甚至会发出奇怪的咔嗒声。因为我想用它制作每天拍摄数千张的长延时摄影,我可以想象这会导致相机随着时间的推移过度磨损。所以我仍在寻找不同的方法来做到这一点。注意:当我不进行重新对焦部分时,不会出现咔嗒声。
由于每次相机停止拍摄(并且相机 LED 关闭)时都会重置焦点。我如何才能保持相机流打开并间歇性地保存此流中的图片?还有其他方法可以尝试阻止相机在流结束后重置焦点吗?
// 我希望我没有把这个问题问得太广泛。