ffmpeg捕获当前帧并覆盖图像输出文件

时间:2014-08-18 09:48:39

标签: bash ffmpeg

我试图每秒从RTSP流URL中提取图像文件(也可能每1分钟一次)并覆盖此图像文件。

我的下面的代码有效,但它输出到多个图像jpg文件:img1.jpg, img2.jpg, img3.jpg...

ffmpeg -i rtsp://IP_ADDRESS/live.sdp -f image2 -r 1 img%01d.jpg

如何在Linux中使用ffmpeg或bash脚本来覆盖相同的图像文件,同时以不高频率(例如1分钟或10秒)连续提取图像?

4 个答案:

答案 0 :(得分:13)

以下命令行应该适合您。

ffmpeg -i rtsp://IP_ADDRESS/live.sdp -f image2 -updatefirst 1 img.jpg

答案 1 :(得分:8)

详细说明来自accepted answer的已pragnesh

FFmpeg的

正如ffmpeg documentation所述: ffmpeg命令行选项指定为

ffmpeg [global_options] {[input_options] -i input_file} ... {[output_options] output_file} ...

所以

ffmpeg -i rtsp://<rtsp_source_addr> -f image2 -update 1 img.jpg

使用output option -f image2,强制输出格式为image2格式,作为多路复用器阶段的一部分。

  • 请注意,在ffmpeg中,如果输出文件名指定图像格式,默认情况下将使用image2 muxer,因此该命令可以缩短为:

    ffmpeg -i rtsp://<rtsp_source_addr> -update 1 img.jpg

image2 format muxer期望文件名模式(例如img%01d.jpg)生成按顺序编号的文件系列。如果update option设置为1,则文件名将被解释为文件名,而不是模式,从而覆盖同一文件。

使用 -r ,设置帧率,video option有效,但是生成了大量丢帧消息,这些消息让我烦恼。

感谢another answer on the same topic,我发现fps Video Filter可以做得更好。

所以我的工作命令版本是

ffmpeg -i rtsp://<rtsp_source_addr> -vf fps=fps=1/20 -update 1 img.jpg

由于某些原因,我仍然不知道我可以通过我的Feed获得的最低帧率是1/20或0.05。

还存在视频过滤器缩略图,它从一系列帧中选择一个图像,但这是处理密集型的,因此我不推荐它。

我在FFMpeg Online Documentation

上找到了大部分内容和更多内容

AVconv

对于那些使用avconv的人来说,它非常相似。它们毕竟是曾经是一个普通图书馆的分支。 AVconv image2 documentation is found here

avconv -i rtsp://<rtsp_source_addr> -vf fps=fps=1/20 -update 1 img.jpg

正如仙林指出的那样,可能还有其他一些有趣的选择:

-an :禁用录音。

-r &lt; fps&gt; :设置帧率

导致备用版本:

avconv -i rtsp://<rtsp_source_addr> -r 1/20 -an -update 1 img.jpg

希望有助于理解可能的进一步调整;)

答案 2 :(得分:0)

每隔10秒从RTSP视频流中抓取一张快照。

#!/bin/bash
#fetch-snapshots.sh
url='rtsp://IP_ADDRESS/live.sdp'
avconv -i $url -r 0.1 -vsync 1 -qscale 1 -f image2 images%09d.jpg

-r rate将帧速率设置为每秒0.1帧(这相当于每10秒1帧)。 感谢westonruter,请参阅https://gist.github.com/westonruter/4508842

此外,请查看FFMPEG: Extracting 20 images from a video of variable length

答案 3 :(得分:0)

我无法获得选项-update来覆盖.jpg。做一些实验得出了一个可行的解决方案(至少对我而言),最后带有-y选项(大写不起作用)。我还需要使用http://而不是rstp://来安装此相机。

ffmpeg -i http://xx:yy@192.168.1.xx:yyy/snapshot.cgi /tmp/Capture2.jpg -y