37

Я вижу, что в ffmpeg есть опция командной строки -threads <count> . Какое значение по умолчанию для этой опции?

6 ответов6

22

это зависит от используемого кодека, версии ffmpeg и количества ядер вашего процессора. Иногда это просто один поток на ядро. Иногда это сложнее, как:

В libx264 это ядра x 1,5 для потоков кадров и ядра x 1 для потоков срезов.

17

По состоянию на 2014 год он использует оптимальное количество.

Вы можете проверить это на многоядерном компьютере, изучив загрузку процессора (Linux: top , Windows: диспетчер задач) с различными параметрами ffmpeg:

  • -threads 0 (оптимальный);

  • -threads 1 (однопоточная);

  • -threads 2 (2 потока, например, для Intel Core 2 Duo);

  • нет (по умолчанию, также оптимально).

Редактирование 2015 года: на 12-ядерном процессоре некоторые команды ffmpeg имеют top Linux, показывающий максимум 200% процессорного времени (только 2 ядра), независимо от того, какое число задано для -threads . Таким образом, значение по умолчанию может быть оптимальным в смысле «настолько хорошим, насколько этот двоичный файл ffmpeg может быть получен», но не оптимальным в смысле "полного использования моего процессора Leet".

4

В 2015 году на Ubuntu 14.04 с ffmpeg 0.8.10-6 она использовала 1 ядро в 4-ядерной системе. htop показал это; использовалось только одно ядро, и я получил скорость преобразования 16 кадров в секунду для видео FullHD.

Использование -threads 4 позволило всем ядрам моего процессора перейти на 100%, и я получил коэффициент конверсии 47 кадров в секунду.

Я использовал следующую команду:

$ ffmpeg -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg
3

Я играл с конвертированием на CentOS 6.5 VM (Ryzen 1700 8c/16t - vm назначил 12 из 16 ядер). Эксперименты с фильмами 480p показали следующее:

Параметр потока / Коэффициент конверсии (кадров в секунду при 60 секундах)

(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps

Интересной частью была загрузка процессора (используя htop для просмотра).
Используя не -threads варианта ликвидируется в 130fps диапазон с нагрузкой разбросано по всем ядрам на низком уровне нагрузки.
Использование 1 потока сделало именно это, загрузил одно ядро на 100%. Использование чего-либо еще привело к другой ситуации с распределенной нагрузкой.

Как вы можете видеть, есть также и точка снижения доходности, поэтому вам придется настроить параметр -threads для вашего конкретного компьютера. Для моей настройки, в частности, использование -threads 6 (на 12-ядерном компьютере) привело к лучшему FPS при преобразовании видео (от h264 до x264 с другим битрейтом для принудительной конвертации), и возврат фактически уменьшился, чем больше потоков я перебросил Это.

Это также могло быть проблемой с памятью - для виртуальной машины было выделено только 1 ГБ. Я могу настроить это и посмотреть, изменит ли это что-нибудь. Тем не менее - это показывает, что использование параметра -threads может повысить производительность, поэтому проведите несколько тестов на вашей конкретной машине на разных уровнях, чтобы найти подходящее место для ваших настроек.

1

Предполагая, что вы включили многопоточность, он назначил 1,5-кратное количество ядер.

0

Некоторые из этих ответов устарели , и я просто хотел бы добавить, что с моим ffmpeg 4.1 , кодируемым с помощью libx264 , все 6 ядер /12 потоков моей системы 2600X были увеличены без аргумента -thread .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .