4k 10bit hdr 视频使用 svp 插帧, madvr 渲染教程

在windows系统上使用 MPC-BE + svp + madvr 来做视频插帧播放是最好的选择,这篇文章讲的就是如何配置这一套环境。
如果想要看不同方案的分析,请看这篇文章: 4k 10bit hdr 视频插帧播放 - 技术方案选择

1 软件硬件环境

1.1 硬件

跟性能相关的硬件
硬件 型号 备注
显示器 LG 27UL650-W。4K 10bit 60Hz 显示器 4K 10bit 60Hz 显示器或者更高配置的显示器都行。这篇文章讲的就是 4K 10bit HDR 影片播放。不过真 HDR 显示器太贵了,我没有买,这个显示器的 HDR 模式并没有什么效果。
CPU AMD Ryzen 7 3700x 性能比这个差的话,播放 4k 24FPS 10bit 视频容易因为 cpu 性能不足以支撑 svp 实时插帧而导致掉帧。
显卡
Nvidia RTX 2080
使用 Jinc 作为 image upscaling 算法的话,Mad Max 4k 蓝光原盘能用掉 40% 的 gpu 资源。
chrome 最大化窗口打开 bilibili,疯狂上下滚动窗口里面的内容,用掉 40% 的 GPU。
所以不玩游戏的话,单个 4K 屏幕最少也要 50% 的 Nvidia RTX 2080 显卡的性能才行。如果要开启更高清晰度的 image upscaling 算法,需要比 2080 更好的显卡。
跟视频播放性能关系不大的硬件
硬件 型号 备注
CPU散热器 买CPU送的AMD幽灵棱镜  
主板 Msi Mortar Max B450M  
内存
威刚 3600 MHz 8G * 2
 
HDD
希捷酷鱼BarraCuda 2TB 7200RPM 这个是 SMR 硬盘,建议不要买,迅雷下载影片到它里面的时候IO延迟感人。
SSD Samsung PM981a 512GB NVMe  
机箱 爱国者黑曼巴  
电源 振华冰山金蝶GX550  
显卡支架 九州风神GH01  

1.2 软件

[VCB-Studio 科普教程 2.2] 基于 PotPlayer 和 madVR 的播放器教程(已更新 XySubFilter) 说安装必须全英文???连 "Program Files" 都不行???所以我就把除了 svp 之外的软件安装到了 "C:\MediaPlayer\" 目录下面。
 
软件选择原则:
  1. 只使用64位的应用。下面列表中的所有软件都是 64位的。4K svp 插帧的时候 MPC-BE 会用掉 8GB 左右的内存,32位程序根本没法分配这么大的地址空间。
  2. 没有特殊情况,下载最新版本的软件。下面的版本只是列出我测试过没问题的版本,不代表推荐使用旧版本的。
 
软件版本
MPC-BE, nvidia 显卡驱动需要自己下载。
SVP 安装包中有 LAVFilters, madVR,不用单独下载, 建议直接使用SVP安装包中给的版本,这样之后可以直接用 svp 的更新程序来升级版本了。SVP 里面带的是 MPC-HC,MPC-BE 需要手动安装。你也可以直接用 svp 里面带的 MPC-HC,应该没啥影响。
 
下面的软件需要自己下载安装包
程序 版本
操作系统 windows 10 21H2
Nvidia 显卡驱动 471.68
MPC-BE
1.5.6.6000
SVP 4.5.0.213

svp 安装程序里面具体安装的组件版本。这些软件都在 svp 安装包里面有
没有列出来的组件,我都没有安装,对这篇文章里面描述的配置流程没有影响。
程序 版本 说明
SVP Manager(Pro) / [DS_64] Core for DirectShow 64-bit 4.5.0.212 必备
SVP extensions / SVPtube 2 2.1.0.221 可以不安装
3rd-party software(mandatory) / [DS_32][DS_64] AviSynth Filter(AVSF) 1.2.1 必备
3rd-party software (optional) / [DS_32][DS_64] madVR video renderer v0.92.17 10bit播放必须用它
3rd-party software (optional) / [DS_32][DS_64] LAV Filters 0.75.1 强烈建议安装,MPC-BE 自带的解码器功能比较弱,只能用 dxva2 做硬解,没有 d3d11。

2 配置软件 - 系统设置

2.1 显卡

2021-01-01 遇到过莫名其妙显卡配置被重置了,不知道是不是更新nvidia显卡驱动导致的。
全部通过 `Nvidia 控制面板` 进行设置
(1) 动态范围参数调整至完全
(2) “输出颜色深度” 根据显示器调节,Dell U2718Q 为 10bit,“输出动态范围” 选择完全
(3) 修改 nvidia 显卡电源设置
下面的应该是不用设置的,Nvidia 显卡会自动适应。

2.2 win10操作系统电源

设置为“最大性能模式”。注意不能用 settings.app 来操作,需要进入传统的电源管理功能来修改。
 
节能模式会导致CPU被降频,然后很多程序就会卡顿了。

2.3 BIOS 电源配置

可以在 MSI 主板中开启 Game Ready Boost。但是开了之后风扇会疯狂运行,而且我的电脑性能其实已经够了,就算了。

3 配置软件 - MPC-BE 视频播放器基础配置

(1)历史记录看个人喜好是否保留。进程优先级建议设置为高于普通。
 
(2)禁止抢占全局快捷键
建议多禁用一些快捷键,特别是那些空格键上面的快捷键,容易误触
 
(3) 确保鼠标左键单击不会暂停/播放视频
 
(4) 鼠标放在进度条上的时候,显示预览画面
 
(5) scale to video size = 100%
默认情况下 mpc-be 启动只会有一个很小的窗口。试了下很多其他的选项,没有办法让这个破东西启动的时候直接最大化。最靠谱的选项是,快捷方式里面设置启动时最大化,mpc-be配置里面设置播放时调整到视频的大小。
 
(6) youtube-dl 相关设置
其实没啥用,就是习惯性设置为2160p这个显示器能展示的最高分辨率。
 
(7) 字幕设置 Subtitles-Rendering
Sub pictures to buffer: 据说对于特效很多的字幕,不设置成0的话,会卡
Maximum texture resolution: 默认会以一个非常低的分辨率渲染字幕,设置成 Desktop 的话会按照桌面的分辨率来渲染。
Allow Animation when buffering: 10bit 视频通过SVP插帧播放,字幕里面出现动画的时候,播放器会消耗极其多的CPU资源,导致视频播放出现卡顿。这个选项取消勾选,可以禁用 ass 字幕的动画,只保留文本和位置信息。
 
(8) Subtitles - Default Style
GB2312: 估计是字幕语言自动检测?
Screen Alignment & Margins:按照图上的设置,字幕会在正确的位置。
Position subtitles relative to the video frame: 默认是勾选上的,会导致字幕显示在画面里面,而不是显示在黑边上。取消勾选之后,字幕能显示在黑边里面。还有一个奇怪的半勾选状态,不知道是什么效果,没有测试过。
 
(9) 正确截图
Player - Keys 里面有3个截图的快捷键:
  1. "Save Image" 这个会弹出对话框,让你选择截图选项,文件保存位置。这里的选项配置,会被 "Save Image(Auto)" 用到。比如这里调整了文件格式,压缩率,是否包括字幕,auto 也会按照这里的配置来。
  2. "Save Image (auto)" 这个不弹出对话框,直接保存一张截图到默认位置。
  3. "Save displayed image (auto)" 这个截图的时候,会把播放器的黑边也截图下来。
"Save displayed image (auto)" 一般不使用,其他都可以使用。
 
madVR + MPC-BE 的组合,截图的时候,madVR可以渲染字幕,MPC-BE 可以再渲染一次字幕,这样会导致问题:
  1. MPC-BE 渲染字幕的时候,不会处理 delay 的问题,madVR 会正确处理,所以你播放视频的时候把字幕设置了1s的 delay,截图之后发现截图的结果和播放器里的结果完全不一样。
  2. MPC-BE 在截图里面加上的字幕渲染效果,和真实播放器的效果是不一样的,真实播放器用的效果是 madVR 渲染出来的。然后对于复杂的字幕,截图之后可能会发现有两种效果不一样的字幕叠加在一起,非常诡异。
 
所以需要禁用 MPC-BE 的截图时字幕渲染功能:
  1. "File - Save Image" 弹出的对话框里面,去除勾选 "Include subtitles" 然后保存一张截图
  2. madVR 里面 "don't draw subtitles" 的选项不要勾选
 
现在可以正常使用 "Save Image" 或者 "Save Image (auto)" 来截图。
 
(10) 配置 splitter
LAV Filter 不支持 webvtt 字幕,mpc-be 内置的 filter 支持。所以 Source Filter 和 Splitter 不能用 LAV Filter 提供的,需要用 mpc-be 内置的。
update: 0.75 版本支持了 mkv/webm 里面的 webvtt 字幕格式,可以改成用 LAV Filter 提供的 splitter 了。不过这个东西其实对视频播放影响不大,用 MPC-BE 内置的也没有什么关系。
 
Internal Filters 里面的 Source Filters 全部勾选上
 
External Filters 里面的 File Source(Async.) 和 LAV Splitter 不要勾选。或者直接把这两个东西从列表里面 remove 掉也行
 
(11) MPC-BE 加载需要的外置 Filter
看上面的截图,把打上勾的 Filter 加入到 External Filters 列表里面,并且打上勾的 Filter 全部要设置为 Prefer 来启用。

4 配置软件 - 配置 LAV Filters

(1) 启用硬解
在 MPC-BE 的 External Filters 列表里面双击 LAV Video Decoder 来进入下面的配置界面。
如果需要使用 SVP,按照下面的配置成使用 Nvidia CUVID。根据测试,这个比 DXVA2(copy-back) 或者 D3D11(copy-back) 都节约 GPU 资源。SVP 官方也推荐N卡用户使用 NVIDIA CUVID
如果不使用 SVP,则其他都不变。把 Hardware Decoder to use 改成 "D3D11 Automatic"。注意不要用 DXVA2(native),DXVA2 是基于 DirectX 9.0 API 开发的,按理来说 DirectX 11 API 的性能应该是比 DirectX 9 高的。
 
MPC-BE 内置的 Video Decoder 功能比较弱,只能使用 dxva2 硬解视频,但是按照 mpv 的文档,dxva2 no copy back 是不安全的,会强制使用 BT.601 色彩空间,导致画质损失。LAV Video Decoder 可以用 Nvidia cuvid 或者 D3D11 video decode 功能,强大很多。
 
Quality reduction with hardware decoding
In theory, hardware decoding does not reduce video quality (at least for the codecs h264 and HEVC). However, due to restrictions in video output APIs, as well as bugs in the actual hardware decoders, there can be some loss, or even blatantly incorrect results.
In some cases, RGB conversion is forced, which means the RGB conversion is performed by the hardware decoding API, instead of the shaders used by --vo=gpu. This means certain colorspaces may not display correctly, and certain filtering (such as debanding) cannot be applied in an ideal way. This will also usually force the use of low quality chroma scalers instead of the one specified by --cscale. In other cases, hardware decoding can also reduce the bit depth of the decoded image, which can introduce banding or precision loss for 10-bit files.
vaapi and d3d11va are safe. Enabling deinterlacing (or simply their respective post-processing filters) will possibly at least reduce color quality by converting the output to a 8 bit format.
dxva2 is not safe. It appears to always use BT.601 for forced RGB conversion, but actual behavior depends on the GPU drivers. Some drivers appear to convert to limited range RGB, which gives a faded appearance. In addition to driver-specific behavior, global system settings might affect this additionally. This can give incorrect results even with completely ordinary video sources.
All other methods, in particular the copy-back methods (like dxva2-copy etc.) should hopefully be safe, although they can still cause random decoding issues. At the very least, they shouldn't affect the colors of the image.
In particular, auto-copy will only select "safe" modes (although potentially slower than other methods), but there's still no guarantee the chosen hardware decoder will actually work correctly.
In general, it's very strongly advised to avoid hardware decoding unless absolutely necessary, i.e. if your CPU is insufficient to decode the file in questions. If you run into any weird decoding issues, frame glitches or discoloration, and you have --hwdec turned on, the first thing you should try is disabling it.
 
(2) 视频解码配置
 
(3) 音频解码配置
双击 LAV Audio Decoder
 
不开启 Mixer 的话,5.1 声道的声音在2.0扬声器上输出会有问题。

5 配置软件 - SVP 配置

5.1 一些与画质无关的修改

(1)使用 English
用了 English 才方便和官网wiki的截图对应。
 
(2)禁用更新提示
2次 SVP 更新,都出现了故障,还是不能随便更新的。
 
(3)svptube设置
根据官方网站资料,其他视频播放器都有些奇奇怪怪的支持问题,只有 mpv 是完美的。同时我自己测试了一下,SMPlayer 只能加载 youtube 视频,音频没有,字幕也没有。
 
(4)开机自启
SVP图标右击 - Application settings

5.2 GPU 加速

根据 SVP 官方资料,如果关闭 GPU 加速,完全采用 CPU 运算,对于画质会有负面的影响。
下面是不同配置情况下,对于同一部 4K 10bit 24fps HDR 影片,我的机器的资源占用率。注意,因为 DirectShow 播放器配合 SVP 的情况下不能处理 10bit HDR 视频,测试是基于 mpv + SVP 做的。所有情况下都开启了硬解。
所有的数据都是从 win10 任务管理器获取的。
  纯CPU GPU加速
无 Nvidia Optical Flow
GPU加速
启用 Nvidia Optical Flow
总GPU占用率 68% 84% 90%
GPU - 3D 68% 84% 90%
GPU - Cuda 0 15% 63%
GPU - Copy(Copy有多个,选择了最大的一个) 0 28% 24%
GPU - Decode 10% 9% 12%
CPU 60%-70% 72% 27%
内存 3470M 6795M 6000M
 
根据 2020-05-29 的测试结果,Nvidia Optical Flow 会导致电影的一部分场景出现严重的失真,最好关闭。
 
只开启 GPU Acceleration,不要开 Nvidia Optical Flow。

5.3 SVP Profile

下面所有的参数都是给电影优化的,对于动画不适用
 
经过测试,只是通过滑动条改改参数是不行的,有一部分电影场景会出现雪花问题。所以不要用下面这种设置方式
 
使用下面的自定义配置就没有问题了。如果还是发现有雪花,那就把 Frames interpolation mode 改成 "2m"(min artifacts)

5.4 禁止调整 Video Frame Size

5.5 禁用 Outer Lighting

5.6 Vapoursynth 10bit 输出

SVP图标右击 - Application settings - Additional Options

6 配置软件 - madVR 设置

(1) MPC-BE 中把 madVR 设置为 Video Renderer
 
(2) 正确设置 device type
 
(3) 设置 RGB output levels & color depth
 
(4) calibration
 
(5) HDR
播放HDR视频的时候,需要把显示器的亮度对比度都调整到最高,不然 peak nits 达不到 350。
 
(6) artifact removal
 
(7) chroma upscaling
 
(8) image downscaling
下面这个 SSIM 看过去也可以
 
(9) image upscaling
(9.1) 如果跑得动,用 NGU Standard
NGU Standard 我的显卡跑不动 1080p 60fps 视频拉升到 4K 输出。
 
(9.2) 否则可以用 Jinc
 
(9.3) super-xbr 看过去也不错,虽然没有 Jinc 好。
 
(10) rendering - general settings
delay playback start until render queue is full: svp 使用 cpu 处理视频的时候比较慢,如果不加上 delay,最开始几秒钟的视频会变成幻灯片。
delay playback start after seeking, too: 拖动的时候,svp 也需要重新处理视频,也会变成幻灯片。
enable automatic fullscreen exclusive mode: 此选项主要用来防撕裂,用处不大,有撕裂问题的话可以打开,否则建议关闭,因为可能会引发很多驱动 bug。
use Direct3D 11 for presentation: d3d11 相比 d3d9 一般情况下会有性能的提升。
 
(11) rendering - windowed mode
present several frames in advance: 勾则开启 0.87.10+加入的新视窗模式,不勾则使用以前的旧视窗。新视窗模式有接近全屏独占的效率和流畅度,如要使用必须关闭 general settings 里的 enable automatic fullscreen exclusive mode 全屏独占和 disable desktop composition。
 
(12) rendering - smooth motion
使用 svp 处理 smooth motion 问题
 
(13) rendering - dithering
 
(14) rendering - screenshots
  • create screenshots with a custom zoom factor
madVR 默认会抓取播放器窗口大小的 screenshot,和原始视频大小不匹配。
100% view 和 encoded video size 经过测试,都是原始视频大小,具体有什么区别不清楚。
  • don't draw subtitles
这个选项勾选上去,字幕就不会被截图了。

7 配置软件 - 字幕

根据 進階教程系列(三) - 字幕渲染濾鏡 XySubFilter丶AssFilterMod(2020-10-28更新) 这篇文章的内容,没有必要安装外置的字幕插件了。
看了下 xyVsFilter xySubFilter github release 页面,最新的 release 版本都是 2018 年的版本了。
序号 字幕渲染软件 版本 性能
1 MPC-BE内置 1.5.4 (build 4850) beta 不开启svp,不卡;开了svp,4k 10bit视频,有特效字幕,整个视频就卡成幻灯片。
1080P 10bit的进击的巨人48集OP,用 LoliHouse - simplified visual effect 不会卡顿,用 LoliHouse - full visual effect 在复杂特效的时候会卡顿。
2 XySubFilter 3.1.0.752 比1性能差,非常卡
3 XySubFilter libass mod XySubFilter_git-8c23283_x64.zip 比2性能差,非特效字幕也会占用大量CPU
4 xy-VSFilter (pfmod) v3.2.0.802 (20181031) 和2差不多卡。
1080P 10bit的进击的巨人48集OP,用 LoliHouse - simplified visual effect 会严重卡顿,用 LoliHouse - full visual effect 在复杂特效的时候会卡顿得严重掉帧。
结论:还是用 MPC-BE 内置的字幕组件好了,这个的性能远远比外置的字幕组件好。
 
2021-01-30 
对复杂特效字幕渲染卡顿问题进行了测试,发现下面的结果。打钩的代码没有问题,打叉的代表会出现问题。
测试方法:使用 svpcode 转码 H265 4K 10bit 24FPS 的视频到 H265 4K 10bit 60FPS。然后两个视频加载同样的特效字幕,24FPS 版本不开启 SVP不卡,24FPS 开启 SVP 插帧到60FPS卡,60 FPS 不开启 SVP 不卡。
推测:视频字幕渲染软件和 SVP 存在兼容性问题。
☑ H265
☑ 10bit
☑ 60FPS
✘   SVP
 
下面的组合都是没有问题的:
  1. H265 & 4K & 10bit & 60FPS & no svp
  2. H265 & 4K & 10bit & 24FPS & no svp
  3. H265 & 1080P & 10bit & 24FPS & no svp
  4. H264 & 4K & 10bit & 60FPS & no svp
  5. H264 & 4K & 8bit & 24FPS & svp
  6. H264 & 1080p & 8bit & 24FPS & svp
 
下面的组合有问题
  1. H265 & 4K & 10bit & 24FPS & svp
  2. H265 & 1080P & 10bit & 24FPS & svp

8 附录-显示器10bit输出测试

经过测试,MPC-BE 搭配 madVR 在配置正确的情况下,能正确输出 10bit。mpv 看不出来,不管是窗口还是全屏模式,都看不到色带。
测试图片或者视频自己搜索,网上有很多。
  1. 显卡驱动面板开启10bit,我现在用的是N卡,A卡也是一样
  2. 禁用 SVP 这些多余的滤镜
  3. madvr setting里面,在processing → artifact removal里面去掉两个功能的勾
  4. rendering → dithering里面选none,以避免madvr的去色带功能干扰观察10bit有没有正确输出
  5. 窗口模式下应该有条纹,全屏则看不到。说明全屏模式下确实是10bit输出的。
  6. 最后确认10bit正确输出之后要重新开回来
 
注意:下面的"enable automatic fullscreen exclusive mode" 不要开启。即使不开启,也能在全屏模式下使用 10bit 输出,只是 MPC-BE 的控件展示出来的时候,会变成 8bit,消失之后会自动回到 10bit。如果开启了,会导致控件显示消失切换的时候出现严重的卡顿。
"use Direct3D 11 for presentation" 这个选项要开启,不然后果未知。
 
2021-01-10: 经过测试,按照下面表格中的软件版本,使用 Avisynth Filter 的 SVP 开启插帧之后,MadVR 在全屏模式下,还是能正确输出 10bit 的图像。也就是说,10bit 输出完全成功。
操作系统 windows 10 20H2
Nvidia 显卡驱动 460.89
MPC-BE
1.5.4 (build 4850) beta
LAVFilters 0.74.1
madVR v0.92.17
SVP 4.5.0.200

9 了解更多 - 视频播放的基础知识

10 了解更多 - 常用资料来源

  1. 万年冷冻库
  2. 睇片研究所
  3. 黑米奇SVP
  4. VCB-Studio
  5. 《视频播放的调教 PlaybackGame v0.4》    这是一本电子书

12 参考资料

多个软件的配置
MPC-HC
Potplayer
madVR
不是重点
原文地址:https://www.cnblogs.com/cmicat/p/15586235.html