如何使ffmpeg输出帧以正确的速率降至毫秒

时间:2017-01-20 17:02:57

标签: ffmpeg ppm image2pipe

使用ffmpeg,我使用以下命令从udp流(hd264以25 fps)获取帧:

ffmpeg -loglevel debug -i udp://231.20.20.146:2005 -fflags nobuffer -r 1 -preset ultrafast -vf scale = 432:243 -f image2pipe -vcodec ppm pipe:1

在管道的另一端,我正在运行一个非常简单的二进制文件,它输出接收帧的时间。

然而,即使我指定fps 1,帧也会有一些延迟进入管道,延迟时间为100-200ms。

导致这种延迟的原因是什么?它是帧的解码和ppm图像的编码?以及如何强制ffmpeg至少在彼此之间的正确距离发送图像,以便每帧在前一帧之后的1000毫秒到达?

PS。前6帧被缓冲并几乎立即进入管道。以下是记录的ms值的示例:

5350 5368 5385 5493 5599 5676 5785 6221 7243 8235 9218 10219 11227 12268 13268 14242 15288 16219 17297 18222 19284 20272

1 个答案:

答案 0 :(得分:0)

最接近解决方案是在视频过滤器中使用fps:

ffmpeg -analyzeduration 100000 -i udp://231.20.20.146:2005  -r 8 -fflags nobuffer -preset ultrafast -vf "scale=432:243, fps=8, realtime" -f image2pipe -vcodec ppm pipe:1

仍然会有一些关闭1-3毫秒的事件,但这可能是由于cpu缩放或将流转换为ppm ..