A transcodificação x264 por software sobrecarrega CPUs — um único stream H.264 de 1080p com preset médio consome 4-6 núcleos. O NVENC, o codificador de hardware integrado nas GPUs NVIDIA, faz o mesmo trabalho com uma fração da energia e libera suas CPUs para ingestão e empacotamento. Este guia configura o FFmpeg com NVENC no Ubuntu para transcodificação de IPTV/streaming ao vivo.

Nosso foco é um servidor GPU com uma RTX PRO 4500 ou 6000 Blackwell — veja nossa página de servidor de transcodificação de vídeo para o hardware.

Pré-requisitos

  • Ubuntu 22.04 com uma GPU NVIDIA (RTX PRO, RTX 4090, L4, L40S)
  • Acesso root
  • Familiaridade básica com a linha de comando do FFmpeg

Passo 1 — Instale o driver NVIDIA

Em um servidor GPU Hostfory, o driver geralmente vem pré-instalado. Verifique:

nvidia-smi

Se estiver faltando:

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

Após a reinicialização, nvidia-smi deve exibir sua GPU, versão do driver e versão do CUDA.

Passo 2 — Instale o FFmpeg com suporte NVENC

O FFmpeg do repositório do Ubuntu frequentemente não possui NVENC. Instale uma build que o inclua, ou compile. O caminho mais rápido é a build estática do 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

Verifique se o NVENC está disponível:

ffmpeg -hide_banner -encoders | grep nvenc

Você deve ver h264_nvenc, hevc_nvenc e, em Blackwell/Ada, av1_nvenc.

Passo 3 — Uma transcodificação básica ao vivo

Puxe um stream de entrada, transcodifique para H.264 NVENC, envie para uma saída:

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"

Flags principais:

  • -hwaccel cuda -hwaccel_output_format cuda — mantém os frames na GPU, evita idas e vindas à CPU
  • -preset p4 — preset NVENC (p1 mais rápido → p7 mais lento/melhor qualidade). p4 é um bom equilíbrio para live
  • -tune ll — ajuste de baixa latência para live
  • -b:v 5M -maxrate 6M -bufsize 10M — alvo de 5 Mbps, limita picos a 6 Mbps

Passo 4 — Construa uma ABR ladder

Para streaming adaptativo, você gera múltiplos degraus. Isso produz uma HLS ladder de 3 degraus (1080p/720p/480p) a partir de uma entrada, tudo na 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 também mantém o escalonamento na GPU — crítico para a densidade. Uma única RTX PRO 4500 lida com 8-12 dessas ladders de 1080p simultaneamente.

Passo 5 — Mude para HEVC ou AV1 para economia de largura de banda

HEVC (hevc_nvenc) reduz o bitrate em ~35-40% para a mesma qualidade. AV1 (av1_nvenc, apenas Ada/Blackwell) economiza ainda mais:

# 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

Observe sua frota de STBs — boxes MAG mais antigas e muitas Smart TVs não decodificam HEVC/AV1 de forma confiável. Teste antes de mudar todo o seu painel, ou você gastará mais em tickets de suporte do que economizará em largura de banda.

Passo 6 — Monitore a utilização da GPU

Monitore a carga do codificador em tempo real:

nvidia-smi dmon -s u

A coluna enc mostra a utilização do NVENC. Se estiver travada em 100%, você atingiu o limite de sessões da GPU — adicione uma segunda GPU ou mova alguns streams para outro servidor.

Referência de densidade

Contagens aproximadas de ladders simultâneas que vemos em produção:

GPUABR ladders 1080pladders 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

A série RTX PRO não possui limite de sessões NVENC — é por isso que a recomendamos para farms de transcodificação sérias em vez da RTX 4090 de consumidor.

Próximos passos

Encapsule isso em um serviço systemd ou um gerenciador de stream (Nimble, Flussonic). Para uma configuração de painel completa, veja nosso guia do Xtream UI. Para dimensionar a GPU para sua contagem de canais, verifique quanto de GPU você realmente precisa ou fale com a engenharia.