Ich brauche Hilfe, um herauszufinden, was die Gründe dafür sein könnten, warum ein PC und/oder VLC zum Abspielen von 4K-Videos die CPU statt der GPU verwenden. (Ich glaube, es wird immer die CPU zum Rendern von Videos verwendet, unabhängig vom Video, weil die Systemleistungsdiagramme immer eine GPU-Auslastung von vielleicht 2–5 % und eine Auslastung von 30–80 % bei einigen oder allen CPU-Threads zeigen.)
Folgendes weiß ich:
- spielenDieses Videoim Browser auf YouTube bei 2160p 60fps, funktioniert gut mit 80% CPU-Auslastung auf der Hälfte der Kerne - aber immer noch nicht viel GPU-Auslastung in meinem Systemmonitor. Spielendas gleicheDas Video in VLC nutzt jedoch 100 % meiner Ryzen 5 6 Core 12 Thread 4,2 GHz CPU und ruckelt bestenfalls und steht normalerweise still. [EDIT] Ich habe das Video in 3 Formaten: MP4, MKV und WebM, alle 4k@60. MKV und WebM nutzen dieselben Ressourcen (CPU) wie im Browser/YouTube – die FPS sind jedoch niedriger, definitiv unter 20 fps statt 60 fps. Das MP4 nutzt jedoch 100 % meiner CPU und ruckelt, wie ich erklärt habe.
- VLC ist auf die Verwendung der Hardwarebeschleunigung eingestellt und ich habe alle Optionen (Automatisch, Direct3D 11, DirectX DXVA 2.0) ausprobiert und VLC (und sogar meinen PC) nach den Änderungen neu gestartet. Kein Unterschied.
- Ich verwende den neuesten VLC (3.0.11)
- Die GPU ist eine GTX 1660Ti, die leistungsmäßig mehr als genug sein sollte, 120 Hz VR usw. bietet und die neuesten Nvidia-Treiber verwendet. Ich habe keine anderen/integrierten Grafikkarten.
Ist es möglich, dass VLC standardmäßig CPU-Rendering verwendet, weil ich keinen Codec/Treiber auf meinem System habe? Und dieselbe Frage gilt für meinen Browser, der mit besseren fps als VLC läuft, aber trotzdem nur die CPU zu verwenden scheint. Und wie kann ich herausfinden, welche Dekodierung auf welcher Hardware unterstützt wird und welche Codecs benötigt werden? Wie kann ich ein Protokoll oder etwas Ähnliches finden, in dem VLC mir mitteilt, ob es das aktuelle Video mit der GPU rendert oder nicht und warum?
Warum ist es so schwer, Videos auf der GPU zu dekodieren? Wenn Sie einen Compute-Shader schreiben können, der GPGPU-Berechnungen für alles Mögliche durchführt, wie z. B. Physikberechnungen, das Generieren von Meshes, das Formen von Punktwolken, die Primzahlfaktorisierung oder das Ausführen eines 100 % kompletten Videospiels im Shadertoy-Stil der Demoscene, warum dann nicht auch für Videos? Ich verstehe, dass einige Codecs sehr eigenartig sind und vielleicht für CPUs entwickelt wurden, aber eine Gaming-GPU von 2019-2020 kann das sicherlich besser bewältigen als eine 6-Core-CPU oder das ARM-Chip-Videomodul eines miesen Smartphones.
[Update] Ich habe herausgefunden, dass es mit der Kodierung zusammenhängt. Das Video im MP4-Container verwendet die GPU überhaupt nicht, während MKV und WEBM die GPU verwenden:
Es scheint, dass das YouTube MP4 verwendetAV1-Codec-Kodierungund die anderen 2 verwendenVP9-Ökodierung. Beides sind Open-Source-Formate, VLC sollte also keine Probleme damit haben.
Es auches scheint, dass es keine Grafikkarten gibtim Moment integrieren sie den Decoder in ihren Chip. Aber ob es dafür einen ASIC gibt oder nicht, bedeutet nicht, dass die GPU selbst es nicht auf GPGPU-Weise dekodieren könnte (wie auch im Wikipedia-Eintrag für AV1 erwähnt wird). So oder so löst dies mein Problem nicht, erklärt aber die Gründe.
Antwort1
Ich habe festgestellt, dass das Problem mit der Kodierung zusammenhängt. YouTube verpackt das Video in 3 Container: Der MP4-Container verwendet bei der Wiedergabe in VLC die GPU überhaupt nicht, während die anderen beiden Container MKV und WEBM die GPU verwenden:
Es scheint, dass das YouTube MP4 verwendetAV1-Codec-Kodierungund die anderen 2 verwendenVP9-Ökodierung. Beides sind Open-Source-Formate, VLC sollte also keine Probleme damit haben, kann aber aus irgendeinem Grund AV1 nicht auf der GPU abspielen. Die Frage ist also, warum VLC/Windows AV1 nicht auf der GPU abspielen können.
Es auches scheint, dass es keine Grafikkarten gibtderzeit gibt es welche, die den AV1-Decoder in ihren Chip integrieren (wie sie es bei h.264 und h.265 getan haben). Aber ob es dafür einen ASIC usw. gibt oder nicht, bedeutet nicht, dass die GPU selbst es nicht auf GPGPU-Weise dekodieren könnte (wie auch im Wikipedia-Eintrag für AV1 erwähnt wird). So oder so löst dies mein Problem nicht zu 100 %, erklärt aber die Gründe und ich weiß jetzt, wonach ich suchen muss (wie man AV1 auf der GPU spielt – aber ich weiß nicht, wie oft ich AV1 in meinem täglichen Leben begegnen werde, also bin ich im Moment ohne zufrieden)
Antwort2
Der Unterschied liegt darin, dass VLC seine eigenen Codecs verwendet, während der Browser die systeminstallierten Codecs verwendet.
Ich habe das Video in mehreren Auflösungen heruntergeladen. Es verwendet einen Codec mit der Bezeichnung "isom (isom/iso2/mp41)" und habe es ausprobiert:
- Mit VLC, 8K-Version - kein Video
- Bei VLC, 4K-Version - Video ruckelt mit großen Intervallen zwischen den Bildern (friert ein)
- Mit MP-HC (x64), 8K & 4K Versionen - flüssig, aber alle meine Kerne wurden zu 100% und etwa 30-50% der GPU genutzt
- Mit Chrome YouTube - flüssig mit geringer Nutzung von CPU und GPU, aber 720p ist die größte angebotene Auflösung
- Mit Firefox YouTube - 4K-Version, flüssig, wenig CPU, 20-50% GPU
- ABER als die 8K- und 4K-Videodateien gelöscht wurdendirekt in Firefox oder Chrome, die Videowiedergabe funktionierte grundsätzlich nicht.
Mein Fazit ist, dass dieser Codec viele Ressourcen benötigt und für die meisten Spieler ziemlich problematisch ist. Die Browser schummeln bei der Nutzung von YouTube, indem sie eine viel niedrigere Auflösung verwenden als die, die sie eigentlich verwenden sollten.