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

标签 ffmpeg

我正在尝试从实时流中提取单个帧,每 5 秒不使用 -vf 选项。我使用的是 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流,这确实很麻烦。

最佳答案

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

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

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

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

关于FFMPEG:每 5 秒从实时流中提取一帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42612315/

相关文章:

ffmpeg rtsp_transport 到 rtmp 问题

python - MoviePy,使用 gif 作为 ImageClip?

video - 为 RTSP/RTP 流构建视频录像机的经验?

c++ - 如何将解码缓冲区从 ffmpeg 映射到 QVideoFrame?

amazon-web-services - 将输出文件保存到 AWS S3 存储桶中

android - Android Studio 中的 ffmpeg

FFMPEG - 流式传输到 RTMP 输出并同时保存到 MP4 - 重新连接

ffmpeg youtube 直播不工作

ffmpeg - 在ffmpeg中水平转动屏幕时遇到问题

ffmpeg 操作不允许在 rtmp 上使用