Este es mi comando actual para cambiar el tamaño de los videos (1080p) de 2GB a 300MB, pero lleva mucho tiempo:
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v libx264 -preset slow -crf 21 -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
Probé nvenc con mi NVIDIA GTX1070:
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v h264_nvenc -preset slow -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
El tamaño de salida siempre es 3⨉ o 5⨉ del tamaño original; nvenc no lo utiliza -crf
.
Entonces, ¿cómo uso nvenc con ffmpeg para convertir / redimensionar un video con alta calidad y tamaño pequeño? ¿Debo usar la GPU para codificar?
ffmpeg
video-encoding
hongducwb
fuente
fuente
slow
afast
en tu primer comando. CRF no está implementado ennvenc
.Respuestas:
Para codificaciones basadas en CRF, pase los siguientes argumentos en el fragmento a continuación a FFmpeg:
Por supuesto, deberá ajustar las tasas de bits objetivo y un
cq
valor fijo . 19 es la configuración recomendada ya que es 'visualmente idéntica a 0, pero conserva una buena compensación de compresión al tamaño del archivo. Vea este artículo para obtener más información sobre lo que hace CRF.Tenga en cuenta que la
-cq
escala es logarítmica, lo que significa que 0 es esencialmente sin pérdidas y 51 sería lo peor.La calidad puede mejorarse aún más mediante la adición de opciones como cuadros B (limite esto a 3, como máximo, y esto requiere el perfil principal H.264 y superior. Los perfiles de línea de base no admiten cuadros B. Para hacer esto, pase
-bf {uint}
a el codificador de video, de modo que-bf:v 4
resultaría en que el codificador use 4 cuadros B.Las piezas clave son el
-cq:v 19
y los-rc:v vbr_hq
argumentos, que le permiten ajustar el codificador tanto con una tasa de bits variable preestablecida y una tasa de bits máxima permisible (-b:v
y-maxrate:v
) mientras que se adhiere a un valor de 19 CRF.Y ahora, pequeñas notas sobre NVENC y su ajuste para codificaciones de alta calidad:
NVENC, como cualquier otro codificador basado en hardware, tiene varias limitaciones, y en particular con HEVC, estas son las limitaciones conocidas:
En Pascal:
Para codificaciones HEVC, se aplican las siguientes limitaciones:
Turing tiene todas las mejoras disponibles para Pascal, con la adición de soporte de cuadro B para HEVC y la capacidad de usar cuadros B como referencia. Consulte esta respuesta para ver un ejemplo de esta capacidad.
Y en Maxwell Gen 2 (GPU de la serie GM200x):
La codificación HEVC carece de las siguientes características:
El impacto aquí para Maxwell es que las escenas con mucho movimiento con HEVC bajo tasas de bits restringidas pueden sufrir artefactos (bloqueos) debido a las funciones de búsqueda anticipada que faltan y las capacidades de filtrado de bucle de desplazamiento de muestra adaptable (SAO). Pascal ha mejorado algo esta capacidad, pero dependiendo de la versión del SDK con la que se construyó el codificador de video, es posible que no todas las funciones estén disponibles.
Por ejemplo, el modo de predicción ponderado para codificaciones H.264 en Pascal requiere NVENC SDK 8.0x y superior, y este modo de codificación también deshabilitará el soporte de trama B. Del mismo modo, la combinación de escaladores basados en hardware que se ejecutan con Nvidia Performance Primitives (NPP) con NVENC puede introducir mejoras de rendimiento con aplicaciones de escalado de video a costa de escalar artefactos, particularmente con contenido mejorado. Lo mismo también afecta la tubería de codificación de video ya que las funciones de escalado de NPP se ejecutan fuera de los núcleos CUDA en la GPU, y como tal, el impacto en el rendimiento introducido por la carga adicional debe analizarse caso por caso para determinar si la calidad del rendimiento la compensación es aceptable.
Tenga esto en cuenta: un codificador basado en hardware siempre ofrecerá una personalización algo menor que una implementación basada en software equivalente, y como tal, su kilometraje y calidad de salida aceptable siempre serán diferentes.
Y para su referencia:
Con FFmpeg, siempre puede consultar la configuración de un codificador para personalizarla:
Entonces, para codificadores basados en NVENC, puede ejecutar:
También puede ver todos los codificadores basados en NVENC y los escaladores basados en NPP (si está construido como tal) ejecutando:
Salida de muestra en mi banco de pruebas:
fuente
vbr_minqp
parece estar en desuso ahora. Estoy de acuerdo en que esta respuesta podría malinterpretarse ya que no hay modo CRF parah264_nvenc
.Creo que encontré una solución:
Parece que h264_nvenc usa en
-qp
lugar de-crf
. Esta opción solo funciona mientras-rc
está configurado enconstqp
.fuente
-qp
es todo diferente de-crf
. h264_nvenc 's-qp
es equivalente a libx264 ' s-qp
Para el
-crf
reemplazo de libx264 puede ser-cq
o-qp
desde h264_nvenc:-crf
Seleccione la calidad para el modo de calidad constante-cq
Establezca el nivel de calidad objetivo (0 a 51, 0 significa automático) para el modo de calidad constante en el control de velocidad VBR-qp
Método de control de velocidad de parámetros de cuantificación constante (de -1 a 51) (predeterminado -1)Método de codificación acelerado por hardware más rápido:
-resize
resolución en entrada (en hardware); no es necesario compilar ffmpeg--enable-libnpp
para elscale_npp
filtro.Para más información:
ffmpeg -h encoder=h264_nvenc
fuente