Число фактических потоков, используемых FFmpeg, не совпадает с числом, которое я передаю, используя аргумент -threads
.FFmpeg использует больше потоков, чем я ожидаю при использовании -threads
Я проверил тесты на моем MacBook Air, который имеет 4 ядра, и VM, у меня есть 2 ядра. Количество используемых потоков согласовано на обеих машинах.
Использование одного потока возвращает то, что я ожидаю: используется 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 темы (например, threads 2
использует 8, threads 3
использует 11, threads 4
использует 14.
Так что, похоже, как в любое время вы используете -threads 2
формула что-то вроде:
1 + [ (1 + (3 * output_n_threads)) + ... ]
В конечном счете, мой вопрос заключается в том, почему количество фактических потоков, используемых дико отличается от опций, которые я указываю.
Спасибо.