如何启用硬件加速

Beh*_*ani 5 video nvidia graphics

我安装了 Ubuntu 16.04 并且我有一个 NVIDIA GTX 1070 OC。我添加了这个 PPA:

ppa:graphics-drivers/ppa

我为我的 GTX 1070 OC 安装了 nvidia-370 软件包。然后我用HEVC编解码器播放了一个4K视频文件,除了硬件加速启用硬件解码HEVC编解码器,但mpv播放器使用的是软件解码模块。我该如何解决这个问题?

Kri*_*Dev 4

免责声明:抱歉,这是 VLC 的答案,而不是 mpv 播放器的答案。我相信 mpv 播放器存在错误或缺乏支持,因为在我的设置中,虽然 VLC 在 CPU 较低的情况下工作正常,但 mpv 播放器却不能。您可能会遇到 FFmpeg 多线程问题(请参阅第 4 点)。

我真的很难让它发挥作用,而且与 AMD 相比,我对 NVIDIA GTX 10*0 (Pascal) HEVC 支持有限感到有点失望。

0. 检查 HEVC 配置文件支持

编辑:自 450.51+ 版本起,NVIDIA VDPAU 驱动程序现在支持 Linux 上的 HEVC Main 10 配置文件

检查媒体文件 HEVC 配置文件:您可以通过右键单击文件 > Properties>Audio/Video选项卡 > Video>来检查文件 HEVC 配置文件Codec

检查驱动程序 HEVC 配置文件支持:切换到 NVIDIA 专有驱动程序(见下文)并运行:

$ vdpauinfo
Information string: NVIDIA VDPAU Driver Shared Library  367.57  [crop]
Decoder capabilities:

name                        level macbs width height
----------------------------------------------------
[crop]
HEVC_MAIN                      153 262144  8192  8192
HEVC_MAIN_10                   --- not supported ---
HEVC_MAIN_STILL                --- not supported ---
HEVC_MAIN_12                   --- not supported ---
HEVC_MAIN_444                  --- not supported ---

$ vdpauinfo
Information string: NVIDIA VDPAU Driver Shared Library  450.80.02  [crop]
Decoder capabilities:

name                        level macbs width height
----------------------------------------------------
[crop]
HEVC_MAIN                      153 262144  8192  8192
HEVC_MAIN_10                   153 262144  8192  8192
HEVC_MAIN_STILL                --- not supported ---
HEVC_MAIN_12                   153 262144  8192  8192
HEVC_MAIN_444                  --- not supported ---
Run Code Online (Sandbox Code Playgroud)

1.切换到NVIDIA专有驱动程序

您至少需要 R367 版本 ( nvidia-367)。

 software-properties-gtk &
Run Code Online (Sandbox Code Playgroud)

转到Additional drivers选项卡,检查NVIDIA binary driverApply更改。

2.在VLC中启用硬件加速

当然,你必须在VLC中启用硬件加速Tools>> Preferences( Simple) Input / Codecs>> Hardware-acceleration decoding= Auto。对于 NVIDIA,您可以VDPAU video decoder明确选择。

3.更新VLC到2.2.4或3.0

VLC 2.2.2 (Ubuntu 16.04) 中有几个错误,在更高版本中已修复(请参阅:更改日志),这些错误会导致此误导性错误:

$ vlc --version
VLC media player 2.2.2 Weatherwax
$ vlc <file>
[crop]
[00007fa4b42cc5d8] vdpau_avcodec generic error: unsupported codec 1211250229 or profile 1
Run Code Online (Sandbox Code Playgroud)

这显然是一个误导性且有缺陷的错误。很难说,但1211250229确实意味着AV_CODEC_ID_HEVC (可以通过用rustc这个生锈的代码编译来检查)。我们可以看到vdpauinfoHEVC 配置文件1( =Main ) 是受支持的。

目前,官方 VLC PPA 尚未提供 VLC 2.2.4(请在此处查看稳定版本)。因此,从 master 分支升级到 VLC 3.0(在此处检查 master 版本),但请记住它是夜间版本:

$ sudo add-apt-repository ppa:videolan/master-daily
$ sudo apt update
$ sudo apt install vlc
$ vlc --version
[crop]
VLC version 3.0.0-git Vetinari
Run Code Online (Sandbox Code Playgroud)

4.暂时禁用VLC FFmpeg多线程

由于这还不够,您现在可能会面临这个问题:

$ vlc <file> --verbose
[crop]
[00007f6bc4ccc688] avcodec decoder warning: thread type 1: disabling hardware acceleration
Run Code Online (Sandbox Code Playgroud)

VLC 论坛对此主题的解释:

这意味着您正在使用 FFmpeg,它不再允许同时启用硬件加速和线程。你需要使用 libav [但是]这是在编译 VLC 时决定的。您无法在运行时更改它。

在同一线程上,有一个解决方法:在 VLC > 工具 > 首选项(全部) > 输入/编解码器 > 视频编解码器 > FFmpeg 中,将值Threads0(auto) 更改为1

你就完成了!

但这是一个手动解决方法:请记住,要观看非 GPU 加速的视频,您应该重置 VLC FFmpegThreads设置以使用所有 CPU 核心...或使用 libav 从源代码编译 VLC。