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

标签 c ffmpeg popen libavformat

我有一段用 C 语言编写的视频处理代码,它似乎受到了我从 ffmpeg 管道读取字节的速率的瓶颈。

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

与使用 libav 库相比,对打开的子进程 ffmpeg 进行 fread 调用是否会产生很大的开销?

最佳答案

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

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

关于c - 使用 libavformat 比使用 popen 调用 ffmpeg 更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34573679/

相关文章:

python - netstat 无法与 popen 一起正常工作

python - 从 TextIOWrapper 读取会导致 UnicodeDecodeError

c - Strcmp — 无输入时循环

C语言中使用指针连接字符串

video - HTML5 <audio>/<video> 和 FFMPEG 实时转码

php - 通过 PHP 合并两个视频

c - strerror_r 无效

c - 读取文本文件的 C 程序中的段错误

ffmpeg - 使用 ffmpeg 修复 mpeg 文件

python - 如何在 python 中运行这个 shell 脚本?