- PVSM.RU - https://www.pvsm.ru -

Буду рассматривать аппаратные кодеки Nvidia, AMD и Intel.

Для начала разберёмся в основных отличиях двух подходов. Аппаратное кодирование использует специализированные компоненты графического процессора (GPU), разработанные для ускорения задач по кодированию и декодированию видео. GPU содержит встроенные блоки, такие как NVENC (у NVIDIA), AMF (у AMD), QSV (у Intel), которые могут быстро и эффективно обрабатывать такие задачи, обеспечивая высокую скорость обработки для больших объёмов данных. Программное кодирование выполняется непосредственно на центральном процессоре (CPU) с использованием программных библиотек и алгоритмов. CPU использует свои универсальные вычислительные ресурсы для выполнения задач преобразования данных. Из этого следует, что в случае аппаратного кодирования даже процессор пятилетней давности будет превосходить его как в актуальности алгоритмов обработки изображения, так и в возможностях самих специализированных блоков. В них реализованы далеко не все алгоритмы сжатия, а некоторые даже разрабатываются отдельно под такую архитектуру, преимущественно для ускорения кодирования стриминга или записи. Однако за счёт очень узкой направленности работы и простоты архитектуры такие блоки могут выполнять вычисления на бешеной скорости, хоть и в ущерб качеству сжатия или размеру файла.
Если говорить о количественных характеристиках, на первом месте NVENC с 115 опциями, за ним идёт AMF с 95, а на третьем — QSV с 80 опциями. Это не просто набор избыточных функций: NVENC действительно предлагает более широкие возможности настройки. Однако до программного кодирования с доступными более чем 200 параметрами ещё далеко.

Intel жалеть не стоит. QSV был выпущен в 2011 году, NVENC — в 2012, AMF — в 2016. AMD с разницей в 6 лет смогла достаточно набить руку, чтобы нагнать их.
Нет, всё же до AMF(и это библиотека, а VCE — сам аппаратный энкодер) у AMD был VCE (2011 г.).
В профессиональной сфере программное кодирование трудно сравнить с аппаратным. Следует отметить, что все аппаратные кодеры, кроме одного, не поддерживают 12-битное видео, в отличие от программных решений. Это лишь одно из очевидных преимуществ. Аппаратное кодирование нацелено на быстрое кодирование больших объёмов данных, но мы рассмотрим только направление кодирования различных записей без стриминга. Если вы хотите углубиться в медленное программное кодирование с хорошим сжатием на программном кодеке, у меня уже была статья [1] на эту тему, тоже по HEVC (H265).
Простой шаг, на котором многие допускают ошибки. libx265 — это исключительно кодирование на процессоре. Чтобы указать AMD AMF — hevc_amf, NVIDIA NVENC — hevc_nvenc, INTEL QVS — hevc_qvs.
Я опускаю все параметры, кроме тех, что могут понадобиться при перекодировании записей реальной жизни или игр. Для всего остального есть OBS в большинстве случаев. У меня также нет практики в работе с потоковым видео, поэтому этот сценарий я не смогу раскрыть.
Все команды, приведённые в статье, работают как на Linux, так и на Windows.
VCE был представлен с серией Radeon HD 7000 22 декабря 2011 года. Позднее в 2016 году был представлен AMF как библиотека для доступа к VCE.

Это похоже на родной Preset. С его помощью мы можем указать скорость кодирования по формуле «время / вес и качество». Так же, как и Preset настройка, он влияет на параметры кодирования.
Разница во времени кодирования между параметрами speed и balanced составляет около 3-5%, но эффект оказывает существенное влияние при том же битрейте.
ffmpeg -i "название_видео.mp4" -c:v hevc_amf -quality 0 готовое_видео.mp4

ImgSli [2]. Как видно, при quality=10 распределение микроблоков ухудшается, что приводит к более сильному искажению геометрии по сравнению с quality=0.
RC (Rate Control) — это система управления битрейтом при кодировании видео. Она определяет, как распределять доступную пропускную способность для достижения нужного качества видео в зависимости от выбранного режима.
Я рекомендую использовать CQP в нашем сценарии. Возможные значения — 0-51. Их необходимо указывать с помощью qp_i и qp_p.
ffmpeg -i "название_видео.mp4" -c:v hevc_amf -rc cqp qp_i 20 qp_p 21 готовое_видео.mp4

ImgSli [3]
В марте 2012 года были представлены видеокарты Nvidia из линейки Kepler (GTX 600) и аппаратный кодек NVENC. Конечно, с того момента он значительно изменился, и это проявляется не только в появлении новых кодеков, но и в инженерных решениях. Так, в 2012 году лимит составлял всего два одновременных потока кодирования видео, а на сегодняшний день уже восемь.

Стандартный preset. Однако мы пропустим первые 11 настроек, относящихся к стримингу.
На деле, разница в скорости кодирования почти отсутствует.
ffmpeg -i "название_видео.mp4" -c:v hevc_nvenc -preset p1 готовое_видео.mp4

ImgSli [4]. Невооружённым взглядом видно, что при том же битрейте Placebo оставляет значительно меньше цветовых артефактов и шума по сравнению с Ultra Fast.
Выполняет такую же функцию, как и в технологии AMD AMF — отвечает за управление скоростью, известное как Rate Control.
ffmpeg -i "название_видео.mp4" -c:v hevc_nvenc -rc cqp -qp 20 готовое_видео.mp4
B-frames (B-кадры), о которых я рассказывал в прошлой статье, представляют собой кадры, предсказывающие движение между кадрами, что позволяет более эффективно сжимать видео по сравнению с хранением полных данных о каждом кадре. Интересно, что AMF предоставляет удобное управление I, P и B кадрами (GOP), но не позволяет управлять B-кадрами отдельно. На практике это оказывается не так полезно, как подобный переключатель, ведь одновременное существование GOP и QCP, усложняет> управление качеством картинки.
Доступны следующие режимы работы:
Практика показывает, что режим each обеспечивает наилучшее качество, создавая заметно меньше артефактов по сравнению с другими методами.
ffmpeg -i "название_видео.mp4" -c:v hevc_nvenc -b_ref_mode 1 готовое_видео.mp4

ImgSli [5]. Наиболее заметные артефакты на этом кадре: лицо человека в верхнем левом углу – там кодек оставил красное пятно; предметы на лавке вверху справа практически потеряли свою геометрию при стандартных настройках b_ref_mode. Таким образом, отсутствие этого параметра может приводить к появлению различных типов артефактов, связанных с размытием во время движения
Intel Quick Sync Video (QSV) была представлена в эпоху постоянных прорывов: 9 января 2011 года вместе с архитектурой процессоров Sandy Bridge и новой интегрированной графикой Intel HD 2000.

Наиболее стандартный вариант, относительно того, что имеется сейчас в программных кодеках. Других пресетов нет, в отличие от Nvidia, что напихали под одну гребёнку всё подряд.
ffmpeg -i "название_видео.mp4" -c:v hevc_qsv -preset 1 готовое_видео.mp4

ImgSli [6]. Вероятно, пресеты перепутаны, так как после нескольких проверок выяснилось, что ultrafast работает лучше, чем veryslow, что не кажется логичным. Основные отличия видны на текстуре участка дерева внизу кадра и неправильной геометрии левой руки. Эти объекты оставались в поле зрения не более двух кадров, вероятно, это влияние низкого значения B кадров
В Intel QSV нет нормальной реализации CQP, которым мы ранее всегда пользовались. Точнее, она существует, но разобраться в этом даже мне сложно. Поэтому остаются только методы постоянного и переменного битрейта.

ffmpeg -i "название_видео.mp4" -c:v hevc_qsv -b:v 4M готовое_видео.mp4
Ключевое отличие CQP в том, что он сохраняет заданный уровень качества, изменяя битрейт в зависимости от содержания. Например, в одном фрагменте видео битрейт может составлять 2 Мбит/с для лёгкой сцены, а в другом — 5 Мбит/с для сложной.
Попытка воспроизвести эффект CQP с помощью VBR, задав средний битрейт 0 Мбит/с и максимальный 100 Мбит/с, не приведёт к сжатию видео также эффективно. На самом деле, такой подход может полностью исключить сжатие и увеличить размер файла.
В целом, VBR в архивировании видео — это неудачный выбор, и его реализация оставляет желать лучшего. В этом контексте CQP демонстрирует значительно лучшие результаты, особенно при необходимости качественного сжатия.
ffmpeg -i "название_видео.mp4" -c:v hevc_qsv -maxrate 4M -bufsize 10M готовое_видео.mp4
External Bitrate Control — специфичная для Intel технология контроля битрейта при помощи внешних средств по отношению к базовому алгоритму битрейта.

ImgSli [7]. Алгоритм существенно улучшил качество сцены даже при использовании CBR. Детализация улучшилась практически повсюду: листья возле колчана стрел стали отчётливее, как и низ рукояти лука с перчаткой левой руки. Переход тени на спине персонажа теперь практически незаметен. Кроме того, распределение макроблоков стало более ровным: почти исчезли искажения прямых линий, что особенно заметно на голове персонажа.
Перед кодированием видео необходимо его декодировать. Многие алгоритмы требуют полного считывания видео для извлечения кадров. В случае видео с высокой сложностью декодирования эффективным решением являются технологии аппаратного декодирования, которые ускоряют процесс обработки.

Hardware acceleration — аппаратное ускорение позволяет использовать специализированные блоки графических процессоров.
ffmpeg -hwaccel cuda -i "название_видео.mp4" -c:v hevc_nvenc готовое_видео.mp4
Аппаратное кодирование в FFmpeg представляет собой интересный и полезный инструмент, особенно в сценариях, где необходима быстрая обработка больших объёмов видео, таких как архивирование или создание контента. Несмотря на его ограничения и меньшее количество настроек по сравнению с программным кодированием, использование специализированных блоков GPU позволяет значительно сократить время кодирования. Тем не менее, важно понимать, что у каждого метода есть свои достоинства и недостатки, и выбор между аппаратным и программным кодированием должен основываться на конкретных потребностях проекта и желаемом качестве конечного продукта.
© 2024 ООО «МТ ФИНАНС»
Автор: Realife
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ffmpeg/402112
Ссылки в тексте:
[1] прошлой статье: https://habr.com/ru/companies/ruvds/articles/845202/
[2] ImgSli: https://imgsli.com/MzA1Mzgx
[3] ImgSli: https://imgsli.com/MzA1Mzk3
[4] ImgSli: https://imgsli.com/MzA1NDAw
[5] ImgSli: https://imgsli.com/MzA1NDA1
[6] ImgSli: https://imgsli.com/MzA1NzI0
[7] ImgSli: https://imgsli.com/MzA1NzE5
[8] Источник: https://habr.com/ru/companies/ruvds/articles/848412/?utm_source=habrahabr&utm_medium=rss&utm_campaign=848412
Нажмите здесь для печати.