我正在尝试从直播流中提取单个帧,每隔5秒,不使用-vf选项。我使用的是覆盆子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流,这真的很麻烦。
发布于 2017-03-06 18:23:02
因为你的关键帧是每秒一个,而你想要每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上工作。
https://stackoverflow.com/questions/42612315
复制相似问题