我想通过linux中的网络摄像头捕获图像。 所以我在互联网上搜索并发现它可以使用mplayer或vlc完成。
以下是mplayer捕获图像的命令及其相应的错误。
[root@localhost ~]# mplayer -vo png -frames 1 tv://
MPlayer SVN-r31628-4.4.4 (C) 2000-2010 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
Playing tv://.
TV file format detected.
Selected driver: v4l2
name: Video 4 Linux 2 input
author: Martin Olschewski <olschewski@zpr.uni-koeln.de>
comment: first try, more to come ;-)
v4l2: unable to open '/dev/video0': No such file or directory
v4l2: ioctl set mute failed: Bad file descriptor
v4l2: 0 frames successfully processed, 0 frames dropped.
Exiting... (End of file)
[root@localhost ~]#
请帮我解决此错误。 我在网上搜索并发现了关于v4l2,但仍然无法解决问题。
答案 0 :(得分:2)
你的错误非常清楚。网络摄像头显然没有在/ dev / video0注册。在某些情况下,我发现编码器或其他视频设备在/ dev / videoX下注册,其中X可以是任何整数。尝试修改您的语句以尝试不同的视频设备。
答案 1 :(得分:0)
您也可以尝试使用fswebcam,它具有跳过前几帧的有用功能 - 某些网络摄像头显示第一帧或第二帧的损坏(或绿色)图像:
fswebcam --skip 2
可以将其设置为每秒捕获一次图像:
fswebcam --skip 2 --loop 1
答案 2 :(得分:0)
我是这样做的:
mplayer tv:// -tv driver=v4l2:device=/dev/video0 -fps 1 -frames 2 -sstep 100 -vo jpeg; rm 00000001.jpg ; mv 00000002.jpg capture.$(date +%F_%R).jpg
。
“ tv:// -tv driver=v4l2:device=/dev/video0
”指定必需的驱动程序和视频设备。您需要执行ls /dev/video*
,以检查该设备是您要捕获的设备还是存在的设备。
-fps 1 -frames 2 -sstep 100
指定帧率,并且设置为每秒一帧,以确保您有足够的时间正确唤醒相机,捕获2帧,并且在帧之间,您的输出下降了100 fps,以帮助相机对焦。
-vo jpeg
代表jpg输出格式的图像,在我的计算机上png不适用于所有这种配置。
rm 00000001.jpg
删除第一帧图像,因为它总是模糊不清,呈绿色或没有聚焦,这是由于相机需要少量时间才能唤醒。
mv 00000002.jpg capture.$(date +%F_%R).jpg
从00000002.jpg中获取第二帧图像开关名称为“捕获”。加上当前日期时间。