Unterstützung beim Verständnis der Handbrake- und NVidia-Integration

Leider scheint es, dass bei mir ein Konvertierungsfehler aufgetreten ist (nach vielen erfolgreichen Durchläufen), und ich habe einige Schwierigkeiten herauszufinden, was genau passiert ist. Ich würde mich sehr über Hilfe freuen, das zu klären.

Soweit ich das sehen kann, besteht die NVidia-Hardware-Abfrage (juhu):

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

Aber dann scheint es zu sagen, dass es die Hardware doch nicht finden kann (buh):

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

Und dann scheint es auf Software umzuschalten und scheitert danach:

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
}

Das Einzige, woran ich denken kann, ist, dass Plex Transcoder.exe währenddessen aktiv war … ist das ein Problem? Ich war der Meinung, dass die GPU – genau wie die CPU – von mehreren Anwendungen gleichzeitig genutzt werden kann. Ich frage mich, ob es eine weitere Einstellung gibt, die ich hier berücksichtigen sollte.

Wie immer wäre ich für jegliche Zeit und Hilfe sehr dankbar. Vollständige Logs im Anhang.

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

Weitere Referenzen/Kontext hier. Ich konnte ein weiteres Spiel aufzeichnen, während Streaming/Transkodierung stattfand, also scheint es nicht daran zu liegen, dass die GPU in Gebrauch war.

Es könnte auch mit Plex zusammenhängen. Es befindet sich schließlich im Beta-Modus. :laughing:

Es erkennt tatsächlich deinen Nvidia-Encoder, aber dein Profil ist ungültig, weshalb alle automatischen Anpassungen deaktiviert werden.

Wenn dein Profil handbrake-video encoder nvenc_h264 enthält, ist dein Profil also bereits auf die Nutzung des Hardware-Encoders eingestellt. MCEBuddy sucht entweder nach einem Software-Encoder, x264, um seine Hardware-Anpassungen automatisch zu aktivieren, oder nach der Direktive handbrake-UsingHardwareEncoding=true in deinem Profil, die MCEBuddy mitteilt, dass das Profil bereits für Hardware-Encoding optimiert ist und es nichts ändern soll, sondern einfach ausführen. Daher wird es als ungültiges Profil eingestuft.
Entweder wechselst du den Encoder im Profil zum Software-Encoder oder fügst die Direktive handbrake-UsingHardwareEncoding=true hinzu.

Ok! Super … vielen Dank, @RBoy – deine Hilfe ist wie immer sehr willkommen. :blush:

Meine einzige Frage ist: Warum hat er nach Software-Encoding gesucht (oder versucht, darauf zu wechseln)? Es sieht so aus, als wäre bisher alles per Hardware gelaufen – vielleicht habe ich da aber auch etwas missverstanden.

Nur damit ihr’s wisst: So sieht mein Profil jetzt aus:

[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

Mal schauen, wie es läuft. :+1:

(Nebenbei: Ich weiß, dass es „H265“ heißt, aber tatsächlich nach „h264“ sucht – ich vergesse jedes Mal, das umzubenennen! :laughing:)

Es ändert es nicht standardmäßig in Software; alle mitgelieferten Profile von MCEBuddy verwenden nur Software-Encoder. Es sucht nach Grafikkarten und wechselt zur Laufzeit auf Hardware-Encoder, falls unterstützt. Wenn du ein benutzerdefiniertes Profil erstellst, das auf Hardware-Encoding optimiert ist, musst du MCEBuddy jetzt mitteilen, dass es danach suchen soll.

Wir werden das künftig ändern: Erkennt MCEBuddy, dass das Profil einen Hardware-Encoder enthält, wird es automatisch das Flag für Hardware-Optimierung setzen: <encoder>-UsingHardwareEncoding=true

Nachdem ich die oben genannten Einstellungen vorgenommen habe, treten leider weiterhin intermittierende Probleme auf. Bitte sehen Sie sich den Anhang an.

Es sieht so aus, als würde Handbrake mit einem von Null verschiedenen Rückgabewert fehlschlagen, weshalb es wohl an Handbrake liegt.

Ich werde ein Issue bei Handbrake eröffnen, wollte aber vorher hier noch prüfen, ob es weitere MCEBuddy-Einstellungen gibt, die ich berücksichtigen sollte.

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

Sieht so aus, als würde Ihr Grafiktreiber versagen:

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

Mist… das würde es erklären. :laughing: Meine Grafikkarte hat auch 2 GB Speicher. Wieder einmal ist es sporadisch und kommt nur selten vor.

Die Grafikkartentreiber waren etwas veraltet, also habe ich sie aktualisiert. Ich bin mir nicht sicher, ob man hier viel machen kann, außer eine größere Grafikkarte zu besorgen.

Danke für deine Hilfe, @RBoy. :+1:

Dieser Fehler stammt vom Grafiktreiber, höchstwahrscheinlich handelt es sich um einen Software-Speicherleck und nicht um ein Hardwareproblem.

OK danke @RBoy… mal sehen, ob die neueste Version dieses Problem behebt, falls nicht, vermute ich, dass etwas an Plex daran schuld sein könnte. :downcast_face_with_sweat:

Wenn Sie mehr als 2 gleichzeitige Konvertierungen verwenden, werden NVidia-Grafiktreiber dies nicht zulassen, da sie ein festes Limit von 2 gleichzeitigen Transcodierungen haben. Weitere Details finden Sie in diesem Beitrag:

AH… ich wette, das ist der Grund! Wir haben mittlerweile drei Rokus im Haushalt, und bevor ich die GPU hatte, hat ein einzelner Transcode-Stream 50–85 % der CPU beansprucht.

Daraufhin habe ich alle Streams auf „Original“ gestellt, damit kein Transcoding mehr stattfindet.

Seit ich die GPU habe, ist ein Transcode-Stream jedoch ein Klacks (wie ich erwartet hatte): nur noch etwa 5–10 % der CPU. Bei zwei gleichzeitigen Streams waren es tatsächlich etwa 15 %.

Ich habe es noch nicht mit drei gleichzeitigen Streams von unseren Rokus probiert, aber wenn ein Transcode für die Nachbearbeitung läuft, würde das genau das Szenario ergeben, das du beschreibst. Was für eine Einschränkung. :stuck_out_tongue:

Ich muss mir also überlegen, wie wir damit umgehen wollen… Danke für die zusätzlichen Informationen und den Kontext. :+1: