El sitio web de alojamiento de vídeos LBRYsugiere a los usuarios que prueben el siguiente comando para comprimir sus cargas:
ffmpeg -i input.avi -c:v libx264 -crf 21 -preset faster -pix_fmt yuv420p -maxrate 5000K -bufsize 5000K -vf 'scale=if(gte(iw\,ih)\,min(1920\,iw)\,-2):if(lt(iw\,ih)\,min(1920\,ih)\,-2)' -movflags +faststart -c:a aac -b:a 160k output.mp4
¿Cuál sería el equivalente más cercano usando h264_nvenc en lugar de libx264?
Respuesta1
Pruebe estos comandos con las siguientes suposiciones:
i. La GPU predeterminada seleccionada para NVENC es 0
y que la GPU sea compatible con NVENC. Verestepara obtener más información sobre las capacidades de NVENC, incluida la infraestructura de aceleración de hardware disponible para FFmpeg en hardware NVIDIA compatible. La selección de GPU con aceleración de hardware NVDEC se alterna a través de la opción global -hwaccel_device 0
y para el codificador, a través de h264_nvenc
la opción de códec privado -gpu 0
. En un sistema con múltiples GPU, seleccione una GPU válida como se indica en nvidia-smi
.
ii. Las operaciones de escalado se realizan con scale_npp
OR scale_cuda
, ya que se ejecutan exclusivamente en la GPU. La disponibilidad de estos filtros depende decómoSe configuró FFmpeg, como se explica a continuación. Para conocer su usabilidad, consulte ffmpeg -h filter=scale_npp
y ffmpeg -h filter=scale_cuda
respectivamente.
III. El soporte de aceleración de hardware para códecs específicos depende de la plataforma y del controlador. Estos se pueden verificar con nv-video-info
los proyectos de Philip Langdale.nvdecinfo
de Philip Langdale , como se documenta enesteResponde, si estás en Linux. Tenga en cuenta quenoNVDEC admite todos los formatos de vídeo y, como tal, se proporcionará una alternativa a la decodificación basada en software.
IV. Para el control de velocidad en uso, he seleccionado el modo de velocidad de bits variable (configurado a través de la opción de códec privado -rc:v vbr
) con control de velocidad de parámetro de calidad constante establecido en un valor de 21. Los valores válidos para NVENC son de 0 a 51. La velocidad de bits no está configurada explícitamente. vía -b:v 0
para cumplir con las limitaciones del modo de control de velocidad seleccionado en NVENC. Sin embargo, la tasa de bits máxima y el tamaño del búfer permanecen establecidos para que coincidan con su configuración en libx264
. VeresteResponda sobre por qué se seleccionaron estos parámetros.
v. Dependiendo de la versión específica de FFmpeg creada y la versión del ffnvcodec
paquete de encabezado en uso, es decir, de una versión de lanzamiento O de git master, será necesario cambiar los siguientes parámetros: (i). El modo de control de velocidad para versiones anteriores de FFmpeg configuradas con versiones anteriores de ffnvcodec
paquetes de encabezado solo necesita modificar la opción de control de velocidad a tasa de bits constante a través de -rc:v vbr_hq
. Los nombres preestablecidos permanecen sin cambios.
(ii). Para las compilaciones actuales de FFmpeg de git que coincidan con la versión actual de git del ffnvcodec
paquete de encabezado, entonces los parámetros para el control de velocidad (establecidos a través de rc:v vbr
) deben configurarse en modo de velocidad de bits constante, emparejados con un valor preestablecido con nombre (a través de -preset:v p{1-7}
), donde el valor preestablecido varía desde p1
(más rápido ) a p7
(más lento) y una opción de ajuste válida (establecida mediante -tune:v
), donde el valor oscila entre:
hq 1 E..V...... High quality
ll 2 E..V...... Low latency
ull 3 E..V...... Ultra low latency
lossless 4 E..V...... Lossless
Puede sustituir los valores de ajuste por nombres completos ( ll
hasta lossless
) en las líneas de comando de FFmpeg o mediante los números que los identifican ( 1
hasta 4
) como se muestra arriba.
Para su referencia, incluiré los parámetros en los que h264_nvenc
imprime la opción de ayuda del contenedor del codificador:
- Construcciones actuales de FFmpeg:
ffmpeg -h encoder=h264_nvenc
Encoder h264_nvenc [NVIDIA NVENC H.264 encoder]:
General capabilities: delay hardware
Threading capabilities: none
Supported hardware devices: cuda cuda
Supported pixel formats: yuv420p nv12 p010le yuv444p p016le yuv444p16le bgr0 rgb0 cuda
h264_nvenc AVOptions:
-preset <int> E..V...... Set the encoding preset (from 0 to 18) (default p4)
default 0 E..V......
slow 1 E..V...... hq 2 passes
medium 2 E..V...... hq 1 pass
fast 3 E..V...... hp 1 pass
hp 4 E..V......
hq 5 E..V......
bd 6 E..V......
ll 7 E..V...... low latency
llhq 8 E..V...... low latency hq
llhp 9 E..V...... low latency hp
lossless 10 E..V......
losslesshp 11 E..V......
p1 12 E..V...... fastest (lowest quality)
p2 13 E..V...... faster (lower quality)
p3 14 E..V...... fast (low quality)
p4 15 E..V...... medium (default)
p5 16 E..V...... slow (good quality)
p6 17 E..V...... slower (better quality)
p7 18 E..V...... slowest (best quality)
-tune <int> E..V...... Set the encoding tuning info (from 1 to 4) (default hq)
hq 1 E..V...... High quality
ll 2 E..V...... Low latency
ull 3 E..V...... Ultra low latency
lossless 4 E..V...... Lossless
-profile <int> E..V...... Set the encoding profile (from 0 to 3) (default main)
baseline 0 E..V......
main 1 E..V......
high 2 E..V......
high444p 3 E..V......
-level <int> E..V...... Set the encoding level restriction (from 0 to 62) (default auto)
auto 0 E..V......
1 10 E..V......
1.0 10 E..V......
1b 9 E..V......
1.0b 9 E..V......
1.1 11 E..V......
1.2 12 E..V......
1.3 13 E..V......
2 20 E..V......
2.0 20 E..V......
2.1 21 E..V......
2.2 22 E..V......
3 30 E..V......
3.0 30 E..V......
3.1 31 E..V......
3.2 32 E..V......
4 40 E..V......
4.0 40 E..V......
4.1 41 E..V......
4.2 42 E..V......
5 50 E..V......
5.0 50 E..V......
5.1 51 E..V......
5.2 52 E..V......
6.0 60 E..V......
6.1 61 E..V......
6.2 62 E..V......
-rc <int> E..V...... Override the preset rate-control (from -1 to INT_MAX) (default -1)
constqp 0 E..V...... Constant QP mode
vbr 1 E..V...... Variable bitrate mode
cbr 2 E..V...... Constant bitrate mode
vbr_minqp 8388612 E..V...... Variable bitrate mode with MinQP (deprecated)
ll_2pass_quality 8388616 E..V...... Multi-pass optimized for image quality (deprecated)
ll_2pass_size 8388624 E..V...... Multi-pass optimized for constant frame size (deprecated)
vbr_2pass 8388640 E..V...... Multi-pass variable bitrate mode (deprecated)
cbr_ld_hq 8388616 E..V...... Constant bitrate low delay high quality mode
cbr_hq 8388624 E..V...... Constant bitrate high quality mode
vbr_hq 8388640 E..V...... Variable bitrate high quality mode
-rc-lookahead <int> E..V...... Number of frames to look ahead for rate-control (from 0 to INT_MAX) (default 0)
-surfaces <int> E..V...... Number of concurrent surfaces (from 0 to 64) (default 0)
-cbr <boolean> E..V...... Use cbr encoding mode (default false)
-2pass <boolean> E..V...... Use 2pass encoding mode (default auto)
-gpu <int> E..V...... Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. (from -2 to INT_MAX) (default any)
any -1 E..V...... Pick the first device available
list -2 E..V...... List the available devices
-delay <int> E..V...... Delay frame output by the given amount of frames (from 0 to INT_MAX) (default INT_MAX)
-no-scenecut <boolean> E..V...... When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts (default false)
-forced-idr <boolean> E..V...... If forcing keyframes, force them as IDR frames. (default false)
-b_adapt <boolean> E..V...... When lookahead is enabled, set this to 0 to disable adaptive B-frame decision (default true)
-spatial-aq <boolean> E..V...... set to 1 to enable Spatial AQ (default false)
-spatial_aq <boolean> E..V...... set to 1 to enable Spatial AQ (default false)
-temporal-aq <boolean> E..V...... set to 1 to enable Temporal AQ (default false)
-temporal_aq <boolean> E..V...... set to 1 to enable Temporal AQ (default false)
-zerolatency <boolean> E..V...... Set 1 to indicate zero latency operation (no reordering delay) (default false)
-nonref_p <boolean> E..V...... Set this to 1 to enable automatic insertion of non-reference P-frames (default false)
-strict_gop <boolean> E..V...... Set 1 to minimize GOP-to-GOP rate fluctuations (default false)
-aq-strength <int> E..V...... When Spatial AQ is enabled, this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive) (from 1 to 15) (default 8)
-cq <float> E..V...... Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control (from 0 to 51) (default 0)
-aud <boolean> E..V...... Use access unit delimiters (default false)
-bluray-compat <boolean> E..V...... Bluray compatibility workarounds (default false)
-init_qpP <int> E..V...... Initial QP value for P frame (from -1 to 51) (default -1)
-init_qpB <int> E..V...... Initial QP value for B frame (from -1 to 51) (default -1)
-init_qpI <int> E..V...... Initial QP value for I frame (from -1 to 51) (default -1)
-qp <int> E..V...... Constant quantization parameter rate control method (from -1 to 51) (default -1)
-weighted_pred <int> E..V...... Set 1 to enable weighted prediction (from 0 to 1) (default 0)
-coder <int> E..V...... Coder type (from -1 to 2) (default default)
default -1 E..V......
auto 0 E..V......
cabac 1 E..V......
cavlc 2 E..V......
ac 1 E..V......
vlc 2 E..V......
-b_ref_mode <int> E..V...... Use B frames as references (from 0 to 2) (default disabled)
disabled 0 E..V...... B frames will not be used for reference
each 1 E..V...... Each B frame will be used for reference
middle 2 E..V...... Only (number of B frames)/2 will be used for reference
-a53cc <boolean> E..V...... Use A53 Closed Captions (if available) (default true)
-dpb_size <int> E..V...... Specifies the DPB size used for encoding (0 means automatic) (from 0 to INT_MAX) (default 0)
-multipass <int> E..V...... Set the multipass encoding (from 0 to 2) (default disabled)
disabled 0 E..V...... Single Pass
qres 1 E..V...... Two Pass encoding is enabled where first Pass is quarter resolution
fullres 2 E..V...... Two Pass encoding is enabled where first Pass is full resolution
-ldkfs <int> E..V...... Low delay key frame scale; Specifies the Scene Change frame size increase allowed in case of single frame VBV and CBR (from 0 to 255) (default 0)
- Compilaciones de FFmpeg más antiguas:
ffmpeg -h encoder=h264_nvenc
Encoder h264_nvenc [NVIDIA NVENC H.264 encoder]:
General capabilities: delay
Threading capabilities: none
Supported pixel formats: yuv420p nv12 p010le yuv444p yuv444p16le bgr0 rgb0 cuda
h264_nvenc AVOptions:
-preset <int> E..V.... Set the encoding preset (from 0 to 11) (default medium)
default E..V....
slow E..V.... hq 2 passes
medium E..V.... hq 1 pass
fast E..V.... hp 1 pass
hp E..V....
hq E..V....
bd E..V....
ll E..V.... low latency
llhq E..V.... low latency hq
llhp E..V.... low latency hp
lossless E..V....
losslesshp E..V....
-profile <int> E..V.... Set the encoding profile (from 0 to 3) (default main)
baseline E..V....
main E..V....
high E..V....
high444p E..V....
-level <int> E..V.... Set the encoding level restriction (from 0 to 51) (default auto)
auto E..V....
1 E..V....
1.0 E..V....
1b E..V....
1.0b E..V....
1.1 E..V....
1.2 E..V....
1.3 E..V....
2 E..V....
2.0 E..V....
2.1 E..V....
2.2 E..V....
3 E..V....
3.0 E..V....
3.1 E..V....
3.2 E..V....
4 E..V....
4.0 E..V....
4.1 E..V....
4.2 E..V....
5 E..V....
5.0 E..V....
5.1 E..V....
-rc <int> E..V.... Override the preset rate-control (from -1 to INT_MAX) (default -1)
constqp E..V.... Constant QP mode
vbr E..V.... Variable bitrate mode
cbr E..V.... Constant bitrate mode
vbr_minqp E..V.... Variable bitrate mode with MinQP (deprecated)
ll_2pass_quality E..V.... Multi-pass optimized for image quality (deprecated)
ll_2pass_size E..V.... Multi-pass optimized for constant frame size (deprecated)
vbr_2pass E..V.... Multi-pass variable bitrate mode (deprecated)
cbr_ld_hq E..V.... Constant bitrate low delay high quality mode
cbr_hq E..V.... Constant bitrate high quality mode
vbr_hq E..V.... Variable bitrate high quality mode
-rc-lookahead <int> E..V.... Number of frames to look ahead for rate-control (from 0 to INT_MAX) (default 0)
-surfaces <int> E..V.... Number of concurrent surfaces (from 0 to 64) (default 0)
-cbr <boolean> E..V.... Use cbr encoding mode (default false)
-2pass <boolean> E..V.... Use 2pass encoding mode (default auto)
-gpu <int> E..V.... Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. (from -2 to INT_MAX) (default any)
any E..V.... Pick the first device available
list E..V.... List the available devices
-delay <int> E..V.... Delay frame output by the given amount of frames (from 0 to INT_MAX) (default INT_MAX)
-no-scenecut <boolean> E..V.... When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts (default false)
-forced-idr <boolean> E..V.... If forcing keyframes, force them as IDR frames. (default false)
-b_adapt <boolean> E..V.... When lookahead is enabled, set this to 0 to disable adaptive B-frame decision (default true)
-spatial-aq <boolean> E..V.... set to 1 to enable Spatial AQ (default false)
-temporal-aq <boolean> E..V.... set to 1 to enable Temporal AQ (default false)
-zerolatency <boolean> E..V.... Set 1 to indicate zero latency operation (no reordering delay) (default false)
-nonref_p <boolean> E..V.... Set this to 1 to enable automatic insertion of non-reference P-frames (default false)
-strict_gop <boolean> E..V.... Set 1 to minimize GOP-to-GOP rate fluctuations (default false)
-aq-strength <int> E..V.... When Spatial AQ is enabled, this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive) (from 1 to 15) (default 8)
-cq <float> E..V.... Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control (from 0 to 51) (default 0)
-aud <boolean> E..V.... Use access unit delimiters (default false)
-bluray-compat <boolean> E..V.... Bluray compatibility workarounds (default false)
-init_qpP <int> E..V.... Initial QP value for P frame (from -1 to 51) (default -1)
-init_qpB <int> E..V.... Initial QP value for B frame (from -1 to 51) (default -1)
-init_qpI <int> E..V.... Initial QP value for I frame (from -1 to 51) (default -1)
-qp <int> E..V.... Constant quantization parameter rate control method (from -1 to 51) (default -1)
-weighted_pred <int> E..V.... Set 1 to enable weighted prediction (from 0 to 1) (default 0)
-coder <int> E..V.... Coder type (from -1 to 2) (default default)
default E..V....
auto E..V....
cabac E..V....
cavlc E..V....
ac E..V....
vlc E..V....
Y ahora a los parámetros en uso:
1. Uso de FFmpeg con decodificación completa acelerada por hardware a través de nvdec
:
(a). El escalado se realiza con el scale_npp
archivador, disponible cuando FFmpeg se compila con el SDK CUDA propietario (cuando las banderas --enable-nonfree --enable-cuda-nvcc --nvccflags="-gencode arch=compute_52,code=sm_52 -O2"
se pasan en ./configure
el momento de la compilación):
Construcciones más antiguas:
ffmpeg -threads 1 -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input.avi \
-vf 'scale_npp=w=1920:h=1080:interp_algo=lanczos' -c:v h264_nvenc \
-gpu:v 0 -cq:v 21 -rc:v vbr -preset:v fast \
-b:v 0 -maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
Construcciones actuales:
ffmpeg -threads 1 -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input.avi \
-vf 'scale_npp=w=1920:h=1080:interp_algo=lanczos' -c:v h264_nvenc \
-gpu:v 0 -cq:v 21 -rc:v vbr -tune:v ll -preset:v p1 \
-b:v 0 -maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
(b). El escalado se realiza con el scale_cuda
archivador, disponible cuando FFmpeg se construye con el back-end clang configurado como nvcc
generador llvm
(cuando las banderas --enable-cuda-llvm --nvccflags="--cuda-gpu-arch=sm_52 -O2"
se pasan en ./configure
el momento de la compilación):
Construcciones más antiguas:
ffmpeg -threads 1 -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input.avi \
-vf 'scale_cuda=w=1920:h=1080' -c:v h264_nvenc \
-gpu:v 0 -cq:v 21 -rc:v vbr -preset:v fast \
-b:v 0 -maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
Construcciones actuales:
ffmpeg -threads 1 -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input.avi \
-vf 'scale_cuda=w=1920:h=1080' -c:v h264_nvenc \
-gpu:v 0 -cq:v 21 -rc:v vbr -tune:v ll -preset:v p1 \
-b:v 0 -maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
2. Uso de respaldo de decodificación basado en software:
Tenga en cuenta que la asignación de GPU se realiza a través del filtro hwupload_cuda=0
que inicializa un CUDA HWContext vinculado a GPU 0 para todas las operaciones de escalado, y para el h264_nvenc
contenedor del codificador, -gpu:v 0
sigue la opción privada.
(a). Usando el scale_npp
filtro:
Construcciones más antiguas:
ffmpeg -threads 2 -i input.avi -vf 'hwupload_cuda=0,scale_npp=w=1920:h=1080:interp_algo=lanczos' \
-c:v h264_nvenc -gpu:v 0 -cq:v 21 -rc:v vbr -preset:v fast -b:v 0 \
-maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
Construcciones actuales:
ffmpeg -threads 2 -i input.avi -vf 'hwupload_cuda=0,scale_npp=w=1920:h=1080:interp_algo=lanczos' \
-c:v h264_nvenc -gpu:v 0 -cq:v 21 -rc:v vbr -tune:v ll -preset:v p1 -b:v 0 \
-maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
(b). Usando el scale_cuda
filtro:
Construcciones más antiguas:
ffmpeg -threads 2 -i input.avi -vf 'hwupload_cuda=0,scale_cuda=w=1920:h=1080' \
-c:v h264_nvenc -gpu:v 0 -cq:v 21 -rc:v vbr -preset:v fast -b:v 0 \
-maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
Construcciones actuales:
ffmpeg -threads 2 -i input.avi -vf 'hwupload_cuda=0,scale_cuda=w=1920:h=1080' \
-c:v h264_nvenc -gpu:v 0 -cq:v 21 -rc:v vbr -tune:v ll -preset:v p1 -b:v 0 \
-maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
Por favor, pruebe e informe sus hallazgos.