Hjælp til forståelse af Handbrake og NVidia-integration

Desværre ser det ud til, at jeg havde en konverteringsfejl (efter mange succesfulde tilfælde), og jeg har lidt svært ved at finde ud af, hvad der præcist skete, og vil meget gerne have hjælp til at finde ud af det.

Så vidt jeg kan se, består NVidia-hardwareforespørgslen (yay):

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

Men så ser det ud til at sige, at det alligevel ikke kan finde hardware (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

Og så ser det ud til, at det skifter til software og fejler herefter:

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
}

Det eneste, jeg kan komme i tanke om, er, at Plex Transcoder.exe var aktiv, mens dette foregik… er det et problem? Jeg var under den opfattelse, at GPU’en kan bruges af flere applikationer på én gang, ligesom en CPU kan. Jeg spekulerer på, om der er en anden indstilling et sted, jeg bør overveje.

Som altid vil jeg sætte stor pris på al den tid og hjælp, som nogen kan give. Vedlægger fulde logs.

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

Mere reference/kontekst her. Jeg kunne optage et andet spil, mens streaming/transkodning fandt sted, så det ser ikke ud til, at det skyldtes, at GPU’en var i brug.

Det kunne også være Plex-relateret. Det er trods alt i betatilstand. :laughing:

Det registrerer faktisk din Nvidia-koder, men din profil er ugyldig, så den deaktiverer alle automatiske justeringer.

Hvis din profil handbrake-video indeholder encoder nvenc_h264, dvs. din profil allerede er indstillet til at bruge hardware-koderen. MCEBuddy leder efter enten en software-koder, x264, for automatisk at aktivere sine hardware-justeringer, eller direktivet handbrake-UsingHardwareEncoding=true i din profil, som fortæller MCEBuddy, at profilen allerede er optimeret til hardware-kodning, og at den ikke skal ændre noget, blot udføre den, så ender det med at være en ugyldig profil.
Skift enten koderen til software-koderen i profilen, eller tilføj direktivet handbrake-UsingHardwareEncoding=true

Ok! Fedt… tak @RBoy din hjælp sættes virkelig pris på, som altid. :blush:

Mit eneste spørgsmål er… hvorfor søgte den efter (eller forsøgte at skifte til) software-kodning? Det virker som om, den hele tiden har kørt hardware, men måske misforstår jeg noget.

For hvad det er værd, ser min profil sådan ud nu:

[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-audiodely=skip
handbrake-UsingHardwareEncoding=true
PreConversionCommercialRemover=true

Lad os se, hvordan det går. :+1:

(BTW, jeg ved godt, den hedder H265, men den faktisk kigger efter h264 – jeg glemmer hele tiden at ændre det! :laughing:)

Det ændrer det ikke til software; som standard har alle de profiler, der følger med MCEBuddy, kun software-encodere. Den leder efter grafikkort og skifter dem derefter til hardware-encodere ved runtime, hvis det understøttes. Hvis du opretter en brugerdefineret profil, der er optimeret til hardware-encoding, skal du nu fortælle MCEBuddy, at den skal begynde at lede.

Vi vil ændre dette i fremtiden, og hvis MCEBuddy opdager, at profilen har en hardware-encoder, vil den automatisk sætte hardware-optimeringsflaget <encoder>-UsingHardwareEncoding=true

Så, desværre, efter at have konfigureret ovenstående, får jeg stadig intermittente problemer. Se venligst den vedhæftede.

Det ser ud til, at Handbrake fejler med en returkode, der ikke er nul, så det ser ud til, at det er Handbrakes ansvar.

Jeg vil oprette en sag hos Handbrake, men ville lige verificere her først for at sikre, at der ikke er yderligere MCEBuddy-indstillinger at overveje, inden jeg gør det.

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

Det ser ud til, at din grafikdriver fejler:

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

Sådan… det ville forklare det. :laughing: Mit grafikkort har 2 GB hukommelse. Det sker igen sporadisk og kun sjældent.

Grafikkortdriverne var lidt forældede, så jeg har opdateret dem. Jeg er ikke sikker på, at der er meget andet at gøre end at skaffe et større grafikkort.

Tak for din hjælp, @RBoy. :+1:

Den fejl stammer fra grafikdriveren, sandsynligvis et software-relateret memory leak snarere end et hardwareproblem.

OK tak @RBoy… lad os se, om den nyeste version løser dette problem, hvis ikke, tænker jeg, at det måske er noget med Plex, der forårsager det. :downcast_face_with_sweat:

Hvis du bruger mere end 2 samtidige konverteringer, vil NVidia-grafikdrivere ikke tillade det, da de har en hård grænse på 2 samtidige transkodninger. Se dette indlæg for flere detaljer:

AH… jeg vil vædde med, at det er det, der foregår! Vi har 3 Rokus i vores husstand nu, og før jeg fik GPU’en, brugte én transcode-stream 50-85% af CPU’en.

Så satte jeg alle streams til “original”, så der ikke ville være nogen transcoding.

Efter jeg fik GPU’en viser det sig dog, at køre en transcode-stream er peanuts (og hvad jeg forventede): omkring 5-10% af CPU’en. Faktisk var det cirka 15% med to samtidige streams.

Jeg har ikke prøvet det med 3 samtidige streams fra vores Rokus, men hvis der foregår en transcode til efterbehandling, ville det sætte os i det scenario, du beskriver. Sikken en begrænsning. :stuck_out_tongue:

Jeg bliver nødt til at tænke mere over, hvordan vi vil håndtere dette… tak for de ekstra oplysninger og kontekst. :+1: