Avoir Nvenc sur Ubuntu 20.04 LTS

Publié le 22/11/2022 • Update le 18/02/2026

Compilation party 😎

Mise en place de Nvenc pour OBS

Si vous avez encore une Ubuntu 20.04 ou inférieur qui traîne, sachez que ce n’est pas bien car la 22.04 LTS existe. Toutefois, cette version de la distribution ne prend pas en charge Nvenc pour OBS. C’est frustrant de faire fonctionner le CPU plein pot alors qu’on a une carte graphique Nvidia qui peut le faire.

Comment faire en sorte que FFmpeg exporte les symboles nécessaires sur (K)ubuntu cosmic/disco (et distributions similaires) afin qu’OBS et MPV puissent utiliser NVENC et NVDEC (anciennement appelé CUVID) sur les architectures Fermi, Maxwell, Kepler, Pascal, Volta et Turing et comment utiliser l’accélération matérielle dans Chromium.

Ce guide vise les cartes les plus modernes compatibles avec NVENC et NVDEC, mais il contient également des instructions pour les cartes utilisant des pilotes hérités. (378, 390 et 396)

Cartes Nvidia supportées : https://developer.nvidia.com/video-encode-decode-gpu-support-matrix

Nvenc de Nvidia

Installation des pilotes Nvidia

Pour commencer nous allons mettre en place les pilotes Nvidia propriétaire.

sudo apt install ppa-purge # Par sécurité 
sudo add-apt-repository ppa:graphics-drivers/ppa 
# veuillez vérifier le support pour votre GPU - nvidia-driver-{390,396,410,415,418,430,435,440} disponible afin que votre serveur d'affichage n'échoue pas !
# Nous utiliserons 495.44
# Peut-être avez-vous besoin des versions 32 bits de certaines bibliothèques, ajoutez ":i386" au nom du package (par exemple : libnvidia-gl-430:i386)

sudo apt install nvidia-driver-510 xserver-xorg-video-nvidia-510 nvidia-utils-510 nvidia-kernel-source-510 nvidia-kernel-common-510 nvidia-dkms-510 nvidia-compute-utils-510 libnvidia-gl-510 libnvidia-fbc1-510 libnvidia-encode-510 libnvidia-decode-510 libnvidia-cfg1-510 libnvidia-compute-510
Nvidia & CPU Intel

Installation des paquets nv-codec-headers

On prépare les codecs d’entête venant de chez VLC !

sudo apt install make git
mkdir ~/devel/ && cd ~/devel/
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers

#change to older SDK branch here if you use a legacy driver — one of: git checkout sdk/8.{0,1,2} 

make && sudo make install

La version la plus récente du SDK Video Codec est 9.0.x. mais ci-dessous se trouve une liste des anciennes branches SDK pour les pilotes hérités.

FFmpeg version of headers required to interface with Nvidias codec APIs.

Corresponds to Video Codec SDK version 9.1.23.

Minimum required driver versions:
Linux: 435.21 or newer
Windows: 436.15 or newer

Liste des branches git pour les anciens pilotes

Si vous utilisez des pilotes hérités, voici les branches pour eux – après avoir cloné le cd du référentiel git et entré l’une des trois lignes suivantes avant l’installation (en entrant make && sudo make install). Vous êtes curieux de savoir ce qui se passera si vous utilisez les derniers en-têtes SDK avec un pilote hérité ? L’éditeur de liens/chargeur ne trouvera pas le point d’entrée ou la fonction (pointeur) ou l’en-tête et votre application échouera.

Toutes ces trois branches prennent en charge les fonctionnalités facultatives de CUDA 10 à partir du pilote 410.48 sous Linux et 411.31 sous Windows.

git checkout sdk/8.2 # for Linux 396.24 or newer | for Windows 397.93 or newer
git checkout sdk/8.1 # for Linux 390.25 or newer | for Windows 390.77 or newer
git checkout sdk/8.0 # for Linux 378.13 or newer | for Windows 378.66 or newer

Compilation de FFmpeg

FFmpeg détectera automatiquement les en-têtes ffnvcodec – extrait de ./configure –help :

  The following libraries provide various hardware acceleration features:
  --disable-amf            disable AMF video encoding code [autodetect]
  --disable-audiotoolbox   disable Apple AudioToolbox code [autodetect]
  --enable-cuda-sdk        enable CUDA features that require the CUDA SDK [no]
  --disable-cuvid          disable Nvidia CUVID support [autodetect]
  --disable-d3d11va        disable Microsoft Direct3D 11 video acceleration code [autodetect]
  --disable-dxva2          disable Microsoft DirectX 9 video acceleration code [autodetect]
  --disable-ffnvcodec      disable dynamically linked Nvidia code [autodetect]
  --enable-libdrm          enable DRM code (Linux) [no]
  --enable-libmfx          enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
  --enable-libnpp          enable Nvidia Performance Primitives-based code [no]
  --enable-mmal            enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
  --disable-nvdec          disable Nvidia video decoding acceleration (via hwaccel) [autodetect]
  --disable-nvenc          disable Nvidia video encoding code [autodetect]
  --enable-omx             enable OpenMAX IL code [no]
  --enable-omx-rpi         enable OpenMAX IL code for Raspberry Pi [no]
  --enable-rkmpp           enable Rockchip Media Process Platform code [no]
  --disable-v4l2-m2m       disable V4L2 mem2mem code [autodetect]
  --disable-vaapi          disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
  --disable-vdpau          disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
  --disable-videotoolbox   disable VideoToolbox code [autodetect]

Si la compilation standard ne correspond pas à vos besoins (vous avez besoin de lier des bibliothèques spécifiques/vous n’avez pas besoin de certaines bibliothèques ou vous souhaitez activer/désactiver des fonctionnalités spécifiques), vous pouvez modifier les règles de construction dans ~/devel/ffmpeg/ ffmpeg-4.1.3/debian/rules. Installez le paquet nv-codec-headers activera ffnvcodec vdpau nvenc nvdec cuda cuvid (NVDEC est juste un changement de marque de CUVID). CUDA ne signifie pas le code CUDA-SDK – juste une accélération matérielle via CUDA.

Passons à la compilation et à l’installation de ffmpeg

sudo apt build-dep ffmpeg
mkdir -p ~/devel/ffmpeg
cd ~/devel/ffmpeg
sudo apt source ffmpeg
sudo chown -hR $USER: * # atleast my distro has problems when unpacking source – so we change ownership
cd ffmpeg-4.2.6 # cd ffmpeg-x.x.x [x.x.x represents the version number] 
debuild -b --no-sign --jobs-try=$((`nproc`/2))
cd ..
rm -f libavcodec-extra* libavfilter-extra*
sudo dpkg -i *.deb
sudo apt-mark hold ffmpeg ffmpeg-doc libavcodec-dev libavcodec58 libavfilter7 libavfilter-dev libavformat58 libavformat-dev libavresample4 libavresample-dev libavutil-dev libavutil56 libavdevice58 libavdevice-dev libswscale5 libswscale-dev libswresample3 libswresample-dev libpostproc55 libpostproc-dev

Test du bon fonctionnement de Nvenc

ffmpeg -hide_banner -encoders  | grep nvenc

Cette commande doit vous donner ce résultat

 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)
ffmpeg -hide_banner -decoders | grep cuvid

Doit vous donner :

 V..... h264_cuvid           Nvidia CUVID H264 decoder (codec h264)
 V..... hevc_cuvid           Nvidia CUVID HEVC decoder (codec hevc)
 V..... mjpeg_cuvid          Nvidia CUVID MJPEG decoder (codec mjpeg)
 V..... mpeg1_cuvid          Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
 V..... mpeg2_cuvid          Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
 V..... mpeg4_cuvid          Nvidia CUVID MPEG4 decoder (codec mpeg4)
 V..... vc1_cuvid            Nvidia CUVID VC1 decoder (codec vc1)
 V..... vp8_cuvid            Nvidia CUVID VP8 decoder (codec vp8)
 V..... vp9_cuvid            Nvidia CUVID VP9 decoder (codec vp9) 
ffmpeg -hide_banner -hwaccels

Doit vous donner

Hardware acceleration methods:
vdpau
cuda
vaapi
drm
cuvid

Installion d’OBS Studio (pas besoin de compiler)

OBS détecte si FFmpeg (libavcodec) exporte dynamiquement h264_nvenc au démarrage de l’exécution si l’accélération GPU n’a pas été désactivée au moment de la construction.

Installation d’OBS Studio a partir des paquets officiels

sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt update
sudo apt install obs-studio

MAINTENANT, vous devriez avoir un OBS entièrement fonctionnel avec une accélération matérielle ! Le reste de ce guide est facultatif (pour les personnes qui souhaitent tirer le meilleur parti de leur GPU).

Construisez MPV pour utiliser NVDEC pour le décodage vidéo

Compilation et installation avec la prise en charge de Nvdec

sudo apt build-dep mpv
mkdir -p ~/devel/mpv
cd ~/devel/mpv
sudo apt source mpv
sudo chown -hR $USER: *
cd mpv-0.32.0 # cd mpv-x.x.x [x.x.x represents version]
debuild -b --no-sign --jobs-try=$((`nproc`/2))  
cd ..
sudo dpkg -i mpv*.deb # we dont need libmpv{-dev}
sudo apt-mark hold mpv

Puis vous pouvez lire la vidéo avec mpv

mpv Some.Home.Movie.mkv
Playing: Some.Home.Movie.mkv
 (+) Video --vid=1 (*) (h264 1280x720 29.970fps)
 (+) Audio --aid=1 (*) (aac 2ch 44100Hz)
Using hardware decoding (nvdec). # this line is very important, you can turn on debug output with --v
AO: [pulse] 44100Hz stereo 2ch float
VO: [gpu] 1280x720 => 1710x720 cuda[nv12]

Pour conclure

Cela fait des années que j’utilise cette méthode pour obtenir nvenc sur Ubuntu et OBS Studio. Ceci, n’est plus nécessaire sur Ubuntu 22.04, nvenc étant pris en charge nativement. De quoi faire de beau enregistrement pour DonF & DonF

Source

Informations sur l'article

Rédaction

Écrit par DonF 22/11/2022 à 16:33
Modifié le 18/02/2026

Catégories & Étiquettes

Auteur

DonF •⚡
25 ans de Linux et de Web
• DonF, System Web & App, One Page, Vitrine & E-commerce
• Applications PWA pour Android / iOS / Windows / MacOS & Linux
• CréateuR MultimédiA de la TeaM à DonF.
• Tous mes services sur DonF.co
• En Streaming avec DonF_Me

Commentaires

Laisser le premier commentaire

Partages

Derniers Articles

Tout le BloG