如何更改 ffmpeg -threads 设置

16 linux cpu mp4 ffmpeg

管道工地工作。我在linux专用服务器上通过ffmpeg运行视频以转换为mp4

服务器规格:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Stepping:              3
CPU MHz:               3491.749
BogoMIPS:              6983.49
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7
Run Code Online (Sandbox Code Playgroud)

测试期间的问题是,即使一次只做 4-5 个,服务器负载也会飙升至平均 36 个左右。这只是一个人。我想当它打开时,很多人会同时上传。

似乎ffmpeg试图使用每次转换的所有可用资源。

我听说有一个 -threads 设置可以更改,但我找不到它。我有一个 8 cpu 服务器。它仅用于转换,所以我听说最好的设置是 2 到 4。我可以测试一下。

但是如何更改此设置?我在网上看到的所有内容都讨论了此设置,但没有讨论更改它的步骤。

den*_*llo 19

您想要的选项标志真的很简单-threads,您可以像这样使用它(仅用于一个线程):

ffmpeg -i somefile.wmv -c:a libfdk_aac -c:v libx264  -threads 1 transcoded.mp4
Run Code Online (Sandbox Code Playgroud)

但是,有很多微妙之处会增加您的服务器负载和操作时间,例如重新缩放、应用过滤器和最终帧质量/帧速率 - 更不用说某些 VM 架构实际上读取和写入所有内容两次(一次本机并且几乎一次!!!)

以下是一些加快速度的提示:

  1. 使用队列,以便一次只转码一项
  2. 从您的用户那里请求较小的文件
  3. 通过以下方式使用机器的全部马力:
    • 从 ramdisk 读取和写入
    • 切换到裸机进行转码任务
    • -threads 0

无论您做什么,都要让您的用户了解转码过程,因为这需要时间。(IJTT)

[编辑命令以反映 LordNeckbeard 的评论]

  • 期权安置很重要。在输入之前使用`-threads`,您可以将此选项应用于输入(解码器)。一般用法是`ffmpeg [全局选项] [输入选项] -i 输入 [输出选项] 输出`。 (12认同)
  • 作为输出选项,它变成了编码选项。请参阅 [FFmpeg 文档](http://ffmpeg.org/ffmpeg-all.html) 以查看标记为“(全局)”的选项。 (4认同)