首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FFMPEG:每5秒从直播流中提取一帧

FFMPEG:每5秒从直播流中提取一帧
EN

Stack Overflow用户
提问于 2017-03-06 02:33:31
回答 1查看 2K关注 0票数 1

我正在尝试从直播流中提取单个帧,每隔5秒,不使用-vf选项。我使用的是覆盆子Pi,所以CPU非常重要。

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

这是可行的,但只会产生一个图像。

代码语言:javascript
运行
复制
-c copy -f mpegts udp://239.0.0.1:1234 -vcodec copy -vframes 1 out.png

这是可行的,但是会占用所有的CPU甚至更多。

代码语言:javascript
运行
复制
-c copy -f mpegts udp://239.0.0.1:1234 -vcodec copy -vf fps=1 out%d.png

谁知道我能不能不用过滤器就做到这一点?我的另一个解决方案是运行第二个ffmpeg并连接到UDP流,这真的很麻烦。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-06 18:23:02

因为你的关键帧是每秒一个,而你想要每5秒一个帧,所以需要一些过滤,除非你同意删除每5个创建的图像中的4个。

下面的模板每5秒创建一帧,假设关键帧间隔为1/s。

代码语言:javascript
运行
复制
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

这里用于将每个关键帧作为图像进行转储,然后删除不需要的关键帧:

代码语言:javascript
运行
复制
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

管道语法pipe:在Windows上运行。我相信它应该也能在linux上工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42612315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档