Échec de la conversion Handbrake avec l'encodeur matériel, réessai avec l'encodeur logiciel par défaut

Bonjour. J’ai un problème semblable à ceux d’autres utilisateurs, mais je n’arrive pas à comprendre ma situation spécifique ni comment appliquer les informations des fils de discussion précédents.

Je possède une machine Windows 10 relativement récente (6 mois) avec un très bon processeur (Intel(R) Core™ i7-7700 CPU @ 3.60 GHz) et 16 Go de mémoire.
J’ai deux cartes graphiques aux pilotes les plus récents : une NVIDIA principale (avec encodage matériel) et une Intel non utilisée disposant de Quick Sync et d’un encodeur matériel.
Les détails des journaux figurent ci-dessous (ainsi que le journal complet) pour la machine et les cartes.

Un programme HD de 30 minutes s’encode en 22 minutes avec le profil « MP4 Normal » sur une machine au repos.
Cinq heures de couverture du Superbowl s’encode en environ 3 heures dans les mêmes conditions, le processeur restant à près de 100 % une bonne partie du temps.

J’ai commencé à penser que le système ne fonctionnait pas de manière optimale. Je sais que ce n’est pas comparable, mais si j’optimise les mêmes fichiers sur Plex à la résolution maximale possible pour iOS, ces conversions prennent 50 % du temps nécessaire à MCEBuddy.

J’admets volontiers que je ne sais pas ce que je fais ; je vois l’erreur suivante dans la plupart de mes journaux :
Handbrake conversion failed with hardware encoder, retrying with default software encoder

Je me demande si quelqu’un peut m’aider à comprendre si le processus d’encodage fonctionne correctement.
Toute aide est grandement appréciée…

Cordialement,
BrianGGG

Voici un exemple de fichier journal :

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 Ko)

Quelques éléments clés extraits du journal :

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

Vous pouvez essayer de modifier le profil pour que ffmpeg soit en premier. Quand je travaillais avec mes profils pendant la bêta 0.8, je n’arrivais pas à faire faire de l’accélération matérielle à HandBrake de manière significative. Pour info, j’ai le même CPU et la même RAM et j’utilise une NVidia GTX 1060 — j’obtiens des encodages H265 (HEVC) d’environ 20 minutes pour une heure de programme HD.

Pour changer l’ordre des moteurs d’encodage, allez dans le dossier de configuration et ouvrez profiles.config. Cherchez cette ligne dans le profil MP4 Normal :
order=handbrake,ffmpeg,mencoder

Changez-la pour que ffmpeg soit en premier.

Bonne chance ! Will.

Vous avez une configuration vraiment intéressante, avec à la fois l’accélération matérielle CUDA (NVIDIA) et QuickSync (Intel). Cependant, il semble que vos pilotes Intel soient bogués et fassent planter HandBrake lorsqu’il tente d’utiliser l’accélération matérielle.

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)

MCEBuddy bascule donc vers l’encodage logiciel via HandBrake sans essayer d’utiliser l’accélération matérielle NVIDIA via FFmpeg (nous ajouterons cette optimisation à l’avenir pour tester différents encodeurs matériels avant de passer au logiciel, principalement parce qu’il est très rare d’avoir des systèmes avec les deux types de matériel).

La solution, comme l’a souligné @Will_Tschumy, est de modifier l’ordre dans votre profil pour passer à FFmpeg ; cela devrait forcer l’utilisation de la carte NVIDIA en premier pour l’encodage matériel et, si les pilotes ne posent pas de problème, cela devrait être nettement plus rapide.

À titre d’information, il est possible que votre carte Intel ne soit pas correctement initialisée et que votre carte NVIDIA serve de carte graphique principale pour l’affichage, ce qui expliquerait pourquoi HandBrake ne parvient pas à l’initialiser. Si vous préférez l’encodage matériel Intel plutôt que NVIDIA, vous pouvez essayer l’astuce de l’écran factice pour activer votre carte Intel.

Will,

Merci beaucoup pour cette réponse. C’était vraiment une suggestion utile.
Quelques points :

J’ai descendu HandBrake dans l’ordre comme tu l’as dit, mais lors d’un test HB a quand même été choisi alors qu’il était troisième sur trois dans la liste.

Cependant, quand j’ai complètement retiré HB de la liste de priorité, cela a entraîné l’utilisation de FFmpeg. Ce fut une bonne réussite car, depuis, je peux voir dans le Gestionnaire des tâches que mon GPU est utilisé pour le décodage. L’utilisation du CPU est maintenant bien moindre et l’encodage ne domine plus ma machine.

Ma seule question à ce stade : est-ce tout ce que je peux faire ici ? J’ai atteint un taux de conversion de 12 minutes pour 30 minutes de vidéo HD, ce qui est similaire à la référence de 20 minutes de Will ci-dessus, mais ce n’était pas en HEVC (seulement H264). Je pense donc que quelque chose n’est pas optimal.

De plus, mon GPU peine à souffler ; est-ce un signe qu’il y a une possibilité de multi-threading ?

Voici à quoi ressemble maintenant le nouveau fichier journal avec FFmpeg comme encodeur (avec tout un tas de bêtises de recadrage MENCODER supprimées pour des raisons de taille) :

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 Ko)

merci,
Brian

Merci Goose pour cette réponse. Elle est arrivée pendant que je publiais ma réponse (juste) précédente.

J’ai essayé le truc de faux écran, mais comme je l’ai vu sur internet, c’est plus facile à dire qu’à faire sous Windows 10. Les instructions ne tiennent pas compte du dernier système d’exploitation, et j’ai trouvé impossible de mettre le second moniteur en ligne. Pour info : la carte Intel est fournie par défaut avec ma machine Dell, mais j’ai acheté la version NVIDIA. Dell a livré la machine avec les deux cartes, même si je n’ai qu’un seul moniteur branché sur la NVIDIA.

Puisque je ne constate pas de vitesse fulgurante avec l’accélération matérielle NVIDIA, vaut-il la peine de poursuivre Quick Sync en partant du principe que ce sera beaucoup plus rapide ?

merci,
BRianGGG

Vos journaux indiquent un taux de conversion d’environ 180 ips. Ce n’est pas mal, peut-être que @Will_Tschumy peut partager ce qu’il observe avec sa configuration.

Les performances Intel dépendent fortement du pilote et du matériel. Cela peut aller de 70 à 600 ips. Une chose que vous pouvez essayer est de modifier les paramètres de votre BIOS pour faire de l’Intel votre carte principale et de l’essayer. Nous corrigerons cette option pour respecter l’ordre d’encodeur sélectionné par l’utilisateur si les deux encodeurs disposent de fonctionnalités d’accélération matérielle disponibles dans la prochaine version. Par défaut, sélectionner l’encodeur avec des options matérielles disponibles (sauf indication contraire du profil) (handbrake étant le premier choix)

Les journaux de conversion FFMpeg indiquent un taux de conversion moyen de 12,1x (363 ips). Il semble y avoir tellement de subtilités avec QuickSync que j’ai choisi de ne pas l’utiliser du tout, même si ma machine le prend en charge. Cependant, pendant la conversion, le CPU n’augmente pas du tout - tout l’encodage est effectué sur le GPU. Le CPU fonctionne à environ 50% pendant l’analyse de l’émission.

J’espère que cela aide. Merci! Will.

Merci Will.

J’allais justement demander comment la même configuration CPU pouvait donner des résultats si différents jusqu’à ce que je tombe sur le benchmark CUDA ci-dessous. Ta carte 1060 est presque deux fois plus rapide que ma 1050…

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

Ensuite, je vais brancher mon moniteur sur la carte Intel pour voir si je peux faire fonctionner FFMPEG avec plutôt qu’avec NVIDIA. Je choisirai la plus rapide à utiliser.

J’ai regardé le BIOS, et il n’y a pas beaucoup d’options… Je ne parviens même pas à trouver comment rendre Intel principal.

BrianGGG

Gardez à l’esprit que si vous essayez d’utiliser QuickSync d’Intel, vous devez utiliser handbrake et pour CUDA de Nvidia, vous devez utiliser ffmpeg dans le profil. C’est la seule combinaison actuellement supportée.

Où trouve-t-on le dossier « config » dont tu parles ?

dans le dossier du programme - pour moi c’est :
C:\Program Files\MCEBuddy2x\config