FFMPEG:每5秒从实时流中提取一个fram

时间:2017-03-05 18:33:31

标签: ffmpeg

我试着在不使用-vf选项的情况下每隔5秒从实时流中提取一个帧。我使用的是Raspberry Pi,因此CPU非常重要。

基本上,我是从实时源流式传输UDP流,它使用的CPU很少,但我想每5秒拍摄一次快照。

这样可行,但只生成一个图像。

-c copy -f mpegts udp://239.0.0.1:1234 -vcodec copy -vframes 1 out.png

这样可行,但使用所有CPU等等。

-c copy -f mpegts udp://239.0.0.1:1234 -vcodec copy -vf fps=1 out%d.png

有人知道我是否可以在不使用过滤器的情况下执行此操作?我的另一个解决方案是运行第二个ffmpeg并连接到UDP流,这非常麻烦。

1 个答案:

答案 0 :(得分:1)

由于您的关键帧是每秒一个,并且您希望每5秒钟一帧,因此需要进行一些过滤,除非您可以删除每5个图像中的4个。

假设关键帧间隔为1 / s,这里是每5秒创建一个帧的模板。

String mySearchString = "paragraph";
Matcher m = Pattern.compile("\\b" + Pattern.quote(mySearchString) + "($| )").matcher(text);

以及将每个关键帧作为图像转储,然后删除不需要的关键帧:

ffmpeg -i ... -c copy -map 0 -f tee "[f=mpegts]udp://239.0.0.1:1234|[f=mpegts]pipe:" | ffmpeg -f mpegts -skip_frame nokey -i pipe: -vf select='not(mod(n,5))' -vsync 0 out%d.png

管道语法ffmpeg -i ... -c copy -map 0 -f tee "[f=mpegts]udp://239.0.0.1:1234|[f=mpegts]pipe:" | ffmpeg -f mpegts -skip_frame nokey -i pipe: -vsync 0 out%d.png 适用于Windows。相信它也适用于linux。