La transcodificación por software x264 consume las CPU — un solo stream H.264 de 1080p con un preset medio consume 4-6 núcleos. NVENC, el codificador por hardware integrado en las GPU NVIDIA, realiza el mismo trabajo con una fracción de la potencia y libera tus CPU para la ingesta y el empaquetado. Esta guía configura FFmpeg con NVENC en Ubuntu para la transcodificación de IPTV/streaming en vivo.
Nos enfocamos en un servidor GPU con una RTX PRO 4500 o 6000 Blackwell — consulta nuestra página de servidor de transcodificación de video para el hardware.
Requisitos previos
- Ubuntu 22.04 con una GPU NVIDIA (RTX PRO, RTX 4090, L4, L40S)
- Acceso root
- Familiaridad básica con la línea de comandos de FFmpeg
Paso 1 — Instalar el controlador NVIDIA
En un equipo GPU de Hostfory, el controlador suele estar preinstalado. Verifica:
nvidia-smiSi falta:
apt update
apt install -y nvidia-driver-550 nvidia-utils-550
rebootDespués del reinicio, nvidia-smi debería mostrar tu GPU, la versión del controlador y la versión de CUDA.
Paso 2 — Instalar FFmpeg con soporte NVENC
El FFmpeg del repositorio de Ubuntu a menudo carece de NVENC. Instala una compilación que lo incluya, o compila. La ruta más rápida es la compilación estática 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/ffprobeVerifica que NVENC esté disponible:
ffmpeg -hide_banner -encoders | grep nvencDeberías ver h264_nvenc, hevc_nvenc, y en Blackwell/Ada, av1_nvenc.
Paso 3 — Una transcodificación básica en vivo
Extrae un stream de entrada, transcodifica a H.264 NVENC, y envía a una salida:
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 clave:
-hwaccel cuda -hwaccel_output_format cuda— mantiene los frames en la GPU, evita viajes de ida y vuelta a la CPU-preset p4— preset NVENC (p1 más rápido → p7 más lento/mejor calidad). p4 es un buen equilibrio para vivo-tune ll— ajuste de baja latencia para vivo-b:v 5M -maxrate 6M -bufsize 10M— objetivo 5 Mbps, limita los picos a 6 Mbps
Paso 4 — Construir una escalera ABR
Para streaming adaptativo, se generan múltiples escalones. Esto produce una escalera HLS de 3 escalones (1080p/720p/480p) a partir de una entrada, todo en la 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 también mantiene el escalado en la GPU — crítico para la densidad. Una sola RTX PRO 4500 maneja de 8 a 12 de estas escaleras de 1080p concurrentemente.
Paso 5 — Cambiar a HEVC o AV1 para ahorrar ancho de banda
HEVC (hevc_nvenc) reduce el bitrate ~35-40% para la misma calidad. AV1 (av1_nvenc, solo Ada/Blackwell) ahorra aún más:
# 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.5MVigila tu flota de STB — los decodificadores MAG antiguos y muchos Smart TV no decodifican HEVC/AV1 de forma fiable. Prueba antes de cambiar todo tu panel, o gastarás más en tickets de soporte de lo que ahorras en ancho de banda.
Paso 6 — Monitorizar la utilización de la GPU
Observa la carga del codificador en tiempo real:
nvidia-smi dmon -s uLa columna enc muestra la utilización de NVENC. Si está al 100%, has alcanzado el límite de sesiones de la GPU — añade una segunda GPU o mueve algunos streams a otro equipo.
Referencia de densidad
Recuentos aproximados de escaleras concurrentes que vemos en producción:
| GPU | Escaleras ABR 1080p | Escaleras SD |
|---|---|---|
| RTX PRO 4500 (32 GB) | 8-12 | 30-40 |
| RTX PRO 6000 (96 GB) | 20+ | 30-50 |
| RTX 4090 (24 GB) | 6-8 (límite de 3 sesiones) | 20-30 |
La serie RTX PRO no tiene límite de sesiones NVENC — por eso la recomendamos para granjas de transcodificación serias sobre la RTX 4090 de consumo.
Próximos pasos
Envuelve esto en un servicio systemd o un gestor de streams (Nimble, Flussonic). Para una configuración completa del panel, consulta nuestra guía de Xtream UI. Para dimensionar la GPU para tu número de canales, verifica cuánta GPU necesitas realmente o habla con ingeniería.