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-smiSe estiver faltando:
apt update
apt install -y nvidia-driver-550 nvidia-utils-550
rebootApó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/ffprobeVerifique se o NVENC está disponível:
ffmpeg -hide_banner -encoders | grep nvencVocê 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.m3u8scale_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.5MObserve 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 uA 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:
| GPU | ABR ladders 1080p | ladders SD |
|---|---|---|
| RTX PRO 4500 (32 GB) | 8-12 | 30-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.