ffmpeg threads_使用-threads时,FFmpeg使用的线程数超出了我的预期

FFmpeg使用的实际线程数与使用-threads参数传递的数字不对齐.

我在我的MacBook Air(有4个内核)和一个拥有2个内核的VM上运行测试.两台机器使用的线程数一致.

使用单个线程返回我期望的内容:使用1个线程.

$ffmpeg -threads 1 -i clip.mp4 -threads 1 -acodec libfdk_aac -vcodec libx264 -b:v 200k -vf scale=200:-2 -y clip-200.mp4

$cat /proc/$(pgrep ffmpeg)/status | grep Threads

Threads: 1

如果我在输入上设置-threads选项,它会增加用于3的线程数.这对我来说有点意义,因为输入将使用2个线程,输出将使用单个线程.

$ffmpeg -threads 2 -i clip.mp4 -threads 1 -acodec libfdk_aac -vcodec libx264 -b:v 200k -vf scale=200:-2 -y clip-200.mp4

$cat /proc/$(pgrep ffmpeg)/status | grep Threads

Threads: 3

这是我开始感到困惑的地方.相反,我将输入-threads保留为1并将输出-threads设置为2,它使用8个线程(不像我期望的那样3个).

$ffmpeg -threads 1 -i clip.mp4 -threads 2 -acodec libfdk_aac -vcodec libx264 -b:v 200k -vf scale=200:-2 -y clip-200.mp4

cat /proc/$(pgrep ffmpeg)/status | grep Threads

Threads: 8

如果我使用-threads 1添加第二个输出,则不会增加使用的线程数.

$ffmpeg -threads 1 -i clip.mp4 -threads 2 -acodec libfdk_aac -vcodec libx264 -b:v 200k -vf scale=200:-2 -y clip-200.mp4 \

-threads 1 -acodec libfdk_aac -vcodec libx264 -b:v 250k -vf scale=250:-2 -y clip-250.mp4

cat /proc/$(pgrep ffmpeg)/status | grep Threads

Threads: 8

但是,如果第二个输出也指定了两个线程,则线程计数跳转到15.

$ffmpeg -threads 1 -i clip.mp4 -threads 2 -acodec libfdk_aac -vcodec libx264 -b:v 200k -vf scale=200:-2 -y clip-200.mp4 \

-threads 2 -acodec libfdk_aac -vcodec libx264 -b:v 250k -vf scale=250:-2 -y clip-250.mp4

cat /proc/$(pgrep ffmpeg)/status | grep Threads

Threads: 15

超过-threads 2的每个增量冲突将使用额外的3个线程(例如,线程2使用8,线程3使用11,线程4使用14.

因此,似乎任何时候你使用-threads 2公式是这样的:

1 + [ (1 + (3 * output_n_threads)) + ... ]

最后我的问题是为什么使用的实际线程数量与我指定的选项有很大不同.

谢谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值