Я вижу, что -threads <count>в ffmpeg есть опция командной строки. Какое значение по умолчанию для этой опции?
Я вижу, что -threads <count>в ffmpeg есть опция командной строки. Какое значение по умолчанию для этой опции?
Ответы:
это зависит от используемого кодека, версии ffmpeg и количества ядер вашего процессора. Иногда это просто один поток на ядро. Иногда это сложнее, как:
В libx264 это ядра x 1,5 для потоков кадра и ядра x 1 для потоков срезов.
По состоянию на 2014 год он использует оптимальное количество.
Вы можете проверить это на многоядерном компьютере, изучив загрузку процессора (Linux:, topWindows: диспетчер задач) с различными параметрами 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 -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg
Некоторые из этих ответов устарели, и я просто хотел бы добавить, что с моим 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 секундах)
(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps
Интересной частью была загрузка процессора (используя его htopдля просмотра).
При отсутствии -threadsопций в диапазоне 130 к / с нагрузка распределяется по всем ядрам при низком уровне нагрузки.
Использование 1 потока сделало именно это, загрузил одно ядро на 100%. Использование чего-либо еще привело к другой ситуации с распределенной нагрузкой.
Как вы можете видеть, есть также и точка снижения прибыли, поэтому вам придется настроить параметр -threads для вашего конкретного компьютера. Для моей настройки, в частности, использование -threads 6 (на 12-ядерном компьютере) привело к лучшему FPS при преобразовании видео (от h264 до x264 с другим битрейтом, чтобы вызвать преобразование), и возврат фактически уменьшился, чем больше потоков я перебросил Это.
Это могло быть и проблема с памятью - для виртуальной машины было выделено всего 1 ГБ. Я могу настроить это и посмотреть, изменит ли это что-нибудь. Тем не менее - это показывает, что использование этой -threadsопции может повысить производительность, поэтому проведите несколько тестов на вашей конкретной машине на разных уровнях, чтобы найти подходящее место для ваших настроек.
Предполагая, что вы включили многопоточность, он назначил 1,5-кратное количество ядер.
-x264-params sliced-threads=1. Или с помощью -tune zerolatency.