Aide à la compréhension de l'intégration Handbrake et NVidia

Malheureusement, il semble que j’ai eu un échec de conversion (après de nombreuses réussites), et j’ai un peu de mal à déterminer exactement ce qui s’est passé ; je serais très reconnaissant de toute aide pour y voir plus clair.

D’après ce que je constate, la requête matérielle NVidia passe (youpi) :

--> Checking presence and capabilities of NVidia NVENC Hardware encoder
2019-11-16T17:18:04 MCEBuddy.AppWrapper.NVidiaQuery --> Launching process C:\Program Files\MCEBuddy2x\nvidia\nvidiaQuery.exe
2019-11-16T17:18:04 MCEBuddy.AppWrapper.NVidiaQuery --> Process arguments 
2019-11-16T17:18:04 MCEBuddy.AppWrapper.NVidiaQuery --> UI Session Admin Process : True
2019-11-16T17:18:04 MCEBuddy.AppWrapper.NVidiaQuery --> Starting process as a UISession process with Admin privileges. This requires atleast 1 user to be logged into the system (remote desktop or locally)
2019-11-16T17:18:04 MCEBuddy.AppWrapper.NVidiaQuery --> Setting process priority to Normal
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery --> C:\Program Files\MCEBuddy2x\nvidia\nvidiaQuery.exe Starting...
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->  CUDA Device Query (Runtime API) version (CUDART static linking)
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery --> Detected 1 CUDA Capable device(s)
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery --> Device 0: "GeForce GTX 1050"
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   CUDA Driver Version / Runtime Version          10.1 / 7.5
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery --> Detected CUDA Driver version = 10.1
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   CUDA Capability Major/Minor version number:    6.1
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery --> Detected CUDA Hardware version = 6.1
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Total amount of global memory:                 2048 MBytes (2147483648 bytes)
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery --> MapSMtoCores for SM 6.1 is undefined.  Default to use 128 Cores/SM
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery --> MapSMtoCores for SM 6.1 is undefined.  Default to use 128 Cores/SM
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   ( 5) Multiprocessors, (128) CUDA Cores/MP:     640 CUDA Cores
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   GPU Max Clock rate:                            1519 MHz (1.52 GHz)
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Memory Clock rate:                             3504 Mhz
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Memory Bus Width:                              128-bit
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   L2 Cache Size:                                 1048576 bytes
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Maximum Texture Dimension Size (x,y,z)         1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Maximum Layered 1D Texture Size, (num) layers  1D=(32768), 2048 layers
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Maximum Layered 2D Texture Size, (num) layers  2D=(32768, 32768), 2048 layers
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Total amount of constant memory:               65536 bytes
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Total amount of shared memory per block:       49152 bytes
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Total number of registers available per block: 65536
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Warp size:                                     32
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Maximum number of threads per multiprocessor:  2048
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Maximum number of threads per block:           1024
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Maximum memory pitch:                          2147483647 bytes
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Texture alignment:                             512 bytes
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Concurrent copy and kernel execution:          Yes with 2 copy engine(s)
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Run time limit on kernels:                     Yes
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Integrated GPU sharing Host Memory:            No
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Support host page-locked memory mapping:       Yes
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Alignment requirement for Surfaces:            Yes
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Device has ECC support:                        Disabled
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   CUDA Device Driver Mode (TCC or WDDM):         WDDM (Windows Display Driver Model)
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Device supports Unified Addressing (UVA):      Yes
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->   Compute Mode:
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery -->      < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery --> deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.1, CUDA Runtime Version = 7.5, NumDevs = 1, Device0 = GeForce GTX 1050
2019-11-16T17:18:05 MCEBuddy.AppWrapper.NVidiaQuery --> Result = PASS

Mais ensuite il semble dire qu’il ne trouve plus le matériel après tout (bouh) :

2019-11-16T17:18:09 MCEBuddy.Transcode.ConvertWithHandbrake --> Cannot find supported h264/h265 software/hardware encoder combination in profile, disabling auto hardware encoder adjustments

Et il semble ensuite passer au logiciel et échouer :

INFORMATION> 2019-11-16T17:18:09 MCEBuddy.Transcode.Convert --> Converting with Handbrake, type: SoftwareOnly, gpu: {
  "hardwareBrand": "Any",
  "codecType": "Undefined",
  "hardwareCodecPresent": false,
  "h265Codec": false,
  "h264Codec": false
}

La seule chose qui me vient à l’esprit est que Plex Transcoder.exe était actif pendant ce temps… est-ce un problème ? J’avais l’impression que le GPU pouvait être utilisé par plusieurs applications en même temps, tout comme un CPU. Je me demande s’il y a un autre paramètre quelque part que je devrais envisager.

Comme toujours, tout temps et toute assistance que quelqu’un pourrait me prêter seraient grandement appréciés. Je joins les journaux complets.

College Football (2009) - S2019E2580 - Michigan State at Michigan.ts-Default-2019-11-16T17-05-29.9420785-05-00.log (1,4 Mo)

Plus de références/contexte ici. J’ai pu enregistrer une autre partie tout en diffusant/transcodant, donc il ne semble pas que cela soit dû au GPU en cours d’utilisation.

Cela pourrait aussi être lié à Plex. Après tout, il est en mode bêta. :laughing:

Il détecte en fait votre encodeur Nvidia, mais votre profil est invalide, donc il désactive tous les ajustements automatiques.

Si votre profil handbrake-video contient encoder nvenc_h264, c’est-à-dire que votre profil est déjà configuré pour utiliser l’encodeur matériel. MCEBuddy recherche soit un encodeur logiciel, x264, pour activer automatiquement ses ajustements matériels, soit la directive handbrake-UsingHardwareEncoding=true dans votre profil, qui indique à MCEBuddy que le profil est déjà optimisé pour l’encodage matériel et qu’il ne doit rien changer, simplement l’exécuter ; ainsi, le profil se retrouve invalide.
Changez soit l’encodeur vers l’encodeur logiciel dans le profil, soit ajoutez la directive handbrake-UsingHardwareEncoding=true

Ok! Super… merci @RBoy ton aide est toujours très appréciée. :blush:

Ma seule question est… pourquoi a-t-il cherché (ou tenté de passer à) un encodage logiciel ? Il semblait jusqu’ici utiliser le matériel, mais peut-être que je ne comprends pas quelque chose.

Pour info, voici à quoi ressemble mon profil maintenant :

[Handbrake Cli 1.2.0 H265 - Quality 25]
Description=nVidia NVENC HW (H265) Quality Setting 25 + Decomb
order=handbrake
FixedResolution=true
handbrake-general=--loose-anamorphic --comb-detect=fast --decomb=mode=7 --verbose=2 --format av_mp4 --subtitle-lang-list eng,spa --all-subtitles --subtitle-default=1 --native-language eng --native-dub
handbrake-video=--start-at duration:0 --encoder nvenc_h264 --encoder-preset slow --quality 25 --vfr
handbrake-audio=--aencoder copy:aac --audio-lang-list eng --all-audio
handbrake-audioac3=--aencoder copy:ac3 --audio-lang-list eng --all-audio
handbrake-ext=.m4v
handbrake-audiodelay=skip
handbrake-UsingHardwareEncoding=true
PreConversionCommercialRemover=true

Voyons ce que ça donne. :+1:

(Au fait, je sais qu’il s’appelle H265 alors qu’il cherche en fait h264 — j’oublie toujours de le changer ! :laughing:)

Par défaut, tous les profils fournis avec MCEBuddy n’utilisent que des encodeurs logiciels. Le logiciel détecte les cartes graphiques et, si elles sont prises en charge, remplace alors ces encodeurs par des encodeurs matériels à l’exécution. Si vous créez un profil personnalisé optimisé pour l’encodage matériel, vous devez maintenant indiquer à MCEBuddy de commencer la recherche.

Nous allons modifier ce comportement dans le futur : si MCEBuddy détecte qu’un profil contient un encodeur matériel, il définira automatiquement le flag d’optimisation matérielle <encoder>-UsingHardwareEncoding=true.

Malheureusement, après la configuration ci-dessus, je rencontre toujours des problèmes intermittents. Veuillez consulter le fichier joint.

Il semble que Handbrake échoue avec un code de retour non nul, donc le problème semble venir de Handbrake.

Je vais ouvrir un ticket chez Handbrake, mais je voulais d’abord vérifier ici pour m’assurer qu’il n’y a pas d’autres paramètres MCEBuddy à prendre en compte avant de le faire.

Journal joint ici : NFL Football - S2019E2191 - Chicago Bears at Detroit Lions.ts-Football-2019-11-28T16-35-04.5332992-05-00.log (1,3 Mo)

Il semble que votre pilote graphique échoue :

MCEBuddy.AppWrapper.Handbrake → Encoding: task 1 of 1, 0.00 %[h264_nvenc @ 000000000716bbc0] OpenEncodeSessionEx failed: out of memory (10)

Mince… ça explique tout. :laughing: Ma carte vidéo a aussi 2 Go de mémoire. Encore une fois, c’est intermittent et ne se produit que rarement.

Les pilotes de la carte vidéo étaient un peu obsolètes, donc je les ai mis à jour. Je ne suis pas sûr qu’il y ait grand-chose à faire ici, sauf peut-être de passer à une carte vidéo plus puissante.

Merci pour votre aide, @RBoy. :+1:

Cette erreur provient du pilote graphique, il s’agit très probablement d’une fuite de mémoire logicielle plutôt que d’un problème matériel.

OK merci @RBoy… voyons si la dernière version règle ce problème, sinon je pense qu’il pourrait y avoir quelque chose avec Plex qui cause cela. :downcast_face_with_sweat:

Si vous utilisez plus de 2 conversions simultanées, les pilotes graphiques NVidia ne vous le permettront pas car ils ont une limite stricte de 2 transcodages simultanés, voir ce post pour plus de détails :

AH… je parie que c’est bien ça le problème ! Nous avons maintenant 3 Roku à la maison et, avant que j’obtienne le GPU, un seul flux de transcodage occupait 50 à 85 % du CPU.

J’ai donc réglé tous les flux sur « original » pour éviter tout transcodage.

Depuis que j’ai le GPU, en revanche, il s’avère qu’un flux de transcodage est une broutille (et c’est ce à quoi je m’attendais) : environ 5 à 10 % du CPU. En fait, c’était environ 15 % avec deux flux simultanés.

Je n’ai pas encore testé avec 3 flux simultanés depuis nos Roku, mais bien sûr, s’il y a un transcodage qui intervient en post-traitement, cela nous place dans le scénario que tu décris. Quelle limitation. :stuck_out_tongue:

Je vais devoir réfléchir davantage à la façon dont nous voulons gérer cela… merci pour les informations et le contexte supplémentaires. :+1: