2016-01-03 29 views
2

我在C语言中有一大块视频处理代码,这似乎是我可以从ffmpeg管道读取字节速率的瓶颈。使用libavformat比使用popen调用ffmpeg更快吗?

我需要解码到fvmpeg或潜在的libav *提供的rawvideo帧。

与使用libav库相比,在fread调用一个受控子进程ffmpeg时是否有很大的开销?

回答

2

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

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