LINUX.ORG.RU

Флаги для достижения макс. скорости кодирования видео

 ,


1

1

Подскажите плиз как добиться максимальной производительности для ffmpeg ( версия 4.1-5) :

  • Нужно ли отключить на этом серваке Hyper threading ?
  • Какие еще флаги компиляции добавить ( lto и тд) ?
processor	: 39
vendor_id	: GenuineIntel
cpu family	: 6
model		: 79
model name	: Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz

Профиль кодирования видео:

-vf scale=-2:360 -profile:v high -level 4.0 -pix_fmt yuv420p -threads:v 4 -preset veryfast -movflags +faststart -c:a aac -y -f mp4

Сборка его :

built with gcc 9 (Debian 9.2.1-19)
configuration: --enable-gpl --enable-version3 --disable-static --enable-shared --enable-avisynth --enable-chromaprint --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtesseract --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opencl --enable-opengl --enable-libdrm --enable-nonfree --enable-libfdk-aac --enable-libbluray

★★★★★

-preset ultrafast
-c:a libfdk_aac

-c:a aac довольно медленный, особенно на больших битрейтах.
Можно задействовать аппаратный h264 кодер.

anonymous ()
Ответ на: комментарий от Harald

Это понятно, а какие флаги для того же gcc ? И стоит смотреть на другие компиляторы в моем случае ?

pinachet ★★★★★ ()

В этом процессоре 10 ядер, 20 потоков. Зачем его ограничивать 4?

-threads:v 4 лишняя команда. x264 сам утилизирует все ядра.

anonymous ()
Ответ на: комментарий от anonymous

А пример ./configure так сказать best practice можешь плиз дать ?

pinachet ★★★★★ ()

Hyper threading отключать не нужно. Наоборот он способствует обработке. Я обычно обрабатываю с -q:v 1 У меня он собран с флагами configuration: –enable-gpl –enable-version3 –enable-nonfree –enable-postproc –enable-libfaac –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libtheora –enable-libvorbis –enable-libx264 –enable-libvpx –enable-libxvid –enable-x11grab –enable-openssl –enable-gnutls –enable-opengl –enable-vaapi –enable-openal

особый акцент нужно ставить на писутствие в системе библиотек: DKMS, libva, libc 5-6. В /etc/default/grub можно ещё дописать: fsck.mode=force fsck.repair=yes nohz=off highres=off hpet=disable noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off Для стабильности. А больше ничего не сделаешь.

timerik418 ()
Ответ на: комментарий от timerik418

Ну у тебя нет флагов оптимизации .Так должно быть ? И отключение ( fsck.mode=force fsck.repair=yes nohz=off highres=off hpet=disable noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off ) сколько дало прироста ?

pinachet ★★★★★ ()
Ответ на: комментарий от pinachet

Как ни собирай, поддержка новых инструкций не появится.

RazrFalcon ★★★★★ ()

Мне кажется -preset ultrafast уже гарантирует максимальную скорость кодирования. Быстрее только если задействовать аппаратный энкодер или один из очень быстрых кодеков.

Кстати, а сколько видео надо перегонять? 10 ядер это конечно аргумент, но что то мне кажется 4 малины (достаточно бюджетно) его вполне обгонят. Хотя качество кодека у них прямо скажем ультрафаст.

kirill_rrr ★★★★★ ()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от peregrine

По моему опыту, nvenc или гробит картинку, или генерирует гигантский файл. Если вы знаете как получить нормальное качество с маленьким размером - примеры в студию.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

ffmpeg и кодек libx264/265

Но говорят ffmpeg можно каким то образом собрать так, что эти кодеки будут ускоряться на openCL или cuda, оставаясь при этом качественными.

kirill_rrr ★★★★★ ()
Ответ на: комментарий от pinachet

Я бы сказал пара-тройка дней на 10-и ядерном цпу без всяких ускорений. Написал скрипт, зарядил и ушёл. А если нужно потоковое, то… хз, может штук 5 получится выжать.

kirill_rrr ★★★★★ ()

Как ни собирай ffmpeg большого прироста не будет. Аппаратное может помочь, но нужна нормальная видеокарта

Но если пофиг на размер файлов можно по другому, выбрать быстрый кодек ffv1 и гнать видео в него, он без потерь и это дает возможность потом повторно кодировать уже в кодек с малым размером для публикации

Насчет hyper threading наверное таки лучше отключить, ffmpeg про него не знает, честные ядра предпочтительней

Быстрое кодирование в h264 сильно режет качество и врядли имеет смысл

ism ★★★ ()
Последнее исправление: ism (всего исправлений: 3)
Ответ на: комментарий от kirill_rrr

При чём тут x264? Речь про nvenc.

Но говорят ffmpeg можно каким то образом собрать так, что эти кодеки будут ускоряться на openCL или cuda, оставаясь при этом качественными.

Чушь.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Аппаратные кодеки вообще бывают качественными? Единственный действительно надёжный способ это кодировать на цпу.

kirill_rrr ★★★★★ ()
Ответ на: комментарий от ism

Насчет hyper threading наверное таки лучше отключить, ffmpeg про него не знает, честные ядра предпочтительней

Ему и не надо знать. Это не интерактивное приложение, ему пофигу на просадку однопотока. Важно что 2 виртуальных ядра с ht всегда будут обгонять 1 реальное.

kirill_rrr ★★★★★ ()
Ответ на: комментарий от kirill_rrr

Ну вон выше утверждают что да, но что-то слабо верится.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Но кодирование видео это одна из тех задач, которая получает максимум выгоды от ht.

Да собственно я не слышал чтобы вообще какое то приложение умело произвольно игнорировать виртуальные ядра и при этом не давать другим процессам их занимать. Мне казалось вся фишка в том, чтобы ОС не видела между ними разницы.

kirill_rrr ★★★★★ ()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от kirill_rrr

Почему вы так решили? Если полно бенчмарков, в которых проц без ht будет быстрее.

Проверяем проц на наличие ht. Делим количество «ядер» пополам.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Видел я такие бенчмарки, даже сам делал. Всё сводится к измерению однопоточного теста при фоновой нагрузке на прочие ядра.

Я не фанат ht, но пока что вынужден признавать: свои 10% суммарной производительности он выигрывает.

kirill_rrr ★★★★★ ()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.