4

我想通过 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的信息,但仍然无法解决问题。

4

3 回答 3

2

你的错误很清楚。网络摄像头显然没有在 /dev/video0 注册。在某些情况下,我发现编码器或其他视频设备在 /dev/videoX 下注册,其中 X 可以是任何整数。尝试修改您的陈述以尝试不同的视频设备。

于 2013-09-17T19:42:07.763 回答
0

您还可以尝试使用 fswebcam,它具有跳过前几帧的有用功能 - 一些网络摄像头在第一帧或两帧显示损坏(或绿色)图像:

fswebcam --skip 2 

可以设置为每秒捕获一张图像:

fswebcam --skip 2 --loop 1

于 2014-04-06T10:55:13.490 回答
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 切换名称为“捕获”。加上当前日期时间。

于 2018-09-08T22:07:57.580 回答