Comment installer / compiler NVENC dans Ubuntu?

Réponses:

19

Comme toujours avec FFmpeg, le développement continu décale les poteaux de but à plusieurs reprises et cela est certainement vrai pour nvenc et FFmpeg. Il y a eu 3 phases:

  1. Lancez-vous : avant le 27 août 2016, il était nécessaire de retrouver vos propres en-têtes pour créer nvenc. Ardu et plus qu'un peu déroutant.
  2. Intégré à la source : le 27 août 2016, les en-têtes requis ont été intégrés à la source FFmpeg , rien d'autre que la possibilité de compiler la source FFmpeg à partir de git, ou d'utiliser une version `` release '' coupée de git à ce moment.
  3. Utiliser les en-têtes nv-codec : Le 26 février 2018, les en-têtes NVidia ont été supprimés de la source FFmpeg . Un référentiel git séparé a été créé pour poursuivre le travail avec ces en-têtes. Pour le moment, ces en-têtes doivent être installés ainsi que FFmpeg de git pour avoir accès à nvenc et à ses amis.

Deux étapes sont nécessaires:

1. Installez le paquet nv-codec-headers :

Quelque chose comme les commandes de terminal suivantes devraient suffire:

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

Si, pour une raison quelconque, vous changez d'avis et souhaitez supprimer complètement les fichiers installés ainsi que le répertoire de construction, exécutez simplement les deux commandes Terminal suivantes:

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

Et votre système a été nettoyé. Si toutefois vous souhaitez continuer, procédez comme suit:

2. Compilez FFmpeg :

Utilisez ce guide très bien testé:

Le nv-codec-headerssera reconnu automatiquement (aucune ./configureoption supplémentaire n'est nécessaire) et nvenc sera construit avec succès.

Essai:

J'ai testé cela sur Bionic Beaver LTS et les résultats sont les suivants:

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:~$

Et si vous voyez une image similaire à celle ci-dessus et que vous avez une carte graphique prise en charge , vous avez raison d'aller :)

Remarques:

  • La dernière version correspond à Video Codec SDK version 9.1.23 et nécessite les pilotes NVidia version 435.21 ou plus récente.
  • Versions plus anciennes : il existe maintenant une copie github automatisée des en-têtes nv-codec qui crée également des tarballs parfaits pour utiliser une ancienne version des en-têtes. Idéal si vous souhaitez que les en-têtes soient synchronisés avec une ancienne version des pilotes NVidia que vous ne pouvez pas ou ne souhaitez pas mettre à jour.
  • Guide d'accélération matérielle pour FFmpeg : Guide Wiki FFmpeg pour l'accélération matérielle en général avec FFmpeg, une section canonique pour compiler et utiliser nvenc ...
andrew.46
la source
Merci beaucoup pour ce guide détaillé. J'ai obtenu une sortie similaire de votre section de test, ce qui est génial. Mis à part les pilotes nVidia, devons-nous également installer le SDK Cuda pour que FFMPEG utilise le GPU installé?
Kimberly W
@KimberlyW Non requis sur mon système, je viens de le tester ...
andrew.46
@ andrew.46 J'ai fait ce que vous avez dit mais je n'ai toujours pas l'accélération matérielle pour vp9: /
Freedo
@Freedo Malheureusement, nvenc est pour l'encodage H.264 et HEVC ...
andrew.46
1
@DPS Ouch !! Mais pas la simple désinstallation des en-têtes de codec nv que j'ai donnée dans cette réponse?
andrew.46
0

@ andrew.46 votre réponse est excellente, merci. Ma réputation est en dessous du seuil pour poster ceci en tant que commentaire. Si possible, veuillez développer votre réponse avec les informations suivantes.

Si vous devez revenir à une version antérieure de nv-codec-headers, téléchargez et compilez une version antérieure à partir de https://github.com/FFmpeg/nv-codec-headers/releases .

Cela peut être nécessaire si vous compilez ffmpegavec la dernière version nv-codec-headers, mais votre pilote graphique est d'une version qui ne gère pas encore la version minimale de l'API CUDA requise par nv-codec-headers. Le symptôme sera que ffmpegle transcodage des flux vidéo échouera. Dans mon cas, il nv-codec-headersfallait l'API CUDA 9.1, tandis que la dernière version nvidia-driverde ma distribution (test) était toujours à une version utilisant 9.0.

Revenir à une version antérieure nv-codec-headersest probablement plus sûr que de télécharger le dernier pilote directement depuis Nvidia et de le construire en dehors du mécanisme de mise à jour de votre distribution.

Xavras Wyzryn
la source
Merci! J'ai ajouté ceci à la section 'Notes' ...
andrew.46