Почему появляются странные артефакты при использовании кодека h264_qsv и всех I-кадров?

Вопрос или проблема

Я кодирую тестовый образец с использованием видео кодека h264_qsv с помощью следующей команды:

ffmpeg -y -f lavfi -i testsrc=s=192x128:r=25:d=2 -c:v h264_qsv -g 1 -b:v 20000000 -pix_fmt nv12 output.mp4

При выполнении на Intel Core i7 13700 в выходном файле появляются странные артефакты:

enter image description here

  • Версия FFmpeg: 7.1-full_build-www.gyan.dev
  • Операционная система: Windows 11
  • Кодек h264_qsv использует ускоренное аппаратное кодирование видео H.264 с помощью Intel Quick Sync.
  • -g 1 – Все кадры — это I-кадры (а также ключевые кадры).
  • -b:v 20000000 – Битрейт составляет 20 Мбит/с (намного выше необходимого).
  • -pix_fmt nv12 – Формат пикселей NV12 – номинальный формат входных данных для Intel QSV.

При выполнении той же команды на Intel Core i7 6700 артефактов нет.

При использовании более низкого битрейта, например, -b:v 500000, видео выглядит нормально, и выходной файл больше по размеру по сравнению с -b:v 20000000.

Есть ли решение этой проблемы?

Ответ или решение

Когда сталкиваетесь с артефактами при кодировании видео с использованием кодека h264_qsv и всеми кадрами I-Frame, проблема может стать настоящей головоломкой, особенно учитывая различия в поведении на различных процессорах, таких как Intel Core i7 13700 и Intel Core i7 6700. Давайте разберемся в возможных причинах и решениях этой проблемы.

Теория

Кодек h264_qsv, используемый в вашем случае, задействует аппаратное ускорение, предложенное технологией Intel Quick Sync Video. Одной из его особенностей является возможность значительно ускорить обработку видео, используя встроенные возможности обработки графики Intel. Однако, как и у любого аппаратного ускорения, у него есть свои особенности и ограничения.

  1. Алгоритм работы QSV: Intel Quick Sync Video основан на фиксированном функциональном железе, а не на универсальных процессах программного обеспечения, как это делается с программным кодированием. Это может привести к различиям в обработке видео между различными поколениями процессоров, так как железо может изменяться в каждой итерации.

  2. I-кадры (Интракадры): Кодирование всех кадров как I-Frame повышает число анализируемых и кодируемых блоков, так как каждый кадр безотносительно кодируется отдельно. Это приводит к огромному объемному потоку данных, особенно при высоком значении битрейта.

  3. Bitrate и диапазон: Указанный вами битрейт в 20 Мбит/с – это значительно больше, чем требуется для вашего разрешения и длительности видео. Это может вносить дополнительные проблемы, такие как перегрузка кодировщика или резкое снижение качества из-за плохой адаптации параметров.

Пример

Ваше командное описание ffmpeg выглядит следующим образом:

ffmpeg -y -f lavfi -i testsrc=s=192x128:r=25:d=2 -c:v h264_qsv -g 1 -b:v 20000000 -pix_fmt nv12 output.mp4

Здесь:

  • -g 1 задает все кадры как I-Frame.
  • -b:v 20000000 использует высокую битовую скорость.
  • -pix_fmt nv12 – это доверенное цветовое пространство для Intel QSV, но, вероятно, может столкнуться с проблемами при перегрузке потока данных.

Применение

  1. Диагностика и сравнение: Первое, что следует сделать – это сравнить версии драйверов и самих компонентов Quick Sync на данных системах i7 13700 и i7 6700. Рекомендую обновиться до последней версии прошивки и, по возможности, драйверов. dmesg или аналогичные команды могут помочь выявить аппаратные ошибки кодирования.

  2. Изменение параметров кодирования:

    • Уменьшение битрейта: Попробуйте адаптивно уменьшать битовый поток. Как вы отметили, при 500 000 бит/с артефактов нет, и файл даже больше, это свидетельствует о неверной работе кодека при чрезмерном насыщении.
    • Изменение GOP: Проверьте с использованием стандартного GOP (например, 25), чтобы дать кодеку возможность работать в более знакомом пространстве.
  3. Дополнительные настройки:

    • Буферизация: Возможно использование параметров -maxrate, -bufsize для контроля потока данных.
    • Настройка кодека: Проверка и настройка других параметров кодека для оптимизации (например, уровни качества, предустановки и т. д.).
  4. Замена кодировщика: Если не удается выйти на адекватное качество, попробуйте альтернативные кодировщики, например, программные реализации x264 или более новые варианты кодеков стандарта H.265, которые могут лучше управляться при текущих условиях.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...