[求助]如何正确启用AMD核显+NVIDIA独显时NVIDIA的硬件编码及解码

目前我的设备未启用dGPU,我一般使用PRIME调用NVIDIA独显。

按照Wiki内容,我在安装好了nvidia-open-dkms后,应该是不用在做啥额外的配置就能够使用NVENC的硬件编码的功能了,事实上也确实出现了/dev/nvidia-uvm/dev/nvidia-uvm-tools,但是这两个文件内无法通过文本编辑器查看到什么内容,使用run0 cat /dev/nvidia-uvm也会提示Invalid argument

输入了vulkaninfo命令会有如文件内所示的返回:vulkaninfo.txt (198.4 KB)

在验证vdpau时,发现无论是prime-run vdpauinfo还是vdpauinfo,都返回如下内容:

display: :0   screen: 0
API version: 1
Information string: NVIDIA VDPAU Driver Shared Library  590.48.01  Mon Dec  8 12:48:48 UTC 2025

Video surface:

name   width height types
-------------------------------------------
420     8192  8192  NV12 YV12 
422     8192  8192  UYVY YUYV 
444     8192  8192  NV24 YV24 
420_16  8192  8192  P010 P016 
422_16  8192  8192  UYVY YUYV 
444_16  8192  8192  Y_U_V_444_16 

Decoder capabilities:

name                        level macbs width height
----------------------------------------------------
MPEG1                           0 65536  4096  4096
MPEG2_SIMPLE                    3 65536  4096  4096
MPEG2_MAIN                      3 65536  4096  4096
H264_BASELINE                  51 65536  4096  4096
H264_MAIN                      51 65536  4096  4096
H264_HIGH                      51 65536  4096  4096
VC1_SIMPLE                      1  8190  2048  2048
VC1_MAIN                        2  8190  2048  2048
VC1_ADVANCED                    4  8190  2048  2048
MPEG4_PART2_SP                  3  8192  2048  2048
MPEG4_PART2_ASP                 5  8192  2048  2048
DIVX4_QMOBILE                   0  8192  2048  2048
DIVX4_MOBILE                    0  8192  2048  2048
DIVX4_HOME_THEATER              0  8192  2048  2048
DIVX4_HD_1080P                  0  8192  2048  2048
DIVX5_QMOBILE                   0  8192  2048  2048
DIVX5_MOBILE                    0  8192  2048  2048
DIVX5_HOME_THEATER              0  8192  2048  2048
DIVX5_HD_1080P                  0  8192  2048  2048
H264_CONSTRAINED_BASELINE      51 65536  4096  4096
H264_EXTENDED                  51 65536  4096  4096
H264_PROGRESSIVE_HIGH          51 65536  4096  4096
H264_CONSTRAINED_HIGH          51 65536  4096  4096
H264_HIGH_444_PREDICTIVE       51 65536  4096  4096
VP9_PROFILE_0                   1 262144  8192  8192
VP9_PROFILE_1                  --- not supported ---
VP9_PROFILE_2                   1 262144  8192  8192
VP9_PROFILE_3                  --- not supported ---
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                  153 262144  8192  8192
HEVC_MAIN_444_10               153 262144  8192  8192
HEVC_MAIN_444_12               153 262144  8192  8192
AV1_MAIN                       16 262144  8192  8192
AV1_HIGH                       --- not supported ---
AV1_PROFESSIONAL               --- not supported ---

Output surface:

name              width height nat types
----------------------------------------------------
B8G8R8A8         32768 32768    y  Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8 
R10G10B10A2      32768 32768    y  Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8 

Bitmap surface:

name              width height
------------------------------
B8G8R8A8         32768 32768
R8G8B8A8         32768 32768
R10G10B10A2      32768 32768
B10G10R10A2      32768 32768
A8               32768 32768

Video mixer:

feature name                    sup
------------------------------------
DEINTERLACE_TEMPORAL             y
DEINTERLACE_TEMPORAL_SPATIAL     y
INVERSE_TELECINE                 y
NOISE_REDUCTION                  y
SHARPNESS                        y
LUMA_KEY                         y
HIGH QUALITY SCALING - L1        y
HIGH QUALITY SCALING - L2        -
HIGH QUALITY SCALING - L3        -
HIGH QUALITY SCALING - L4        -
HIGH QUALITY SCALING - L5        -
HIGH QUALITY SCALING - L6        -
HIGH QUALITY SCALING - L7        -
HIGH QUALITY SCALING - L8        -
HIGH QUALITY SCALING - L9        -

parameter name                  sup      min      max
-----------------------------------------------------
VIDEO_SURFACE_WIDTH              y         1     8192
VIDEO_SURFACE_HEIGHT             y         1     8192
CHROMA_TYPE                      y  
LAYERS                           y         0        4

attribute name                  sup      min      max
-----------------------------------------------------
BACKGROUND_COLOR                 y  
CSC_MATRIX                       y  
NOISE_REDUCTION_LEVEL            y      0.00     1.00
SHARPNESS_LEVEL                  y     -1.00     1.00
LUMA_KEY_MIN_LUMA                y  
LUMA_KEY_MAX_LUMA                y  

在大模型的指示下我使用gst-inspect-1.0获得了文件内所示内容:gst-inspect-1.0.txt (29.1 KB)

我认为我的N卡应当是支持AV1硬件编码的。于是我在Kitty中输入prime-run gpu-screen-recorder -w portal -k av1 -q high -o ~/Videos/gsr/1.mkv以试图使用NVIDIA显卡录制AV1格式的视频,但却有这样的返回结果:

gsr warning: selected video codec av1 is not supported, trying h264 instead

而且在使用prime-run firefox后查看about:support,也会发现所有软件、硬件编码以及软件解码都是不支持的,只支持硬件解码其列出的所有视频格式:


想问下这种情况该咋解决?
另外,附上我的fastfetch:

OS: Arch Linux x86_64
Host: RS
Kernel: Linux 6.18.13-zen1-1-zen
Uptime: 49 mins
Packages: 1282 (pacman), 6 (flatpak)
Shell: zsh 5.9
Display (NE160QDM-NZC): 2560x1600 @ 2x in 16", 240 Hz [Built-in]
WM: niri 25.11 (Wayland)
Theme: Breeze [Qt]
Icons: Papirus-Dark [Qt]
Font: Sarasa Gothic SC (12pt) [Qt]
Cursor: default (24px)
Terminal: kitty 0.45.0
CPU: AMD Ryzen 9 7945HX (32) @ 5.46 GHz
GPU 1: NVIDIA GeForce RTX 5070 Ti Mobile [Discrete]
GPU 2: AMD Radeon 610M [Integrated]
Memory: 4.61 GiB / 14.83 GiB (31%)

没有开启dGPU,是AMD核显+NVIDIA独显混合输出。


经过大家的指点,才发现我其实已经启用了硬件编解码了,只是FireFox默认不支持VDPAU, 而GSC则似乎是因为我是混合输出所以注定不行。prime-run的影响范围只有GLX和Vulkan。

firefox只支持vaapi.需要自己配一下

gpu-screen-recorder没用过,我看官网写

AV1 (Optionally with HDR. Not currently supported on NVIDIA in the flatpak version of GPU Screen Recorder)

不知道是不是这个原因

浏览器用核显的VAAPI就好啦。

首先就是不要用vdpau,然后就是n卡需要nvidia-vaapi-driver,不过不知道后者在prime-run的情况下有没有问题

嗯,那看起来其实我的硬件编码没有什么问题了,刚才试了下HEVC,是支持的,这个问题问得有点草率了(⁎×ㅂ×⁎)༘
不对,我用了prime-run gpu-screen-recorder -w portal -k hevc -q high -o ~/Videos/gsr/1.mkv,结果nvtop里面N卡独显的占用一直是0……我怀疑之前不能用 AV1编码是因为我是混合输出,而不是 dGPU,录制的时候依旧用的是A卡(:multiply:╭╮:multiply:)

不过我用prime-run ffmpeg -hwaccel cuda -i 1.mkv -c:v libx265 ./hevc.mkv可以看到N卡只有微小的占用,用prime-run ffmpeg -hwaccel cuda -i 1.mkv -c:v libaom-av1 ./hevc.mkv更是没啥占用……搞不懂这算不算是启用了N卡的硬件加速。

嗯,我直接用prime-run mpv播放了一个HEVC的视频,可见到N卡有占用了,似乎这就只是FireFox不支持VDPAU而已。


不对,一个很离谱的事情,哪怕是我没有加上prime-run,直接用mpv命令播放视频,nvtop里面N卡也有占用了???

mpv默认会尝试nvdec。

prime-run影响的范围只有GLX和Vulkan而已。

你好歹看一眼文档啊……-hwaccel只管解码器。编码请使用相应的编码器,你用ffmpeg -encoders | grep -i nv列一下。

至于录屏,我的建议是,显示器接哪张显卡上,就用哪张显卡来编码视频。这样不需要把要编码的数据传来传去,比较有效率。