Я вижу, что -threads <count>
в ffmpeg есть опция командной строки. Какое значение по умолчанию для этой опции?
47
это зависит от используемого кодека, версии ffmpeg и количества ядер вашего процессора. Иногда это просто один поток на ядро. Иногда это сложнее, как:
В libx264 это ядра x 1,5 для потоков кадра и ядра x 1 для потоков срезов.
По состоянию на 2014 год он использует оптимальное количество.
Вы можете проверить это на многоядерном компьютере, изучив загрузку процессора (Linux:,
top
Windows: диспетчер задач) с различными параметрами ffmpeg:-threads 0
(Оптимальный);-threads 1
(Однопоточный);-threads 2
(2 потока, например, для Intel Core 2 Duo);нет (по умолчанию, также оптимально).
Редактирование 2015 года: на 12-ядерном процессоре некоторые команды ffmpeg имеют Linux,
top
показывающий максимум 200% процессорного времени (только 2 ядра), независимо от того, какое число назначено-threads
. Таким образом, значение по умолчанию может все еще быть оптимальным в смысле «настолько хорошим, насколько этот двоичный файл ffmpeg может быть получен», но не оптимальным в смысле «полного использования моего процессора Leet».источник
В 2015 году на Ubuntu 14.04 с ffmpeg 0.8.10-6 она использовала 1 ядро в 4-ядерной системе.
htop
показал это; использовалось только одно ядро, и я получил скорость преобразования 16 кадров в секунду для видео FullHD.Использование
-threads 4
заставило все мои ядра процессора перейти на 100%, и я получил коэффициент конверсии 47 кадров в секунду.Я использовал следующую команду:
источник
Некоторые из этих ответов устарели, и я просто хотел бы добавить, что с моим
ffmpeg 4.1
кодированиемlibx264
все 6 ядер / 12 потоков моей системы Ryzen 5 2600X были доведены до максимума без каких-либо-thread
аргументов.источник
-vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecode
так что это несколько переменных для изоляции. Добавление-threads 12
не имеет никакого эффекта.Я играл с конвертированием на CentOS 6.5 VM (Ryzen 1700 8c / 16t - vm назначил 12 из 16 ядер). Эксперименты с фильмами 480p показали следующее:
Параметр потока / Коэффициент конверсии (кадров в секунду при 60 секундах)
Интересной частью была загрузка процессора (используя его
htop
для просмотра).При отсутствии
-threads
опций в диапазоне 130 к / с нагрузка распределяется по всем ядрам при низком уровне нагрузки.Использование 1 потока сделало именно это, загрузил одно ядро на 100%. Использование чего-либо еще привело к другой ситуации с распределенной нагрузкой.
Как вы можете видеть, есть также и точка снижения прибыли, поэтому вам придется настроить параметр -threads для вашего конкретного компьютера. Для моей настройки, в частности, использование -threads 6 (на 12-ядерном компьютере) привело к лучшему FPS при преобразовании видео (от h264 до x264 с другим битрейтом, чтобы вызвать преобразование), и возврат фактически уменьшился, чем больше потоков я перебросил Это.
Это могло быть и проблема с памятью - для виртуальной машины было выделено всего 1 ГБ. Я могу настроить это и посмотреть, изменит ли это что-нибудь. Тем не менее - это показывает, что использование этой
-threads
опции может повысить производительность, поэтому проведите несколько тестов на вашей конкретной машине на разных уровнях, чтобы найти подходящее место для ваших настроек.источник
Предполагая, что вы включили многопоточность, он назначил 1,5-кратное количество ядер.
источник
-x264-params sliced-threads=1
. Или с помощью-tune zerolatency
.