FFmpeg CPU 使用率低

FFmpeg CPU 使用率低

我正在使用 FFmpeg 将多个文件从 MP4(H264 和 AC3)转换为 MP4(H264 和 AAC),使用命令ffmpeg -i in.mp4 -c:v copy -c:a aac out.mp4

我有一个带超线程的 4 核 CPU,转换时使用率约为 15%。文件位于 SSD 上,磁盘活动约为 3MB/s,因此磁盘似乎不是瓶颈。

当编码开始时,CPU 达到其最大频率,但我没有注意到任何核心的负载超过 50%。

FFmpeg 是否没有充分利用多核?有没有什么方法可以加快编码速度?

答案1

你唯一要编码的是音频,而现有的大多数音频编码库都是单线程的。这很可能是因为音频编码作为单线程应用程序已经非常快了(与视频编码相比),并且它不会占用太多内存,因此使用单线程对每个文件进行编码实际上是可行的,只需启动尽可能多的独立进程即可完全满足 CPU 的需求。考虑到多线程也不一定能带来线性的性能改进,你可能就会明白为什么大多数音频编码器的开发人员不认为多线程是高优先级的。我只知道两个音频编码器实现了多线程 - 用于 MP3 的 LAME MT 和普弗拉克对于 FLAC - 两者都是单独的修改,不属于它们派生项目的主要代码库的一部分。

至于您的 CPU 使用率,使用超线程时,您有 8 个逻辑核心,100% 的八分之一为 12.5%,这与您的 15% 利用率数字相差不大。我不太清楚为什么您的系统没有显示任何核心的 100% 负载,也许操作系统正在将进程在核心之间移动以平衡负载或类似情况。

如果您需要对大量文件进行编码,您可能需要考虑编写一个脚本,启动多个 FFmpeg 进程来同时对多个文件进行编码。我的脚本/编程经验很少,但我知道一个开源工具可以应用相同的逻辑进行图像优化:皮科普特。因此,如果您需要有关如何在 Python 中执行此操作的指针,您可以查看 picopt 的源代码。

答案2

查看ffmpeg -hwaccels

https://ffmpeg.org/ffmpeg.html

-hwaccels列出此 ffmpeg 版本支持的所有硬件加速方法。

-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)
Select a device to use for hardware acceleration.

This option only makes sense when the -hwaccel option is also specified. Its exact meaning depends on the specific hardware

选择的加速方法。

vdpau
For VDPAU, this option specifies the X11 display/screen to use. If this option is not specified, the value of the DISPLAY environment

变量使用

dxva2
For DXVA2, this option should contain the number of the display adapter to use. If this option is not specified, the default adapter

用来。

qsv
For QSV, this option corresponds to the values of MFX_IMPL_* . Allowed values are:

auto
sw
hw
auto_any
hw_any
hw2
hw3
hw4

相关内容