Handbrake-Konvertierung fehlgeschlagen mit Hardware-Encoder, Wiederholung mit Standard-Software-Encoder

Hallo. Ich habe ein Problem, das anderen ähnelt, aber ich habe Schwierigkeiten zu verstehen, was genau bei mir vorliegt und wie ich die Informationen aus den vorherigen Threads anwenden kann.

Ich habe eine relativ neue Windows-10-Maschine (6 Monate alt) mit einer ziemlich guten CPU (Intel(R) Core™ i7-7700 CPU @ 3.60 GHz) und 16 GB RAM.
Ich besitze zwei Grafikkarten mit aktuellen Treibern. Primär eine NVIDIA (mit Hardware-Encoding) und eine ungenutzte Intel mit Quick Sync und Hardware-Encoding.
Details zu Rechner und Karten stehen unten (und im Log).

Eine typische 30-minütige HD-Sendung wird mit dem Profil „MP4 Normal“ auf einem ruhigen Rechner in 22 Minuten encodiert.
Fünf Stunden Superbowl-Berichterstattung braucht unter gleichen Bedingungen etwa 3 Stunden, wobei die CPU lange Zeit fast 100 % ausgelastet ist.

Ich beginne zu glauben, dass auf meinem System nicht alles optimal läuft. Ich weiß, man kann Äpfel mit Birnen nicht vergleichen, aber wenn ich dieselben Dateien in Plex auf die höchstmögliche iOS-Auflösung optimiere …
dauern diese Konvertierungen nur 50 % der MCEbuddy-Zeit.

Ich gebe offen zu, dass ich keine Ahnung habe; in fast allen meinen Logs sehe ich folgende Fehlermeldung:
Handbrake-Konvertierung mit Hardware-Encoder fehlgeschlagen, erneuter Versuch mit Standard-Software-Encoder

Ich frage mich, ob mir jemand helfen kann zu verstehen, ob der Kodierungsprozess korrekt abläuft.
Jede Hilfe wird wirklich geschätzt …

Viele Grüße
BrianGGG

Hier ist eine Beispiel-Logdatei:

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

Ein paar wichtige Log-Zeilen:

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

Du könntest versuchen, das Profil so zu ändern, dass ffmpeg an erster Stelle steht. Als ich während der .8-Beta mit meinen Profilen gearbeitet habe, konnte ich Handbrake nicht dazu bringen, HW-Beschleunigung in nennenswertem Umfang zu nutzen. FWIW: Ich habe dieselbe CPU und RAM und verwende eine NVidia GTX 1060 – ich bekomme H265-(HEVC)-Encodings von etwa 20 Minuten für eine Stunde HD-Programm.

Um die Reihenfolge der Encoding-Engines zu ändern, geh in den config-Ordner und öffne profiles.config. Suche nach dieser Zeile im MP4-Normal-Profil:
order=handbrake,ffmpeg,mencoder

Ändere sie so, dass ffmpeg an erster Stelle steht.

Viel Erfolg! Will.

Sie haben ein wirklich interessantes Setup, Sie besitzen sowohl CUDA (NVIDIA) als auch QuickSync (Intel) Hardware-Beschleunigung. Allerdings scheinen Ihre Intel-Treiber fehlerhaft zu sein und verursachen, dass Handbrake hängenbleibt, wenn es versucht, Hardware-Beschleunigung zu nutzen.

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)

Also wechselt MCEBuddy zurück zur Software-Kodierung mit Handbrake, ohne zu versuchen, die NVIDIA-Hardware-Beschleunigung über ffmpeg zu nutzen (wir werden diese Optimierung in Zukunft hinzufügen, um verschiedene Hardware-Kodierer auszuprobieren, bevor auf Software umgeschaltet wird – hauptsächlich, weil es sehr ungewöhnlich ist, Systeme mit beiden Hardware-Herstellern zu haben).

Die Lösung, wie @Will_Tschumy erwähnte, besteht darin, die Reihenfolge in Ihrem Profil zu ändern, sodass ffmpeg zuerst verwendet wird. Dadurch sollte zuerst die NVIDIA-Karte für Hardware-Kodierung verwendet werden, und wenn es keine Treiberprobleme gibt, sollte das deutlich schneller sein.

Nebenbei bemerkt ist es möglich, dass Ihre Intel-Grafikkarte nicht richtig initialisiert ist und dass Ihre NVIDIA-Karte Ihre primäre Monitor-/Anzeigekarte ist – wahrscheinlich der Grund, warum Handbrake sie nicht initialisieren kann. Wenn Sie stattdessen Intel-Hardware-Kodierung nutzen möchten, könnten Sie versuchen, den Fake-Display-Trick anzuwenden, um Ihre Intel-Karte zu aktivieren.

Will,

vielen Dank für diese Antwort. Das war definitiv ein hilfreicher Vorschlag.
Ein paar Punkte:

Ich habe HandBrake wie von dir empfohlen in der Reihenfolge nach unten verschoben, aber bei einem Testlauf wurde HB trotzdem ausgewählt, obwohl es an dritter Stelle von drei in der Liste stand.

Als ich HB jedoch komplett aus der Prioritätenliste entfernte, wurde stattdessen FFMPG verwendet. Das war ein voller Erfolg, denn im Task-Manager konnte ich sehen, dass meine GPU für das Decoding genutzt wurde. Die CPU-Auslastung ist jetzt deutlich niedriger und das Encoding dominiert nicht mehr meinen Rechner.

Meine einzige Frage an dieser Stelle: Ist das schon das Beste, was ich hier erreichen kann? Ich bin bei einer Konvertierungsrate von 12 Minuten für 30 Minuten HD-Filmmaterial angekommen, was ähnlich wie Wills 20-Minuten-Benchmark oben ist, allerdings war das kein HEVC (nur H264). Ich denke also, dass noch etwas nicht optimal läuft.

Außerdem ist meine GPU kaum ins Schwitzen gekommen – ist das ein Hinweis darauf, dass noch Potenzial für Multi-Threading besteht?

Hier ist das neue Logfile mit FFMPEG als Encoder (mit einigen MENCODER-Crop-Daten entfernt, um die Größe zu reduzieren):

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

Danke,
Brian

Danke, Goose, für diese Antwort. Sie kam herein, während ich meine (gerade) vorherige Antwort gepostet habe.

Ich habe versucht, den Fake-Display-Trick anzuwenden, aber wie ich im Internet gesehen habe, ist das in Windows 10 leichter gesagt als getan. Die Anleitungen berücksichtigen das neueste Betriebssystem nicht, und ich fand es unmöglich, den zweiten Monitor online zu bringen. FYI: Die Intel-Karte kam als Standard mit meiner Dell-Maschine, aber ich habe die aufgerüstete NVIDIA gekauft. Dell lieferte die Maschine mit beiden Karten, obwohl ich nur einen Monitor an die NVIDIA angeschlossen habe.

Da ich keine atemberaubende Geschwindigkeit mit der NVIDIA-Hardwarebeschleunigung sehe, lohnt es sich, Quick Sync zu verfolgen, in der Theorie, dass dies viel schneller sein wird?

Danke,
BRianGGG

Eure Logs zeigen eine Konvertierungsrate von etwa 180 fps. Das ist nicht schlecht, vielleicht kann @Will_Tschumy teilen, was er mit seinem Setup sieht.

Die Intel-Performance hängt stark vom Treiber und der Hardware ab. Sie kann zwischen 70 und 600 fps liegen. Eines, das ihr versuchen könnt, ist, eure BIOS-Einstellungen zu ändern, um die Intel-Grafik als primär einzustellen, und es einfach auszuprobieren. Wir werden diese Option im nächsten Build so anpassen, dass sie die vom Benutzer gewählte Encoder-Reihenfolge berücksichtigt, falls beide Encoder Hardware-Beschleunigungsfunktionen unterstützen. Standardmäßig wird der Encoder mit Hardware-Optionen ausgewählt (sofern im Profil nicht anders angegeben) (Handbrake ist dabei die erste Wahl).

Die FFMpeg-Konvertierungsprotokolle zeigen eine durchschnittliche Konvertierungsrate von 12,1x (363 fps). Es scheint, dass es so viele Nuancen bei den QuickSync-Dingen gibt, dass ich mich entschieden habe, es überhaupt nicht zu verwenden, obwohl mein Computer es unterstützt. Während der Konvertierung steigt jedoch die CPU-Last überhaupt nicht an – die gesamte Kodierung wird auf der GPU durchgeführt. Die CPU läuft während der Show-Analyse bei etwa 50%.

Hoffe, das hilft. Danke! Will.

Danke, Will.

Ich wollte gerade fragen, wie dieselbe CPU-Konfiguration zu so unterschiedlichen Ergebnissen führen kann, bis ich auf den folgenden CUDA-Benchmark gestoßen bin. Deine 1060-Karte ist fast doppelt so schnell wie meine 1050…

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

Als nächstes werde ich meinen Monitor an die Intel-Karte anschließen, um zu sehen, ob ich FFMPEG dazu bringen kann, diese anstelle von NVIDIA zu verwenden. Ich werde die Schnellste auswählen.

Ich habe im BIOS nachgesehen, und es gibt nicht allzu viele Optionen … Ich kann nicht einmal herausfinden, wie man Intel zum Primären macht.

BrianGGG

Denken Sie daran, dass Sie bei der Verwendung von Intels QuickSync handbrake verwenden müssen und für Nvidia CUDA ffmpeg im Profil. Das ist derzeit die einzige unterstützte Kombination.

Wo findet man den von dir erwähnten „config“-Ordner?

im Programmordner – bei mir ist es:
C:\Program Files\MCEBuddy2x\config