Perfil de Calidad Constante HW H265

Actualizaré y veré. Probé cq en una versión anterior de mi perfil. La documentación de ffmpeg no es muy clara, pero la documentación de NVidia para su extensión mencionaba crf vs cq para calidad constante. De todos modos, para la mayoría de las codificaciones, puedo hacer un programa de una hora en unos 10 minutos :slight_smile:

Puedes consultar a ffmpeg la lista de opciones disponibles para cada codificador; aquí aparece para h264_nvenc

Como puedes ver hay 2 opciones: -cq (que es lo que queremos, calidad constante) y -qp (que NO es lo que queremos, ya que es un cuantizador constante y resulta bastante inútil).

Quizá necesites también establecer -rc vbr, pero puedes probarlo con y sin él y decirme cómo te va.

-rc E..V… Sobrescribe el control de tasa predefinido (de -1 a INT_MAX) (predeterminado -1)
constqp E..V… Modo QP constante
vbr E..V… Modo de tasa variable
cbr E..V… Modo de tasa constante
vbr_minqp E..V… Modo de tasa variable con MinQP
ll_2pass_quality E..V… Multi-paso optimizado para calidad de imagen (solo para preajustes de baja latencia)
ll_2pass_size E..V… Multi-paso optimizado para tamaño de fotograma constante (solo para preajustes de baja latencia)
vbr_2pass E..V… Modo de tasa variable de dos pasadas
-rc-lookahead E..V… Número de fotogramas a analizar con antelación para el control de tasa (de -1 a INT_MAX) (predeterminado -1)
-surfaces E..V… Número de superficies simultáneas (de 0 a 64) (predeterminado 32)
-cbr E..V… Usar modo de codificación cbr (predeterminado false)
-2pass E..V… Usar modo de codificación de dos pasadas (predeterminado auto)
-gpu E..V… Selecciona qué GPU compatible con NVENC usar. La primera GPU es 0, la segunda 1, etc. (de -2 a INT_MAX) (predeterminado any)
any E..V… Escoger el primer dispositivo disponible
list E..V… Listar los dispositivos disponibles
-delay E..V… Retrasar la salida de fotogramas el número dado de fotogramas (de 0 a INT_MAX) (predeterminado INT_MAX)
-no-scenecut E..V… Cuando la previsión está activada, poner esto a 1 para deshabilitar la inserción adaptativa de fotogramas I en cambios de escena (predeterminado false)
-forced-idr E..V… Si se forzan fotogramas clave, forzarlos como fotogramas IDR. (predeterminado false)
-b_adapt E..V… Cuando la previsión está activada, poner esto a 0 para deshabilitar la decisión adaptativa de fotogramas B (predeterminado true)
-spatial-aq E..V… poner a 1 para habilitar AQ espacial (predeterminado false)
-temporal-aq E..V… poner a 1 para habilitar AQ temporal (predeterminado false)
-zerolatency E..V… Poner a 1 para indicar operación con latencia cero (sin reordenación) (predeterminado false)
-nonref_p E..V… Poner a 1 para habilitar la inserción automática de fotogramas P no de referencia (predeterminado false)
-strict_gop E..V… Poner a 1 para minimizar las fluctuaciones de tasa entre GOP (predeterminado false)
-aq-strength E..V… Cuando AQ espacial está habilitado, se usa para especificar la intensidad de AQ. Escala de intensidad de 1 (bajo) a 15 (agresivo) (de 1 a 15) (predeterminado 8)
-cq E..V… Establece nivel de calidad objetivo (0 a 51, 0 significa automático) para el modo de calidad constante en control de tasa VBR (de 0 a 51) (predeterminado 0)
-aud E..V… Usar delimitadores de unidad de acceso (predeterminado false)
-bluray-compat E..V… Soluciones para compatibilidad con Bluray (predeterminado false)
-init_qpP E..V… Valor QP inicial para fotograma P (de -1 a 51) (predeterminado -1)
-init_qpB E..V… Valor QP inicial para fotograma B (de -1 a 51) (predeterminado -1)
-init_qpI E..V… Valor QP inicial para fotograma I (de -1 a 51) (predeterminado -1)
-qp E..V… Método de control de tasa de parámetro de cuantización constante (de -1 a 51) (predeterminado -1)

Gracias por lo anterior – estaba extrayendo los comandos del sitio para desarrolladores de NVidia; parecía exponer un subconjunto frente a FFMPEG en general. También noté en algunos registros que hevc_nvenc es el nuevo nombre del codificador y que nvenc_hevc quedó en desuso.

Así que probaré esta modificación en el perfil de codificación:

[----------------------]
[MKV HVEC Constant Quality]
Description=ADVERTENCIA: Codificación de calidad constante (25) de Handbrake con HVEC de Nvidia.
order=ffmpeg, handbrake
AllowH264CopyRemuxing=true
FixedResolution=true
AutoDeinterlace=true
ffmpeg-UsingHardwareEncoding=True
ffmpeg-general=-threads 0 -hwaccel auto
ffmpeg-video=-ss 9 -c:v hevc_nvenc -cq 25 -rc vbr -map 0:v
ffmpeg-audio=-acodec ac3 -ab 192k -map 0:a
ffmpeg-audioac3=-acodec ac3 -ab 384k -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
handbrake-UsingHardwareEncoding=true
handbrake-general=--decomb --denoise="weak" --loose-anamorphic --verbose=2 -T -O
handbrake-video=--start-at duration:3 -e x265 -q 18
handbrake-audio=-E ffac3 -R auto -B 192 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E ffac3 -R auto -B 384 -D 0 -a 1,2,3,4,5
handbrake-ext=.mkv
handbrake-audiodelay=skip
PreConversionCommercialRemover=true

Varía los números -cq y observa si cambia la calidad.

Lo hice. Lo bajé de 25 a 23. Un poco mejor. Creo que el vbr marca tanta diferencia como el resto.

vía Newton Mail

Prueba extremos como 5 o 40

Probé con 18 y menos; en ese punto hay un ahorro muy marginal en compresión (300 MB en un archivo de 1,3 GB). 23 parece ser el punto ideal para HEVC CQ.

Si entiendo correctamente los conceptos aquí con el último perfil listado.
Si hago -cq un entero más grande, la compresión es menos eficiente (es decir, archivo más grande).
¿Hace que la codificación sea más rápida o degrada la calidad del video per se?

Sí. Así es. También es una escala no lineal. Cuanto mayor el número, mayor el archivo. Si sabes algo sobre handbrake o h264, cq20 equivale a cq23 en hevc. ¡Gracias! Will.

El archivo es menos complejo, por lo que es ligeramente más fácil de codificar/decodificar. Dicho esto, notarás una diferencia en la calidad del video. Si grabas muchos deportes u otro contenido de movimiento rápido, deberías inclinarte por una opción más baja. ¡Buena suerte!

En primer lugar, ¡excelente perfil H265, funciona muy bien con una tarjeta Quadro como fuente de codificación por hardware!

En segundo lugar, he estado experimentando con este perfil y he intentado crear una versión H264 del codificador dedicado usando ffmpeg, pero he tenido problemas de sintaxis para que realmente procese, ¿hay alguna posibilidad de que tú/alguien haya estado experimentando con esto?

La razón detrás de este deseo es crear un perfil más rápido pero con calidad constante para programas que no requieren almacenamiento a largo plazo como deportes, Jeopardy, etc., que se verán una vez, quizás dos veces y luego desaparecerán en su mayor parte, para ahorrar tiempo en la transcodificación nocturna en comparación con archivos de almacenamiento a largo plazo como programas de televisión, películas, etc.

Gracias: entiendo perfectamente la dificultad de intentar descifrar los comandos de ffmpeg —la documentación es… escueta.

Quieres reemplazar HEVC_nvenc por h264_nvenc. Recuerda que la calidad constante es distinta entre 265 y 264. El valor «predeterminado» para 265 es 23, mientras que para 264 es 20.

¡Espero que te sirva! Will.

Gracias, amigo, lo intenté, pero parecía recurrir siempre a la opción de línea de comandos de Handbrake sin importar cómo alterara la sintaxis. Leí muchísimo sobre la documentación, como dices, escueta, ¡y es verdad!, y encontré montón de información sobre las opciones del codificador h264_nvenc que parecían distintas a las del HEVC en las versiones actuales de ffmpeg.

Mañana, si puedo, publicaré algunos perfiles de prueba por si te apuntas a ayudar a depurar para que el perfil funcione. De momento estoy usando variaciones de los perfiles h264 integrados basados en el codificador libx264, que sí pueden aprovechar la aceleración por hardware, pero me gustaría crear uno puramente basado en el codificador por hardware, al estilo del que hiciste para HEVC.

Encantado de intentar ayudar. Para empezar, abre una línea de comandos y ejecuta “FFMpeg.exe -codecs”. Eso mostrará qué codecs están disponibles para ti en FFMpeg.

En cuanto al respaldo con Handbrake, sé que las versiones recientes de Handbrake admiten nvenc, pero no estoy seguro de si handbrakecli.exe se puede reemplazar directamente. Investigaré un poco más.

¡Gracias! Will.

Gracias, amigo, lo aprecio.

En cuanto al retroceso con Handbrake, la versión más reciente de la interfaz gráfica sí admite NVENC, ¡con un rendimiento excelente, por cierto!; sin embargo, el «fallback» se refiere a la codificación x264 puramente por CPU sin ninguna aceleración por hardware.

Mañana conseguiré más detalles y probaré también algunas opciones de línea de comandos.

¡Gracias!

Actualizado: (no puedo publicar más de tres respuestas en el mismo hilo como usuario nuevo :frowning: )

Conseguí que funcionara la sintaxis; supongo que estaba demasiado cansado para hacerlo bien al principio, pero así es como lo logré: simplemente hice lo que dijiste y reemplacé HEVC por h264 manteniendo todo lo demás igual:

[MKV H264 NVENC Constant Quality]
Description=nVidia H264 NVENC Constant quality, varible bitrate
order=ffmpeg, handbrake
AllowH264CopyRemuxing=true
FixedResolution=true
AutoDeinterlace=true
ffmpeg-UsingHardwareEncoding=True
ffmpeg-general=-threads 0 -hwaccel auto
ffmpeg-video=-ss 9 -c:v h264_nvenc -cq 27 -rc vbr -map 0:v
ffmpeg-audio=-acodec libfdk_aac -ab 128k -map 0:a
ffmpeg-audioac3=-acodec libfdk_aac -ab 320k -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
handbrake-UsingHardwareEncoding=true
handbrake-general=–decomb --denoise=“weak” --loose-anamorphic --verbose=2 -T -O
handbrake-video=–start-at duration:3 -e x265 -q 18
handbrake-audio=-E ffac3 -R auto -B 192 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E ffac3 -R auto -B 384 -D 0 -a 1,2,3,4,5
handbrake-ext=.mkv
handbrake-audiodelay=skip
PreConversionCommercialRemover=true

Esto ejecuta sin problemas el codificador primario NVENC.

Una pregunta: ¿sabes cuál es el cambio de sintaxis para tasas de bits constantes en lugar del análisis basado en VBR y calidad? Tengo un par de casos en los que me gustaría controlar manualmente la tasa de bits.

Puedes descargar la versión 1.2 de handbrakecli desde aquí: HandBrake

Integra nvenc_h264 y nvenc_h265. Tal vez intenta que Handbrake haga lo mismo…

Así que he estado probando el HandBrakeCli con la versión actualizada y funciona con NVENC, ¿tienes algún conocimiento sobre las opciones o si es posible apuntar a un archivo .json exportado para la configuración a través de los perfiles de MCEBuddy?

Deberías poder pasarle un documento de perfil json exportado de Handbrake. Ajustaría la configuración que desees y luego probaría ese preset.

Parece que hay una opción para --preset-import-gui que debería hacer exactamente eso :slight_smile:

Hey man, la documentación de HandBrakeCli es mucho mejor y más fácil de usar que la de ffmpeg.

He estado jugando con las opciones y he conseguido resultados bastante buenos con H265.

Al tener que lidiar con muchas fuentes de video entrelazadas de nuestros canales de cable, he tenido que ajustarlo para hacer decomb’ing y encontrar el equilibrio adecuado para los motores NVENC en mis varias tarjetas y CPUs.

Este perfil me da aproximadamente un 90% de rendimiento del motor en un I7-8700K con una GPU nVidia 1060, donde la CPU hace el decoming y el motor NVENC hace toda la codificación de video entre 240 y 300 fps con carga completa de CPU para filtros; si se eliminan los filtros, puede aumentar la tasa de fotogramas a más de 400.

El mismo perfil en un I5-8400 con nVidia Quadro P400 codifica a unos 190-250 fps; sin filtros, llega a más de 300.

[Handbrake Cli 1.2.0 H265 - Quality 28]
Description=nVidia NVENC HW (H265) Quality Setting 28 + Decomb
order=handbrake
FixedResolution=true
PreConversionCommercialRemover=false
UniversalCommercialRemover=false
handbrake-general=--loose-anamorphic --comb-detect=fast --decomb=mode=7 --verbose=2 --format av_mkv --subtitle 1,2,3
handbrake-video=--start-at duration:0 --encoder nvenc_h265 --encoder-preset slow --encoder-level 4.1 --quality 28 --vfr
handbrake-audio=--aencoder copy:aac --audio 1,2,3
handbrake-audioac3=--aencoder copy:ac3 --audio 1,2,3
handbrake-ext=.mkv
handbrake-audiodelay=skip

Si subes el preset NVENC a medium, ganas poca velocidad con los filtros activados porque el cuello de botella es la carga de CPU; teóricamente podrías ejecutar una codificación separada sin decomb’ing para aprovechar la capacidad restante del codificador; sin filtros, la 1060 empuja la tasa de fotogramas a más de 550, la P400 a más de 400.

Estoy considerando equipar el I5-8400 (el servidor Plex destinado a hacer todo el trabajo eventualmente) con una tarjeta P2000 para los flujos de codificación ilimitados para transcodificación en vivo de TV en vivo mientras también hace codificación de MCEBuddy en backend.

Hola Anders,

Estoy obteniendo un rendimiento similar con mi equipo, aunque tu procesador es un poco más nuevo. Probaré el perfil de Handbrake que compartiste — ¡gracias!

Ejecuto MCEBuddy y el servidor de Plex en la misma máquina: un i7 7700 con 16 GB de RAM, una GTX 1060 y un SSD. El único recurso remoto es el NAS donde almaceno todas mis grabaciones y medios de Plex. Esta configuración me funciona bastante bien: en HD, un episodio de una hora tarda aproximadamente 10 minutos en codificarse con el perfil que compartí. El ahorro de espacio con H265 es excelente.

Antes usaba un Core i5, pero descubrí que el hyperthreading impactaba bastante el rendimiento general. Dicho esto, esto fue antes de que PMS tuviera aceleración por hardware integrada; ahora podría ser posible usar un CPU de menor potencia, excepto por el desentrelazado / desentramado.

¡Gracias por compartir!
Will.

Mail](Outlook) para Windows 10