【发布时间】:2017-01-20 17:02:56
【问题描述】:
使用 ffmpeg,我正在使用以下命令从 udp 流(25 fps 的 hd264)中获取帧:
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-200 毫秒。
是什么导致了这种延迟?是帧的解码和 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
【问题讨论】:
-
在
-i之前尝试-re -
来自文档:FFmpeg 的“-re”标志意味着“以原生帧速率读取输入。主要用于模拟抓取设备。”即,如果您想流式传输视频文件,那么您会想要使用它,否则它可能会流得太快(默认情况下它会尝试以线速流式传输)。我的猜测是,您通常不想在从实时设备流式传输时使用此标志。
-
我试过只是检查,结果相同
-
好吧,它不起作用,但需要注意的是来自实时流的输入。如果您正在通过网络获取保存的流,那么 ffmpeg 可以以更快的速度读取它。试试
-vf realtime
标签: ffmpeg ppm image2pipe