【问题标题】:Is it faster using libavformat over calling ffmpeg with popen?使用 libavformat 是否比使用 popen 调用 ffmpeg 更快?
【发布时间】:2016-04-07 00:49:31
【问题描述】:

我在 C 语言中有一大块视频处理代码,似乎受到我从 ffmpeg 管道读取字节的速率的限制。

我需要解码 ffmpeg 或可能是 libav* 提供的 rawvideo 帧。

与使用 libav 库相比,对弹出的子进程 ffmpeg 的 fread 调用是否有很大的开销?

【问题讨论】:

    标签: c ffmpeg popen libavformat


    【解决方案1】:

    这里有几个方面。首先,为什么您的应用程序似乎受到来自 ffmpeg 管道的输入的限制?答案可能很简单:因为 ffmpeg 占用更多的 CPU(因此是两个应用程序组合的瓶颈)。如果您运行 | b,并且 a 占用更多的 CPU,然后从 b 的角度来看,来自管道的输入很慢。这是合乎逻辑的,因为 a 需要更多时间。对此没有解决方案,ffmpeg 应该占用更多 CPU,因为(取决于什么编解码器/分辨率等),多媒体处理 是一项非常消耗 CPU 的任务.

    其次,使用 C API 代替管道会有帮助吗?这取决于你在做什么。如果您将 ffmpeg 用于相当琐碎的任务,例如从磁盘读取文件而不解压缩(例如未压缩的视频/音频),那么是的,管道的开销相当大。如果 ffmpeg 解压缩 H264/HEVC 或 VP9 视频,您不太可能从这一举措中看到收益,或者它们至少会很小(1% 范围),因为大部分时间都花在解码视频上。数据的复制/传输几乎可以忽略不计。所以在那种情况下,问题是:1%值得吗?这由您决定。

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 2011-06-16
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多