FFmpeg啊,真的是天天都想搞个大新闻——你们看,这才一年没到,已经刷了俩大版本了,把版本号直接干到了6.0。

那咋办,打不过就加入呗,咱们Jellyfin x Manjaro系列也刷个版本号。

Jellyfin x Manjaro系列第三回只讨论了使用QSV中出现的部份问题;而让FFmpeg用上QSV编码器(手动挡)所介绍的安装方法实在曲折繁琐,只适用于我这样的“五菱高手”——自动挡才是大趋势,手动党难成大业!

说白了,就是缺一篇完整实现QSV加速、使用FFmpeg 6.0、方便快捷干净卫生的教程呗!

# 只要这样,再这样,再那样…

开个玩笑,其实,在Manjaro上使用QSV非常容易,因为你需要的、你想要的、你不要的软件包,都有大神半仙提前准备好了。

友情提示,本篇教程只适用于支持intel-media-driver的Intel显卡,具体型号列表见Intel Media Driver GitHub仓库

# 第一步:安装Intel显卡驱动

Intel显卡驱动包括驱动程序intel-media-driver和前端APIintel-media-sdkonevpl。其中,较新的OneVPL仅支持11代及以后的核显/独显。

# 11代及以上
sudo pacman -S intel-media-driver onevpl-intel-gpu

# 其余型号
sudo pacman -S intel-media-driver intel-media-sdk

安装完成后,编辑/etc/profile.d/libva.sh,添加下面两行,告诉系统使用最新的iHD显卡驱动(即intel-media-driver),而不是已经过时的i965驱动,重启系统使配置生效:

LIBVA_DRIVERS_PATH=/usr/lib/dri
LIBVA_DRIVER_NAME=iHD

随后安装libva-utils查看驱动识别情况。

sudo pacman -S libva-utils

运行vainfo命令,如果出现类似下述的输出,则表示驱动已经安装成功。

$ vainfo
Trying display: wayland
Trying display: x11
error: can't connect to X server!
Trying display: drm
vainfo: VA-API version: 1.18 (libva 2.17.1)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.5.2 (ccc137c92)
vainfo: Supported profile and entrypoints
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileNone                   : VAEntrypointStats
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointFEI
      VAProfileH264Main               : VAEntrypointEncSliceLP
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointFEI
      VAProfileH264High               : VAEntrypointEncSliceLP
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: VAEntrypointFEI
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          : VAEntrypointVLD
      VAProfileVP8Version0_3          : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointFEI
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileHEVCMain10             : VAEntrypointEncSlice
      VAProfileVP9Profile0            : VAEntrypointVLD
      VAProfileVP9Profile2            : VAEntrypointVLD

如果你的电脑有多张显卡,那么直接运行vainfo很可能会报错。此时不妨试试vainfo --display drm --device /dev/dri/renderD12x,将/dev/dri/renderD12x替换为正确的显卡文件路径。只要有任意一张显卡支持iHD驱动即可,FFmpeg通常会自动识别并使用其中支持QSV的显卡。

# 第二步:安装Intel OpenCL后端

Intel显卡驱动的OpenCL后端目前由intel-compute-runtime提供,用于将HDR视频转换为SDR播放,Manjaro官方源的版本较老,因此我们使用AUR源安装。

AUR软件源是一个软件包共享平台,用户可以自行提交发布软件包与安装脚本供其他用户使用。使用AUR软件源一般需要首先安装yay包管理工具。

sudo pacman -S --needed git base-devel yay

随后使用yay安装intel-compute-runtime

yay intel-compute-runtime

在yay展示的各个选项中选择编译好的intel-compute-runtime-bin即可。安装完成后,可以使用clinfo命令查看是否安装成功。

# 第三步(也是最后一步):安装Jellyfin与Jellyfin FFmpeg

最新发布的Jellyfin 10.8.10修复了两个重要安全漏洞,并且推荐与jellyfin-ffmpeg6组合使用。

AUR已有编译好的jellyfin-bin软件包供下载,也有nyanmisaka上传的最新版jellyfin-ffmpeg6

yay jellyfin-bin jellyfin-ffmpeg6

最后,使用systemd启动jellyfin,打开http://localhost:8096即可食用。

# 立刻启动,并配置开机自启
sudo systemctl enable --now jellyfin

在Jellyfin网页界面中进入Dashboard -> Playback,将硬件加速(Hardware Acceleration)设置为Intel Quick Sync (QSV)

参照下图勾选转码相应功能。

Jellyfin Hardware Acceleration Settings

Enable hardware decoding for:对以下视频格式开启硬件解码。应根据显卡实际支持情况进行选择。

Prefer OS native DXVA or VA-API hardware decoders:解码时使用DXVA或VA-API硬件解码,而不使用QSV加速。使用QSV解码出错时可以勾选。

Enable hardware encoding:开启硬件解码。需要勾选。

Enable Intel Low-Power H.264 hardware encoderEnable Intel Low-Power HEVC hardware encoder:开启低功耗H.264/HEVC硬件编码器。9代以上的CPU可以尝试勾选这两个选项,以加速HDR转SDR播放。在12代核显上不需要额外进行配置,其他型号请看Jellyfin官方文档

Allow encoding in HEVC format:允许使用HEVC格式编码视频。如果你用来观看视频的设备支持HEVC编码,则建议勾选。

参照下图勾选HDR色调映射(Tone Mapping)相关功能,用于HDR视频转SDR播放。

Jellyfin Tone Mapping Settings

Enable VPP Tone mapping:VPP色调映射。效率比OpenCL更高,但仅支持HDR10,兼容性较差,不建议勾选。

Enable Tone mapping:OpenCL色调映射。建议勾选。

到此配置完成。

# 简单的是不是最好的

大环境总是去繁就简的。我小学的时候,家长接送孩子学的都还是手动挡。十年以后的今天,一眼望去,手动挡已经一车难觅。你问我手动挡和自动挡能做的事情有什么不同?我会说,差不离。但自动挡好上手,容易学,让更多的人能够在很短的时间里学会开车,成为自己的旅途的主人。

对于操作系统而言,同样如此——那些开着“自动挡”的操作系统在吸引用户方面具有天然的优势。但Linux不是轿车也不是巴士,而是载人航天——一个永远离不开“手动挡”的地方。Manjaro Linux正在迅速流失用户这个问题是一个悖论——Manjaro不是Steam OS,作为Linux发行版,它的目标不可能,也不应该是服务大多数人。它更像是一个带教员、掌门人,提供便捷的包管理系统,帮助对Linux真正感兴趣的人了解这个操作系统,并基于此了解计算机的工作原理。用户数量究竟多少并不重要,甚至用户的减少意味着有更多的用户已经“出师”,开始使用更加底层的Arch Linux,或者开始使用更加稳定的Linux发行版进行生产工作,甚至可能已经融会贯通,学会了在一些“自动挡”操作系统上实现各种“手动超控”。

或许,现在的我们离不开Manjaro,只是因为我们还是书生。

不如珍惜当下的简单,因为不知何时总要告别。