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

如何使ffmpeg输出帧的正确速率降至毫秒,ffmpeg,ppm,image2pipe,Ffmpeg,Ppm,Image2pipe,使用ffmpeg,我使用以下命令从udp流(hd264,每秒25帧)获取帧: ffmpeg-logleveldebug-iudp://231.20.20.146:2005 -fflags nobuffer-r 1-预设超快-vf比例=432:243-f图像2管道-vcodec ppm管道:1 在管道的另一端,我运行一个非常简单的二进制文件,它输出接收帧的时间 但是,即使我指定fps 1,帧进入管道也会有一些延迟,延迟为100-200ms 是什么原因造成这一延误?是帧解码还是ppm图像编码?我怎样

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

ffmpeg-logleveldebug-iudp://231.20.20.146:2005 -fflags nobuffer-r 1-预设超快-vf比例=432:243-f图像2管道-vcodec ppm管道: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最接近解决方案的是在视频过滤器中使用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造成的。

最接近的解决方案是在视频过滤器中使用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造成的。

在文档中的
-i
之前尝试
-re
:FFmpeg的“-re”标志意味着“以本机帧速率读取输入。主要用于模拟抓取设备。”即,如果您想要流式传输视频文件,然后,您可能希望使用它,否则它可能会流得太快(默认情况下,它会尝试以线速度流)。我的猜测是,在从实时设备进行流媒体传输时,您通常不想使用此标志。我只是尝试检查,但结果相同,它不起作用,但警告适用于来自实时流的输入。如果您通过网络获取保存的流,那么ffmpeg可以以更快的速度读取它。尝试使用文档中的
-vf realtime
-i
之前尝试使用
-re
:FFmpeg的“-re”标志表示“以本机帧速率读取输入。主要用于模拟抓取设备”。例如,如果您想要流式传输视频文件,则需要使用该标志,否则可能流式传输速度过快(默认情况下,它尝试以线速度流)。我的猜测是,在从实时设备进行流媒体传输时,您通常不希望使用此标志。我只是尝试检查,但结果相同,它不起作用,但警告适用于从实时流中输入。如果您通过网络获取保存的流,则ffmpeg可以以更快的速度读取。请尝试使用
-vf realtime