我看到 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
选项可以提高性能,因此请在您的特定机器上以不同的级别运行一些测试,以找到您的设置最佳点。