c-使用libavformat比使用popen调用ffmpeg更快吗



我有一块C语言的视频处理代码,它似乎被我从ffmpeg管道读取字节的速度所限制。

我需要对ffmpeg或潜在的libav*提供的原始视频帧进行解码。

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

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

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

最新更新