在 PC/VLC 上播放 4k hdr 视频会占用最大 CPU 而不是 GPU

在 PC/VLC 上播放 4k hdr 视频会占用最大 CPU 而不是 GPU

我需要一些帮助来弄清楚为什么 PC 和/或 VLC 使用 CPU 而不是 GPU 来播放 4k 视频。(我认为它总是使用 CPU 来渲染视频,无论视频是什么,因为系统性能图总是显示 GPU 使用率可能为 2-5%,部分或全部 CPU 线程的使用率为 30-80%)

以下是我所知道的情况:

  • 这个视频在 youtube 浏览器中以 2160p 60fps 的速度播放,在半数核心的 CPU 使用率为 80% 的情况下运行良好 - 不过,在我的系统监视器中 GPU 使用率仍然不高。播放相同但是,VLC 中的视频占用了我 ryzen 5 6 核 12 线程 4.2GHz CPU 的 100%,并且充其量只是卡顿,通常静止不动。[编辑] 我获得了 3 种格式的视频:mp4、mkv 和 webm,均为 4k@60。MKV 和 WEBM 使用与浏览器/yt 相同的资源(cpu)-但是,FPS 较低,肯定低于 20fps 而不是 60fps。但是,正如我所解释的那样,MP4 占用了我 100% 的 CPU 并且卡顿。
  • VLC 设置为使用硬件加速,我尝试了所有选项(自动、direct3D 11、directx DXVA 2.0),更改后重新启动 vlc(甚至我的电脑),没有任何区别。
  • 我正在使用最新的 VLC (3.0.11)
  • GPU 是 gtx 1660Ti,马力应该绰绰有余,可以实现 120Hz VR 等,并使用最新的 nvidia 驱动程序。我没有任何其他/集成显卡。

是不是因为我的系统上没有某种编解码器/驱动程序,所以 VLC 默认使用 CPU 渲染?同样的问题也发生在我的浏览器上,它的 fps 比 VLC 好,但似乎仍然只使用 CPU。另外,我如何才能知道哪些硬件支持哪些解码以及需要哪些编解码器?我如何才能找到日志或其他东西,VLC 会告诉我它是否使用 GPU 渲染当前视频以及原因是什么?

为什么在 GPU 上解码视频如此困难?如果你可以编写一个计算着色器来执行任何旧事物的 GPGPU 计算,例如计算物理、生成网格、雕刻点云、素数分解或运行 100% 完整的演示场景着色器风格的视频游戏,那么为什么不可以解码视频呢?我知道有些编解码器非常特殊,可能是为 CPU 设计的,但 2019-2020 年的游戏 GPU 肯定可以比 6 核 CPU 或糟糕的智能手机的 ARM 芯片视频模块更好地执行它。


[更新] 我发现它与编码有关。 MP4 容器中的视频根本不使用 GPU,而 MKV 和 WEBM 使用 GPU:

在此处输入图片描述

youtube MP4 似乎使用AV1 编解码器编码另外 2 个使用VP9 编码。这两种都是开源格式,因此 VLC 处理它们应该没有问题。

它也是似乎没有任何显卡现在,将解码器整合到芯片中的公司已经很多。但无论是否有 ASIC,都并不意味着 GPU 本身无法以 GPGPU 方式对其进行解码(正如 AV1 的维基百科条目中提到的那样)。无论哪种方式,这都不能解决我的问题,但可以解释原因。

答案1

我发现问题与编码有关。Youtube 将视频打包在 3 个容器中:MP4 容器在 vlc 中播放时根本不使用 GPU,而其他 2 个容器 MKV 和 WEBM 使用 GPU:

在此处输入图片描述

youtube MP4 似乎使用AV1 编解码器编码另外 2 个使用VP9 编码。这两种都是开源格式,因此 VLC 应该可以毫无问题地处理它们,但由于某种原因,无法在 gpu 上播放 AV1。所以问题变成了为什么 vlc / windows 不能在 gpu 上播放 av1。

它也是似乎没有任何显卡现在,将 AV1 解码器整合到芯片中的公司(就像他们对 h.264 和 h.265 所做的那样)。但无论是否有 ASIC 等,并不意味着 gpu 本身无法以 GPGPU 方式对其进行解码(正如 AV1 的维基百科条目中提到的那样)。无论哪种方式,这都不能 100% 解决我的问题,但解释了原因,我知道现在要寻找什么(如何在 gpu 上播放 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,20-50% GPU
  • 但当 8K 和 4K 视频文件被删除时直接进入 Firefox 或 Chrome,视频播放基本不起作用。

我的结论是,这种编解码器需要大量资源,对大多数播放器来说相当麻烦。浏览器在使用 YouTube 时会使用比应使用的分辨率低得多的分辨率来作弊。

相关内容