GPU-ускоренная обработка видео с помощью ffmpeg

Я хочу использовать ffmpeg для ускорения кодирования и декодирования видео с помощью графического процессора NVIDIA.

С сайта NVIDIA:

Графические процессоры NVIDIA содержат один или несколько аппаратных декодера и кодера (ов) (отдельно от ядер CUDA), которые обеспечивают полностью ускоренное аппаратное декодирование и кодирование видео для нескольких популярных кодеков. При отключенном декодировании/кодировании графический движок и процессор свободны для других операций.

Мой вопрос: могу ли я использовать ядра CUDA для кодирования и декодирования видео, может быть, быстрее?

Ответ 1

FFmpeg предоставляет подсистему для аппаратного ускорения, которая включает NVIDIA: https://trac.ffmpeg.org/wiki/HWAccelIntro

Чтобы включить поддержку кодирования с помощью графического процессора с помощью графического процессора NVIDIA, вам необходимо:

Ответ 2

Как упоминал Майк, ffmpeg оборачивает некоторые из этих HW-ускорений. Вы должны использовать его вместо того, чтобы сначала использовать более низкоуровневые подходы (официальные библиотеки NVIDIA)!

Из таблицы видно, что NVENC, вероятно, ваш кандидат.

Но: будьте осторожны и поэтому некоторые тесты. Хотя GPU-кодировщики должны быть очень быстрыми, они также хуже, чем у CPU.

Здесь нужно проверить следующее: конкурирует ли GPU-кодировщик с CPU-кодировщиком, когда намечено некоторое качество при некотором заданном битрейте? Я бы сказал, нет, нет (за исключением очень высоких битрейтов или очень плохого качества), но это то, что зависит от вашего варианта использования. Кодировка GPU - не серебряная пуля, обеспечивающая только преимущества.

Ответ 3

Посмотрите этот ответ о том, чего ожидать от аппаратного ускорения с использованием графических процессоров NVIDIA в FFmpeg.