如何更改ffmpeg -threads设置


14

试管现场工作。我正在通过ffmpegLinux专用服务器上运行视频以转换为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

测试期间的问题是,即使一次只执行4到5次,服务器也会将飞船平均加载到36左右。这只是一个人。我想当它打开时,会有很多人一次上传。

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

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

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

linux  ffmpeg  cpu  mp4 

Answers:


17

您想要的选项标志实际上是正义的-threads,您可以像这样使用它(仅用于一个线程):

ffmpeg -i somefile.wmv -c:a libfdk_aac -c:v libx264  -threads 1 transcoded.mp4

但是,有很多微妙之处会增加服务器负载和运算时间,例如重新缩放,应用过滤器和最终帧质量/帧率-更不用说某些VM架构实际上两次读写所有内容(本机一次)然后一次虚拟!!!)

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

  1. 使用队列,以便一次仅对一项进行转码
  2. 向用户请求较小的文件
  3. 通过以下方式使用机器的全部功能:
    • 从虚拟磁盘读取和写入
    • 切换到裸机进行转码任务
    • 采用 -threads 0

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

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


10
期权的放置很重要。随着-threads你申请这个选项,输入(解码器)的输入之前。通用用法是ffmpeg [global options] [input options] -i input [output options] output
llogan 2014年

那么您建议将其放置在哪里?我以为一开始它在全球范围内应用?
denjello 2014年

3
作为输出选项,因此它成为编码选项。请参阅FFmpeg文档以查看哪些选项标记为(global)
llogan 2014年

-threadsarg 放在arg之前还是之后有关系-i吗?另外,我应该如何确定应该使用多少个线程?我基本上是在做-c copy
弯曲的是

3

这可能有点旧,但这对于像docker这样的容器来说听起来像是一项完美的任务。

  • 让ffmpeg运行 full horsepower(如denjello所说)
  • 但让它在docker内部运行

现在,您甚至可以在不使用ffmpeg命令行选项的情况下,限制单个ffmpeg实例可能消耗的资源。不仅是cpu,还有内存和IO。

甚至更多:也许您有不同的任务可能在后台运行,而您不在乎它们花了多长时间,而您又有一些任务应该快速运行,所以您可以重点考虑不同的任务。

参见https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources

github上已经有预定义的ffmpeg图像:https : //github.com/jrottenberg/ffmpeg

docker run jrottenberg/ffmpeg \
        -i http://url/to/media.mp4 \
        -stats \
        $ffmpeg_options  - > out.mp4

由于开销,单个转换的运行速度可能会变慢,但是如果同时运行多个实例,这将是一个巨大的好处。任何这一切都将很好地扩展,更不用说提高了安全性,因为每个任务都与底层操作系统隔离。


在docker内部运行不是有点极端吗?实际上,还有许多其他更好的方法可以限制Linuxscoutapm.com/blog/…
yurtesen

为什么?考虑到您已经安装了docker,运行带有--rm标志的容器来执行任务,并在退出后删除该容器,这是管理员在2019年应该做的完全正常的事情。尤其是对于文档转换之类的事情。转换失败?尝试另一个转换器版本而不升级/降级您的本地工具链吗?您不信任该文档,因为它是从Internet下载的?将任务隔离在容器中。Ffmpeg也不例外。cvedetails.com/vulnerability-list/vendor_id-3611/Ffmpeg.html
于尔根Steinblock

这听起来像是营销谈话。Docker并不像您所说的那样完美-> techbeacon.com/security/… 在Linux中,普通用户还享有有限的访问权限和系统安全性。程序版本降级的需求非常少,可以通过存储库来完成。许多泊坞窗图片是由随机人制作的。可能是文档转换器docker映像遭到破坏,并将所有文档的副本发送到远程服务器。因此,使用Docker映像会增加此类漏洞的可能性。然后怎样呢?
yurtesen

Perhaps the document converter docker image was compromised and sent copy of all your documents to a remote server. So, using docker images increase possibility such vulnerability. What then?检出存储库,调查dockerfile并用于docker build -t myimage自己创建本地映像。或创建自己的dockerfile,这不是火箭科学github.com/alfg/docker-ffmpeg/blob/master/Dockerfile
于尔根Steinblock
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.