我在C中有一大块视频处理代码,这似乎是我从ffmpeg管道读取字节的速度所致。
我需要解码为ffmpeg提供的rawvideo帧或者可能是libav *。
与使用libav库相比,使用popened子进程ffmpeg进行fread调用会有很大的开销吗?
答案 0 :(得分:2)
这里有几个方面。首先,为什么您的应用程序似乎受到ffmpeg管道输入的瓶颈?答案可能很简单:因为ffmpeg需要更多的CPU(因此是两个应用程序组合的瓶颈)。如果你运行| b,并且需要更多的CPU,然后从b的角度来看,来自管道的输入很慢。这是合乎逻辑的,因为需要更多时间。没有解决方案,ffmpeg 假设需要更多CPU,因为(取决于编解码器/分辨率等),多媒体处理 是一项非常耗费CPU的任务
其次,是否会使用C API代替管道帮助?这取决于你在做什么。如果您正在使用ffmpeg执行相当简单的任务,例如从磁盘读取文件而不进行解压缩(例如未压缩的视频/音频),那么是,管道的开销相当大。如果ffmpeg解压缩H264 / HEVC或VP9视频,你不太可能看到这一移动的收益,或者它们至少会很小(1%范围),因为大部分时间用于解码视频。数据的复制/传输几乎可以忽略不计。那么在这种情况下,问题是:1%的价值吗?这取决于你决定。