¿Hay alguna forma de mejorar la calidad de salida de h264_nvenc?

Estoy comprimiendo algunos videos para archivarlos y llegué a esta configuración que me brinda una buena calidad general en un tamaño pequeño:

ffmpeg -threads 4 -y -hide_banner -i input.mp4 -vf scale=-2:480 -c:v libx264 -b:v 200k -preset slow -tune animation -movflags faststart -pix_fmt yuv420p -an -f mp4 -pass 1 NUL
ffmpeg -threads 4 -y -hide_banner -i input.mp4 -vf scale=-2:480 -c:v libx264 -b:v 200k -preset slow -tune animation -movflags faststart -pix_fmt yuv420p -pass 2 2-pass-x264.mp4

Esta calidad de salida es aceptable para mis necesidades:

marco codificado x264

Pero me gustaría disfrutar de la aceleración por hardware, es mucho más rápida.

Así que probé:

ffmpeg -hwaccel nvdec -y -hide_banner -i input.mp4 -vf scale=-2:480 -movflags faststart -pix_fmt yuv420p -c:v h264_nvenc -b:v 200k -maxrate 2M -bufsize 1M -rc-lookahead:v 30 -rc:v vbr_hq -preset slow -profile:v high -level 5.1 -an h264_nvenc.mp4

Pero esto me da una salida con peor calidad general y en partes complejas, las cosas empeoran:

marco codificado h264_nvenc

¿Es posible lograr casi la misma calidad general (para una tasa de bits baja) usando el codificador h264_nvenc?

Respuestas (3)

No, realmente no. Las nuevas tarjetas nvidia basadas en Turing producirán una mejor calidad que las generaciones anteriores. Pero dado que nvenc es una función fija y no un software que se ejecuta en la GPU, no se puede actualizar ni modificar, excepto algunas opciones, como los ajustes preestablecidos.

Probé todas las opciones posibles, esto es realmente una pena.
Es solo la naturaleza de la codificación de video acelerada por hardware. No existe tal cosa como un almuerzo gratis.

h264_nvenc es capaz de codificar en calidad constante, al menos desde Pascal en adelante. Tuve que investigar un poco en Internet para descubrir cómo usarlo correctamente, pero finalmente encontré una fórmula que funcionaba.

Un comando como el siguiente grabará con calidad constante, y el valor CQ 26 producirá aproximadamente la misma pero ligeramente mejor calidad, medida con VMAF, como una codificación libx264 con las siguientes opciones: -vcodec libx264 -level 4.1 -profile:v high -tune film -preset medium -crf 23. La tasa de bits H264_Nvenc fue aproximadamente un 19 % más alta que la codificación libx264, pero tuvo una puntuación VMAF ligeramente mejor. Hice estas pruebas en algunas grabaciones de juegos de 1080p60, pero también en algunos avances de películas de 1080p.

ffmpeg -i input.mkv -c:v h264_nvenc -preset p6 -profile:v high -tune hq -rc-lookahead 8 -bf 2 -rc vbr -cq 26 -b:v 0 -maxrate 120M -bufsize 240M output.mkv

Importante:

  • A menos que establezca la tasa máxima y el tamaño del búfer a través de -maxrate 120M -bufsize 240M, el modo CQ no se comporta en consecuencia y reducir su valor no producirá mejores resultados. El modo de calidad constante se activa especificando el control de tasa de bits variable junto con un parámetro CQ, una tasa de bits establecida en cero y los dos parámetros anteriores establecidos en un valor grande que no limitará la salida. No tenga miedo de esos valores, ya que la tasa de bits será bastante buena.
  • Los límites anteriores obligarán a la codificación a producir una codificación de nivel 5.1. Incluso los límites más altos, como 300/600, produjeron un video con el nivel 6.2, que tuvo problemas para reproducirse correctamente en NLE como Vegas Pro. Si necesita un nivel máximo determinado, asegúrese de que la tasa máxima y el tamaño del búfer estén dentro de los límites del nivel y verifique la salida resultante.

Especifique la tasa de bits tal como -b:v 0se hizo el truco, la tasa de bits general pasó de 2ma 16m.

ffmpeg -i in.mp4 -c:v h264_nvenc -b:v 0 out.mp4