ffmpeg - 连续将网络摄像头传输到单个.jpg文件(覆盖)

时间:2013-07-13 14:21:29

标签: stream ffmpeg debian mjpeg

我安装了ffmpeg和mjpeg-streamer。后者从/ tmp / stream读取.jpg文件并通过http将其输出到网站上,因此我可以通过Web浏览器传输该文件夹中的任何内容。

我编写了一个bash脚本,可以连续捕获网络摄像头中的帧并将其放入/ tmp / stream:

while true
do
    ffmpeg -f video4linux2 -i /dev/v4l/by-id/usb-Microsoft_Microsoft_LifeCam_VX-5000-video-index0 -vframes 1 /tmp/stream/pic.jpg
done

这很好用,但速度很慢(~1 fps)。为了加快速度,我希望使用一个单独的ffmpeg命令来连续更新.jpg,让我们说10 fps。我尝试的是以下内容:

ffmpeg -f video4linux2 -r 10 -i /dev/v4l/by-id/usb-Microsoft_Microsoft_LifeCam_VX-5000-video-index0 /tmp/stream/pic.jpg

然而,这 - 可以理解 - 导致错误消息:

[image2 @ 0x1f6c0c0] Could not get frame filename number 2 from pattern '/tmp/stream/pic.jpg'
av_interleaved_write_frame(): Input/output error

...因为输出模式不利于连续的图像流。

是否可以使用ffmpeg流式传输到一个jpg?

...谢谢

2 个答案:

答案 0 :(得分:3)

您可以使用-update选项:

ffmpeg -y -f v4l2 -i /dev/video0 -update 1 -r 1 output.jpg

来自image2 file muxer文档:

-update number

If number is nonzero, the filename will always be interpreted as just a
filename, not a pattern, and this file will be continuously overwritten
with new images.

答案 1 :(得分:2)

通过使用可以实现我想要的目标:

./mjpg_streamer -i "input_uvc.so -r 1280×1024 -d /dev/video0 -y" -o "output_http.so -p 8080 -w ./www"

...来自mjpg_streamer的目录。通过在使用地址时在浏览器中显示流,它将为您完成所有令人讨厌的工作: HTTP:// {IP-OF-THE-SERVER}:8080 / 它的重量也足以在Raspberry Pi上运行。

Here是一个很好的教程,可用于设置它。

感谢您的帮助!