PC / VLCで4K HDRビデオを再生すると、GPUを使用する代わりにCPUが最大限に活用される

PC / VLCで4K HDRビデオを再生すると、GPUを使用する代わりにCPUが最大限に活用される

PC や VLC が 4K ビデオの再生に GPU ではなく CPU を使用する理由を理解するのに助けが必要です。(システム パフォーマンス グラフでは常に GPU 使用率が 2~5%、一部またはすべての CPU スレッドの使用率が 30~80% と表示されるため、ビデオに関係なくビデオのレンダリングには常に CPU が使用されると思います)

私が知っていることは以下の通りです:

  • 遊ぶこのビデオブラウザでYouTubeを2160p 60fpsで再生すると、半分のコアで80%のCPU使用率で問題なく動作します。ただし、システムモニターではGPU使用率はあまり高くありません。再生中同じただし、VLC のビデオは、ryzen 5 6 コア 12 スレッド 4.2GHz CPU を 100% 使用し、最悪でもカクカクして、通常は停止します。[編集] ビデオは mp4、mkv、webm の 3 つの形式で入手しました。すべて 4k@60 です。MKV と WEBM は、ブラウザー/yt と同じリソース (CPU) を使用しますが、FPS は低く、60fps ではなく 20fps 未満であることは間違いありません。ただし、MP4 は CPU を 100% 使用し、説明したようにカクカクします。
  • VLC はハードウェア アクセラレーションを使用するように設定されており、すべてのオプション (自動、direct3D 11、directx DXVA 2.0) を試し、変更後に vlc (および PC) を再起動しましたが、違いはありませんでした。
  • 私は最新のVLC(3.0.11)を使用しています
  • GPU は GTX 1660Ti で、馬力的には十分すぎるほどで、120Hz VR などが可能で、最新の NVIDIA ドライバーを使用しています。他の統合グラフィック カードは持っていません。

私のシステムに何らかのコーデック/ドライバーがないため、VLC がデフォルトで CPU レンダリングになっている可能性はありますか? また、VLC よりも優れた fps で動作するにもかかわらず、CPU のみを使用しているように見えるブラウザーについても同じ質問があります。また、どのハードウェアでどのデコードがサポートされているか、どのコーデックが必要かを調べるにはどうすればよいですか? VLC が GPU を使用して現在のビデオをレンダリングしているかどうか、またその理由を知らせるログなどを調べるにはどうすればよいですか?

GPU でビデオをデコードするのはなぜ難しいのでしょうか。物理計算、メッシュ生成、ポイントクラウドのスカルプティング、素因数分解、100% 完全なデモシーン シェーダートイ スタイルのビデオ ゲームの実行など、あらゆる古い処理に対して GPGPU 計算を実行するコンピュート シェーダーを作成できるのに、ビデオではできないのはなぜでしょうか。一部のコーデックは非常に特殊で、CPU 用に設計されている可能性があると理解していますが、2019 ~ 2020 年のゲーミング GPU は、6 コア CPU や粗悪なスマートフォンの ARM チップ ビデオ モジュールよりも確実に強力に処理できます。


[更新] エンコードに関連していることがわかりました。MP4 コンテナ内のビデオは GPU をまったく使用しませんが、MKV と WEBM は GPU を使用します。

ここに画像の説明を入力してください

YouTube MP4はAV1コーデックエンコーディング残りの2つはVP9 コーディングこれらは両方ともオープンソース形式なので、VLC で問題なく処理できるはずです。

またビデオカードがないようです現時点では、デコーダをチップに組み込んでいます。しかし、ASIC があるかどうかは、GPU 自体が GPGPU 方式でデコードできないことを意味するものではありません (AV1 の Wikipedia エントリにも記載されています)。いずれにせよ、これで私の問題は解決しませんが、理由が説明されます。

答え1

問題はエンコードに関連していることがわかりました。Youtube はビデオを 3 つのコンテナーにパッケージ化します。MP4 コンテナーは vlc で再生されるときに GPU をまったく使用しませんが、他の 2 つのコンテナー MKV と WEBM は GPU を使用します。

ここに画像の説明を入力してください

YouTube MP4はAV1コーデックエンコーディング残りの2つはVP9 コーディングこれらは両方ともオープンソース形式なので、VLC で問題なく処理できるはずですが、何らかの理由で AV1 を GPU で再生できません。そこで疑問になるのは、なぜ VLC / Windows が AV1 を GPU で再生できないのかということです。

またビデオカードがないようです現時点では、AV1 デコーダーをチップに組み込んでいるメーカーは他にありません (h.264 や h.265 で行ったように)。しかし、ASIC などがあるかどうかは、GPU 自体が GPGPU 方式でデコードできないという意味ではありません (AV1 の Wikipedia のエントリにも記載されています)。いずれにしても、これで私の問題は 100% 解決されませんが、原因は説明され、今何を探すべきかがわかりました (GPU で AV1 を再生する方法 - ただし、日常生活で AV1 に遭遇する頻度はわからないので、今のところは AV1 なしで満足しています)。

答え2

違いの原因は、VLC は独自のコーデックを使用するのに対し、ブラウザはシステムにインストールされたコーデックを使用することです。

私はいくつかの解像度でビデオをダウンロードしました。それは「isom (isom/iso2/mp41)」として識別されるコーデックを使用しており、それを試してみました:

  • VLC、8Kバージョン - ビデオなし
  • VLC、4K バージョン - フレーム間の間隔が大きく、ビデオが飛び飛びになる (フリーズする)
  • MP-HC (x64)、8Kおよび4Kバージョンではスムーズでしたが、すべてのコアを100%使用し、GPUは約30~50%使用しました。
  • Chrome YouTube では、CPU と GPU の使用率が低く、滑らかに動作しますが、提供される最大解像度は 720p です。
  • Firefox の YouTube - 4K バージョン、滑らか、CPU は少なめ、GPU は 20 ~ 50%
  • しかし、8Kと4Kのビデオファイルが削除されたときFirefox または Chrome に直接インストールすると、ビデオの再生は基本的に機能しませんでした。

私の結論は、このコーデックは多くのリソースを必要とし、ほとんどのプレーヤーにとってかなり面倒だということです。ブラウザは、YouTube を使用するときに、本来使用するはずの解像度よりもはるかに低い解像度を使用して不正行為をします。

関連情報