【问题标题】:how to make ffmpeg output frames at correct rate down to millisecond如何使ffmpeg以正确的速率输出帧到毫秒
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2013-08-19
    • 2021-07-07
    • 1970-01-01
    相关资源
    最近更新 更多