Как установить / скомпилировать NVENC в Ubuntu?

Ответы:

19

Как всегда в случае с FFmpeg, постоянное развитие много раз меняет цели, и это, безусловно, верно для nvenc и FFmpeg. Там было 3 этапа:

  1. Сверните свои собственные : до 27 августа 2016 года было необходимо отследить ваши собственные заголовки для сборки nvenc. Трудный и более чем запутанный.
  2. Встроенный в источник : 27 августа 2016 года в заголовок исходного кода FFmpeg были включены требуемые заголовки , ничего не требовалось, кроме возможности компилировать исходный код FFmpeg из git или использовать версию «release», вырезанную из git.
  3. Используйте заголовки nv-codec : 26 февраля 2018 года заголовки NVidia были удалены из источника FFmpeg . Был создан отдельный репозиторий git для продолжения работы с этими заголовками. На данный момент эти заголовки должны быть установлены так же, как и FFmpeg из git, чтобы получить доступ к nvenc и друзьям.

Требуются два шага:

1. Установите пакет nv-codec-headers :

Что-то вроде следующих команд терминала должно быть достаточно:

sudo apt-get install make git
mkdir $HOME/nv-codec-headers_build && cd $HOME/nv-codec-headers_build
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make && sudo make install

Если по какой-то причине вы передумали и хотите полностью удалить установленные файлы, а также каталог сборки, просто выполните следующие две команды терминала:

sudo rm -v /usr/local/{lib/pkgconfig/ffnvcodec.pc,include/ffnvcodec/*.h}
rm -rfv $HOME/nv-codec-headers_build

И ваша система была очищена. Однако, если вы хотите продолжить, используйте следующий шаг:

2. Скомпилируйте FFmpeg :

Используйте это очень хорошо проверенное руководство:

Будет nv-codec-headersавтоматически распознаваться (дополнительные ./configureпараметры не требуются), и nvenc будет успешно собран.

Тестирование:

Я проверил это на Bionic Beaver LTS и получил следующие результаты:

andrew@ilium:~$ ffmpeg -encoders 2>/dev/null | grep nvenc
 V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)
 V..... hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)
andrew@ilium:~$

И если вы видите изображение, похожее на приведенное выше, и у вас есть поддерживаемая видеокарта , вы правы :)

Примечания:

  • Последняя версия соответствует Video Codec SDK версии 9.1.23 и требует наличия драйверов NVidia версии 435.21 или более поздней.
  • Старые версии : теперь существует автоматическая github-копия nv-codec-headers, которая также создает tar-архивы, идеально подходящие для использования более старых версий заголовков. Прекрасно, если вы хотите, чтобы заголовки синхронизировались с более старой версией драйверов NVidia, которые вы не можете или не хотите обновлять.
  • Руководство по аппаратному ускорению для FFmpeg : FFmpeg Wiki руководство по аппаратному ускорению в целом с FFmpeg, каноническим разделом для компиляции и использования nvenc ...
andrew.46
источник
Большое спасибо за это подробное руководство. Я получил аналогичный вывод из вашего раздела тестирования, и это здорово. Помимо драйверов nVidia, нам также нужно установить Cuda SDK, чтобы FFMPEG использовал установленный графический процессор?
Кимберли W
@ KimberlyW Не требуется в моей системе, я только что проверил ...
andrew.46
@ andrew.46 Я сделал то, что вы сказали, но у меня все еще нет аппаратного ускорения для vp9: /
Freedo
@Freedo К сожалению, nvenc для кодирования H.264 и HEVC ...
andrew.46
1
@DPS Ой! Но не простая деинсталляция nv-codec-headers, которую я дал в этом ответе?
Андрей.46
0

@ andrew.46 твой ответ отличный, спасибо. Моя репутация ниже порога, чтобы оставить это как комментарий. Если возможно, пожалуйста, дополните свой ответ следующей информацией.

Если вам необходимо вернуться к более ранней версии nv-codec-headers, загрузите и скомпилируйте более раннюю версию с https://github.com/FFmpeg/nv-codec-headers/releases .

Это может быть необходимо, если вы компилируете ffmpegс последней nv-codec-headersверсией, но ваш графический драйвер имеет версию, которая еще не обрабатывает минимальную версию CUDA API, требуемую nv-codec-headers. Симптомом будет то, что ffmpegне удастся перекодировать видеопотоки. В моем случае nv-codec-headersтребуется CUDA API 9.1, в то время как последняя nvidia-driverверсия для моего дистрибутива (тестирования) все еще была в версии, использующей 9.0.

Возврат к более ранней версии, nv-codec-headersвероятно, более безопасен, чем загрузка последней версии драйвера непосредственно из Nvidia и сборка его вне механизма обновления вашего дистрибутива.

Xavras Wyzryn
источник
Благодарность! Я добавил это в раздел «Заметки» ...
Андрей.46