Fallo en la conversión de Handbrake con codificador de hardware, reintentando con codificador de software predeterminado

Hola. Tengo un problema similar al de otros, pero me cuesta entender mi situación específica y cómo aplicar la información de los hilos anteriores.

Tengo una máquina con Windows 10 relativamente nueva (6 meses) con un CPU bastante bueno (Intel(R) Core™ i7-7700 CPU @ 3.60 GHz) y 16 GB de memoria.
Tengo dos adaptadores de pantalla con los controladores más recientes. El principal es una NVIDIA (con codificación por hardware) y una Intel sin usar con Quick Sync y codificación por hardware.
Los detalles de los registros están abajo (y el propio registro) para la máquina y las tarjetas.

Un programa típico de 30 minutos en HD se codifica en 22 minutos con el perfil «MP4 Normal» en una máquina sin carga.
5 horas de cobertura del Superbowl se codifican en unas 3 horas en las mismas circunstancias, con casi 100 % de CPU durante buena parte del tiempo.

He empezado a creer que algo no funciona de forma óptima en mi sistema. Sé que no se pueden comparar, pero si optimizo los mismos archivos en Plex a la resolución más alta posible para iOS…
estas conversiones tardan la mitad que con MCEBuddy.

Admito sin problemas que no sé lo que hago. He visto el siguiente error en la mayoría de mis registros:
Handbrake conversion failed with hardware encoder, retrying with default software encoder

Me pregunto si alguien puede ayudarme a entender si el proceso de codificación está funcionando correctamente.
Cualquier ayuda se agradece…

Saludos,
BrianGGG

Aquí hay un registro de ejemplo:

xxxTwo.and.a.Half.Men.S06E24.Baseball.Was.Better.With.Steroids - Copy.ts-Profile Test-2018-02-06T07-47-08.6189349-05-00.log (815.5 KB)

Aquí hay algunos elementos clave del registro:

2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] CPU: Intel(R) Core™ i7-7700 CPU @ 3.60GHz
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] - Intel microarchitecture Kaby Lake
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] - logical processor count: 8
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] Intel Quick Sync Video support: yes
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] - Intel Media SDK hardware: API 1.25 (minimum: 1.3)
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] - H.264 encoder: yes
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] - preferred implementation: hardware (any)
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] - capabilities (hardware): breftype icq+la+i+downs vsinfo opt1 opt2+mbbrc+extbrc+trellis+ib_adapt+nmpslice
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] - H.265 encoder: yes (8bit: yes, 10bit: yes)
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] - preferred implementation: hardware (any)
2018-02-06T07:51:32 MCEBuddy.AppWrapper.Handbrake → [07:51:32] - capabilities (hardware): bpyramid vsinfo opt1

2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → CUDA Device Query (Runtime API) version (CUDART static linking)
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Detected 1 CUDA Capable device(s)
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Device 0: “GeForce GTX 1050”
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → CUDA Driver Version / Runtime Version 9.1 / 7.5
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Detected CUDA Driver version = 9.1
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → CUDA Capability Major/Minor version number: 6.1
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Detected CUDA Hardware version = 6.1
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Total amount of global memory: 2048 MBytes (2147483648 bytes)
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → MapSMtoCores for SM 6.1 is undefined. Default to use 128 Cores/SM
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → MapSMtoCores for SM 6.1 is undefined. Default to use 128 Cores/SM
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → ( 5) Multiprocessors, (128) CUDA Cores/MP: 640 CUDA Cores
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → GPU Max Clock rate: 1455 MHz (1.46 GHz)
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Memory Clock rate: 3504 Mhz
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Memory Bus Width: 128-bit
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → L2 Cache Size: 1048576 bytes
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Total amount of constant memory: 65536 bytes
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Total amount of shared memory per block: 49152 bytes
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Total number of registers available per block: 65536
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Warp size: 32
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Maximum number of threads per multiprocessor: 2048
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Maximum number of threads per block: 1024
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Maximum memory pitch: 2147483647 bytes
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Texture alignment: 512 bytes
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Concurrent copy and kernel execution: Yes with 2 copy engine(s)
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Run time limit on kernels: Yes
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Integrated GPU sharing Host Memory: No
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Support host page-locked memory mapping: Yes
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Alignment requirement for Surfaces: Yes
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Device has ECC support: Disabled
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → CUDA Device Driver Mode (TCC or WDDM): WDDM (Windows Display Driver Model)
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Device supports Unified Addressing (UVA): Yes
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Compute Mode:
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.1, CUDA Runtime Version = 7.5, NumDevs = 1, Device0 = GeForce GTX 1050
2018-02-06T07:51:36 MCEBuddy.AppWrapper.NVidiaQuery → Result = PASS
→ Process exited with code 0
→ NVidia H.264 Hardware Encoder Detected : True
→ NVidia H.265 Hardware Encoder Detected : True

Podrías probar cambiar el perfil para que ffmpeg esté primero. Cuando trabajaba con mis perfiles durante la beta 0.8, no conseguía que HandBrake hiciera aceleración por hardware de forma significativa. Para que te sirva de referencia, tengo el mismo CPU y RAM y estoy usando una NVidia GTX 1060: consigo codificaciones H265 (HEVC) de unos 20 minutos por cada hora de programación en HD.

Para cambiar el orden de los motores de codificación, entra en la carpeta de configuración y abre profiles.config. Busca esta línea en el perfil MP4 Normal:
order=handbrake,ffmpeg,mencoder

Cámbiala para que ffmpeg esté primero.

¡Suerte! Will.

Tienes una configuración realmente interesante, cuentas con ambas aceleraciones por hardware CUDA (NVIDIA) y QuickSync (Intel). Sin embargo, parece que los controladores de Intel están fallando y hacen que HandBrake se cuelgue al intentar usar la aceleración por hardware.

2018-02-06T07:51:46 MCEBuddy.AppWrapper.Handbrake → [07:51:46] qsv_enc_init: using ‘hardware (2)’ implementation, API: 1.25
2018-02-06T07:51:47 MCEBuddy.AppWrapper.Handbrake → Error code -17, hb_qsv_wait_on_sync 602
2018-02-06T07:51:47 MCEBuddy.AppWrapper.Handbrake → ERROR: encqsv: MFXVideoENCODE_EncodeFrameAsync failed (-17)

Por eso MCEBuddy vuelve a la codificación por software con HandBrake sin intentar usar la aceleración por hardware de NVIDIA a través de FFmpeg (agregaremos esa optimización en el futuro para probar distintos codificadores por hardware antes de pasar a software, principalmente porque es muy poco común tener sistemas con ambos tipos de hardware).

La solución, como señaló @Will_Tschumy, es cambiar el orden en tu perfil a FFmpeg; eso debería hacer que use primero la tarjeta NVIDIA para codificación por hardware y, si no hay problemas con el controlador, será significativamente más rápida.

Como nota adicional, es posible que tu tarjeta Intel no esté correctamente inicializada y que tu tarjeta NVIDIA sea la tarjeta principal de monitor/pantalla, lo cual probablemente es la razón por la que HandBrake no puede inicializarla. Si prefieres la codificación por hardware de Intel en lugar de NVIDIA, puedes probar el truco del monitor falso para activar tu tarjeta Intel.

Will,

Muchas gracias por esta respuesta. Fue sin duda una sugerencia útil.
Algunos puntos:

Moví HandBrake a una posición inferior en la lista como indicaste, pero en una prueba HB siguió siendo elegido a pesar de estar en tercer lugar de tres.

Sin embargo, cuando eliminé completamente HB de la lista de prioridades, esto llevó al uso de FFMPG. Fue un buen resultado, ya que desde allí pude ver en el Administrador de tareas que mi GPU estaba siendo utilizada para la decodificación. El uso de CPU ahora es mucho menor y la codificación ya no domina mi máquina.

Mi única pregunta en este momento: ¿es esto lo máximo que puedo hacer aquí? Llegué a una tasa de conversión de 12 minutos por 30 minutos de HD, lo cual es similar al punto de referencia de 20 minutos de Will mencionado arriba, pero esto no fue HEVC (solo H264). Así que todavía creo que algo no es óptimo.

Además, mi GPU apenas está trabajando, ¿es esto una indicación de que hay oportunidad para multi-threading?

Aquí está cómo se ve ahora el nuevo archivo de registro con FFMPEG como codificador (con un montón de tonterías de recorte de MENCODER eliminadas por razones de tamaño):

xxxTwo.and.a.Half.Men.S06E24.Baseball.Was.Better.With.Steroids - Copy.ts-Profile Test-2018-02-06T13-05-04.4043705-05-00.log (982.2 KB)

gracias,
Brian

Gracias, Goose, por esta respuesta. Llegó mientras publicaba mi respuesta (justo) anterior.

Intenté hacer el truco de la pantalla falsa, pero, como vi en internet, esto es más fácil decirlo que hacerlo en Windows 10. Las instrucciones no contemplan el sistema operativo más reciente y me resultó imposible poner en línea el segundo monitor. Para tu información: la tarjeta Intel vino como predeterminada con mi máquina Dell, pero compré la actualización a NVIDIA. Dell entregó la máquina con ambas tarjetas, aunque solo tengo un monitor conectado a la NVIDIA.

Dado que no estoy viendo una velocidad impresionante con la aceleración por hardware de NVIDIA, ¿vale la pena intentar Quick Sync con la teoría de que será mucho más rápido?

gracias,
BRianGGG

Tus registros muestran una tasa de conversión de unos 180fps. No está mal, quizás @Will_Tschumy pueda compartir lo que ve con su configuración.

El rendimiento de Intel depende en gran medida del controlador y el hardware. Puede estar entre 70 y 600fps. Una cosa que puedes probar es cambiar la configuración de tu BIOS para que el Intel sea el principal y probar. Vamos a arreglar esa opción para respetar el orden de codificador seleccionado por el usuario si ambos codificadores tienen funciones de aceleración por hardware disponibles en la próxima compilación. Por defecto selecciona el codificador con opciones de hardware disponibles (a menos que el perfil indique lo contrario) (siendo Handbrake la primera opción)

Los registros de conversión de FFMpeg muestran una tasa de conversión promedio de 12.1x (363 fps). Parece que hay tantos matices en el tema de QuickSync, que opté por no usarlo en absoluto, aunque mi máquina lo admite. Sin embargo, durante la conversión, el CPU no se dispara en absoluto: toda la codificación se realiza en la GPU. El CPU funciona alrededor del 50% durante el análisis del programa.

Espero que esto ayude. ¡Gracias! Will.

Gracias, Will.

Estaba a punto de preguntar cómo la misma configuración de CPU podía tener resultados tan distintos hasta que me topé con la siguiente prueba de CUDA. Tu tarjeta 1060 es casi el doble de rápida que mi 1050…

https://browser.geekbench.com/cuda-benchmarks

A continuación, voy a conectar mi monitor a la tarjeta Intel para ver si puedo hacer que FFMPEG se ejecute usando esta en lugar de NVIDIA. Elegiré la más rápida para usar.

Revisé la BIOS y no hay muchas opciones… Ni siquiera puedo averiguar cómo hacer que Intel sea la principal.

BrianGGG

Ten en cuenta que si estás tratando de usar QuickSync de Intel necesitas usar handbrake y para CUDA de Nvidia necesitas usar ffmpeg en el perfil. Esa es la única combinación compatible actualmente.

¿Dónde se encuentra la carpeta “config” de la que hablas?

en la carpeta del programa - para mí es:
C:\Program Files\MCEBuddy2x\config