Hulp bij het begrijpen van Handbrake- en NVidia-integratie

Helaas lijkt het erop dat ik een conversiefout heb gehad (na vele succesvolle keren), en ik heb een beetje moeite om precies te achterhalen wat er is gebeurd. Ik zou het enorm op prijs stellen als iemand me kan helpen dit uit te zoeken.

Voor zover ik kan zien slaagt de NVidia-hardwarecontrole (hoera):

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

Maar vervolgens lijkt het alsof het toch zegt dat het de hardware niet kan vinden (boo):

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

En dan schakelt het blijkbaar over op software en faalt daarna:

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
}

Het enige waar ik aan kan denken is dat Plex Transcoder.exe actief was terwijl dit gebeurde… is dat een probleem? Ik was ervan overtuigd dat de GPU net als een CPU door meerdere applicaties tegelijk gebruikt kan worden. Ik vraag me af of er ergens nog een andere instelling is die ik zou moeten overwegen.

Zoals altijd zou ik alle tijd en hulp die iemand kan bieden zeer op prijs stellen. Volledige logs bijgevoegd.

College Football (2009) - S2019E2580 - Michigan State at Michigan.ts-Default-2019-11-16T17-05-29.9420785-05-00.log (1.4 MB)

Meer referentie/context hier. Ik kon een andere game opnemen terwijl er gestreamd/transcoded werd, dus het lijkt er niet op dat dit het gevolg was van het gebruik van de GPU.

Het zou ook met Plex te maken kunnen hebben. Het staat immers in bèta-modus. :laughing:

Het detecteert je Nvidia-encoder, maar je profiel is ongeldig, waardoor alle automatische aanpassingen worden uitgeschakeld.

Als je profiel handbrake-video encoder nvenc_h264 bevat, is je profiel al ingesteld om de hardware-encoder te gebruiken. MCEBuddy zoekt naar een software-encoder, x264, om automatisch zijn hardware-aanpassingen in te schakelen, of naar de handbrake-UsingHardwareEncoding=true directive in je profiel, die MCEBuddy vertelt dat het profiel al geoptimaliseerd is voor hardware-encoding en dat het niets moet wijzigen, maar gewoon moet uitvoeren. Daarom wordt het een ongeldig profiel.
Schakel ofwel de encoder over naar de software-encoder in het profiel of voeg de handbrake-UsingHardwareEncoding=true directive toe

Ok! Geweldig… dank je @RBoy, je hulp wordt, zoals altijd, zeer op prijs gesteld. :blush:

Mijn enige vraag is… waarom zocht het (of probeerde het te wijzigen naar) software-encoding? Het lijkt erop dat het al deze tijd hardware gebruikte, maar misschien begrijp ik iets verkeerd.

Overigens, dit is hoe mijn profiel er nu uitziet:

[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

Laten we zien hoe dit bevalt. :+1:

(P.S. ik weet dat het H265 heet en dat het eigenlijk naar h264 zoekt — ik vergeet steeds het aan te passen! :laughing:)

Het verandert het niet in software, standaard hebben alle profielen die met MCEBuddy worden geleverd alleen software-encoders. Het zoekt naar grafische kaarten en verandert ze vervolgens tijdens de uitvoering in hardware-encoders indien ondersteund. Als je een aangepast profiel maakt dat is geoptimaliseerd voor hardware-encoding, dan moet je MCEBuddy nu laten weten dat het moet beginnen met zoeken.

We gaan dit in de toekomst veranderen en als MCEBuddy detecteert dat het profiel een hardware-encoder heeft, dan zal het automatisch de vlag voor hardware-optimalisatie instellen <encoder>-UsingHardwareEncoding=true

Helaas krijg ik na bovenstaande configuratie nog steeds wisselvallige problemen. Zie bijgevoegd.

Het lijkt erop dat Handbrake mislukt met een returncode ongelijk aan nul, dus het lijkt aan Handbrake te liggen.

Ik zal een issue bij Handbrake openen, maar wilde hier eerst verifiëren of er nog verdere MCEBuddy-instellingen zijn om te overwegen.

Log bijgevoegd: NFL Football - S2019E2191 - Chicago Bears at Detroit Lions.ts-Football-2019-11-28T16-35-04.5332992-05-00.log (1,3 MB)

Het lijkt erop dat je grafische driver faalt:

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

Verdorie… dat verklaart het. :laughing: Mijn videokaart heeft ook 2GB aan geheugen. Het is opnieuw wisselvallig en komt slechts sporadisch voor.

De stuurprogramma’s van de videokaart waren wat verouderd, dus ik heb ze bijgewerkt. Ik denk niet dat er hier veel meer aan te doen valt dan een grotere videokaart te nemen.

Bedankt voor je hulp, @RBoy. :+1:

Die fout komt van de grafische driver, waarschijnlijk een softwarematig geheugenlek in plaats van een hardwareprobleem.

OK bedankt @RBoy… we zullen zien of de laatste versie dit probleem oplost, zo niet dan denk ik dat er iets met Plex is dat dit veroorzaakt. :downcast_face_with_sweat:

Als u meer dan 2 gelijktijdige conversies gebruikt, zullen NVidia-grafische stuurprogramma’s dit niet toestaan, aangezien ze een harde limiet van 2 gelijktijdige transcodes hebben. Zie dit bericht voor meer details:

AH… ik wed dat dat is wat er aan de hand is! We hebben nu 3 Roku’s in huis en voordat ik de GPU kreeg, nam één transcoderende stream 50-85% van de CPU in beslag.

Dus heb ik alle streams op ‘origineel’ gezet, zodat er geen transcoding zou zijn.

Sinds ik de GPU heb, blijkt echter dat een transcoderende stream kinderspel is (en wat ik verwachtte): ongeveer 5-10% van de CPU. Eigenlijk was het ongeveer 15% met twee gelijktijdige streams.

Ik heb het niet geprobeerd met 3 gelijktijdige streams van onze Roku’s, maar als er een transcode plaatsvindt voor nabewerking, zouden we inderdaad in de door jou beschreven situatie terechtkomen. Wat een beperking. :stuck_out_tongue:

Ik zal nog eens goed nadenken over hoe we dit willen aanpakken… bedankt voor de extra informatie en context. :+1: