Le transcodage logiciel x264 fait fondre les CPU — un seul flux H.264 1080p avec un préréglage moyen consomme 4 à 6 cœurs. NVENC, l'encodeur matériel intégré aux GPU NVIDIA, fait le même travail avec une fraction de la puissance et libère vos CPU pour l'ingestion et le packaging. Ce guide configure FFmpeg avec NVENC sur Ubuntu pour le transcodage IPTV/streaming en direct.

Nous ciblons un serveur GPU avec une RTX PRO 4500 ou 6000 Blackwell — consultez notre page serveur de transcodage vidéo pour le matériel.

Prérequis

  • Ubuntu 22.04 avec un GPU NVIDIA (RTX PRO, RTX 4090, L4, L40S)
  • Accès root
  • Familiarité de base avec la ligne de commande FFmpeg

Étape 1 — Installer le pilote NVIDIA

Sur un boîtier GPU Hostfory, le pilote est généralement préinstallé. Vérifiez :

nvidia-smi

S'il manque :

apt update
apt install -y nvidia-driver-550 nvidia-utils-550
reboot

Après le redémarrage, nvidia-smi devrait afficher votre GPU, la version du pilote et la version de CUDA.

Étape 2 — Installer FFmpeg avec le support NVENC

Le FFmpeg du dépôt Ubuntu manque souvent de NVENC. Installez une version qui l'inclut, ou compilez. Le chemin le plus rapide est la version statique de BtbN :

cd /opt
wget https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz
tar xf ffmpeg-master-latest-linux64-gpl.tar.xz
mv ffmpeg-master-latest-linux64-gpl ffmpeg
ln -sf /opt/ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
ln -sf /opt/ffmpeg/bin/ffprobe /usr/local/bin/ffprobe

Vérifiez que NVENC est disponible :

ffmpeg -hide_banner -encoders | grep nvenc

Vous devriez voir h264_nvenc, hevc_nvenc, et sur Blackwell/Ada, av1_nvenc.

Étape 3 — Un transcodage live de base

Tirez un flux d'entrée, transcodez-le en H.264 NVENC, poussez-le vers une sortie :

ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
  -i "http://source/stream.ts" \
  -c:v h264_nvenc -preset p4 -tune ll -b:v 5M -maxrate 6M -bufsize 10M \
  -c:a aac -b:a 128k \
  -f mpegts "udp://127.0.0.1:1234"

Options clés :

  • -hwaccel cuda -hwaccel_output_format cuda — conserve les images sur le GPU, évite les allers-retours CPU
  • -preset p4 — préréglage NVENC (p1 le plus rapide → p7 le plus lent/meilleure qualité). p4 est un bon équilibre pour le live
  • -tune ll — réglage à faible latence pour le live
  • -b:v 5M -maxrate 6M -bufsize 10M — cible 5 Mbps, limite les rafales à 6 Mbps

Étape 4 — Construire une échelle ABR

Pour le streaming adaptatif, vous produisez plusieurs paliers. Ceci produit une échelle HLS à 3 paliers (1080p/720p/480p) à partir d'une seule entrée, le tout sur le GPU :

ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
  -i "http://source/stream.ts" \
  -filter_complex "[0:v]split=3[v1][v2][v3]; \
    [v1]scale_cuda=1920:1080[v1out]; \
    [v2]scale_cuda=1280:720[v2out]; \
    [v3]scale_cuda=854:480[v3out]" \
  -map "[v1out]" -c:v:0 h264_nvenc -preset p4 -b:v:0 5M \
  -map "[v2out]" -c:v:1 h264_nvenc -preset p4 -b:v:1 3M \
  -map "[v3out]" -c:v:2 h264_nvenc -preset p4 -b:v:2 1500k \
  -map a:0 -c:a aac -b:a 128k \
  -f hls -var_stream_map "v:0,a:0 v:1,a:0 v:2,a:0" \
  -master_pl_name master.m3u8 \
  -hls_time 6 -hls_list_size 6 \
  /var/www/hls/stream_%v.m3u8

scale_cuda maintient également la mise à l'échelle sur le GPU — essentiel pour la densité. Une seule RTX PRO 4500 gère 8 à 12 de ces échelles 1080p simultanément.

Étape 5 — Passer à HEVC ou AV1 pour économiser de la bande passante

HEVC (hevc_nvenc) réduit le débit binaire d'environ 35-40% pour la même qualité. AV1 (av1_nvenc, Ada/Blackwell uniquement) économise encore plus :

# HEVC
-c:v hevc_nvenc -preset p4 -b:v 3M -maxrate 4M -bufsize 8M

# AV1 (RTX 40-series / Blackwell)
-c:v av1_nvenc -preset p4 -b:v 2.5M

Surveillez votre parc de STB — les anciens boîtiers MAG et de nombreuses Smart TV ne décodent pas HEVC/AV1 de manière fiable. Testez avant de changer tout votre panneau, ou vous dépenserez plus en tickets de support que vous n'économiserez en bande passante.

Étape 6 — Surveiller l'utilisation du GPU

Surveillez la charge de l'encodeur en temps réel :

nvidia-smi dmon -s u

La colonne enc affiche l'utilisation de NVENC. Si elle est bloquée à 100%, vous avez atteint la limite de session du GPU — ajoutez un second GPU ou déplacez certains flux vers un autre boîtier.

Référence de densité

Nombre approximatif d'échelles concurrentes que nous observons en production :

GPUÉchelles ABR 1080pÉchelles SD
RTX PRO 4500 (32 GB)8-1230-40
RTX PRO 6000 (96 GB)20+30-50
RTX 4090 (24 GB)6-8 (3-session limit)20-30

La série RTX PRO n'a pas de limite de session NVENC — c'est pourquoi nous la recommandons pour les fermes de transcodage sérieuses plutôt que la RTX 4090 grand public.

Prochaines étapes

Intégrez ceci dans un service systemd ou un gestionnaire de flux (Nimble, Flussonic). Pour une configuration complète du panneau, consultez notre guide Xtream UI. Pour dimensionner le GPU en fonction de votre nombre de chaînes, vérifiez la quantité de GPU dont vous avez réellement besoin ou parlez à l'ingénierie.