ffmpeg 默认使用多少个线程?

ffmpeg 默认使用多少个线程?

我看到 ffmpeg 中有一个-threads <count>命令行选项。这个选项的默认值是什么?

答案1

这取决于使用的编解码器、ffmpeg 版本和 CPU 核心数。有时每个核心只有一个线程。有时更复杂,例如:

对于 libx264,框架线程有核心 x 1.5,切片线程有核心 x 1。

答案2

截至 2014 年,它使用最佳数字。

你可以在多核计算机上通过top使用不同的 ffmpeg 选项检查 CPU 负载(Linux:,Windows:任务管理器)来验证这一点:

  • -threads 0(最佳的);

  • -threads 1(单线程);

  • -threads 2(例如 Intel Core 2 Duo 有 2 个线程);

  • 无(默认值,也是最佳的)。

2015年编辑:在 12 核 CPU 上,top无论给出的数字是多少,某些 ffmpeg 命令都会使 Linux 显示最多 200% 的 CPU(仅 2 个内核)-threads。因此,默认值在“此 ffmpeg 二进制文件可以达到的最佳效果”的意义上仍然是最佳的,但在“充分利用我的 leet CPU”的意义上并不是最佳的。

答案3

其中一些答案有点过时了,我只想补充一点ffmpeg 4.1,使用我的编码libx264,我的 Ryzen 5 2600X 系统的所有 6 个核心/12 个线程都毫无-thread争议地达到了最大值。

答案4

我在 CentOS 6.5 VM(Ryzen 1700 8c/16t - VM 分配了 16 个核心中的 12 个)中进行转换。对 480p 电影的实验结果如下:

线程选项/转换率 (fps @ 60 秒)

(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps

有趣的部分是 CPU 负载(用来htop观察)。
不使用任何-threads选项最终会达到 130fps 范围,负载以低负载水平分散在所有核心上。
使用 1 个线程确实如此,将一个核心加载到 100%。使用其他任何选项都会导致另一种分散负载的情况。

如您所见,还有一个收益递减点,因此您必须针对特定机器调整 -threads 选项。具体到我的设置,使用 -threads 6(在 12 核机器上)在转换视频时(从 h264 到 x264,以不同的比特率强制转换)可获得最佳 FPS,而我投入的线程越多,收益实际上就越少。

这也可能是内存问题 - 只为虚拟机分配了 1GB。我可能会调整一下,看看是否有什么变化。不过 - 它确实表明使用该-threads选项可以提高性能,因此请在您的特定机器上以不同的级别运行一些测试,以找到您的设置最佳点。

相关内容