欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

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

最编程 2024-01-03 08:07:44
...

1 技术选型

1.1 为什么用 MPC-BE 而不是 mpv

之前我用的是 mpv 加载 svp 来做这件事情,这样确实可以 4k 10 bit hdr 视频插帧,但是遇到了下面的问题:
  1. mpv 的配置文件是文本文件,改起来需要把官方的超级长的文档读一遍,配置成本太高。
  2. mpv + svp 的性能远远没有 MPC-BE + svp 来的好。
 
svp 新版本终于支持了 DirectShow 播放器正确处理 10bit + HDR 的影片了。
更新 svp 版本之前,有些时候 mpv 会卡的掉帧,但是 mpv 进程没法用完所有的 cpu 资源,估计是优化问题。
更新了 svp 版本之后,mpv 没有以前那么卡顿了,然而mpv进程 cpu占用率也提高了。
注:svp 在 mpv 的进程中运行;更新 svp 的时候,mpv 也被一起更新了。

1.1.1 测试:svp 在不同视频播放器下面的性能问题-不使用 Nvidia Optical Flow

svp 官方说 mpc-be 的性能远好于 mpv:
4K playback in MPC-HC 64-bit is significantly faster than in mpv
自己使用同一段 3840 * 2160 10bit 24FPS HEVC 视频测试了下,比较了下 mpc-be 和 mpv,mpv 居然多消耗了 40% 的 CPU。试了下不通过 smplayer 调用 mpv,直接在 svp 里面打开 mpv 播放视频,还是这样。在 cpu 用满的时候,会出现掉帧的问题。
 
使用 mpv 播放视频的时候
不知道为什么,System 以及一些其他进程也会占用很多的 CPU 资源,每个其他进程占用的 CPU 资源都不多,但是加起来会达到 10%。使用 MPC-BE 的时候其他进程占用的 CPU 资源会少很多。
total: 96
mpv: 86
 
使用 mpc-be + lav + mad-vr 播放视频的时候
total:  68
mpc-be: 62

1.1.2 测试:svp 在不同视频播放器下面的性能问题-使用 Nvidia Optical Flow

SVP 参数:Use Nvidia Optical Flow, Accurary High, Motion Vectors Grid 8px
 
mpv
卡顿到严重掉帧
 
mpc-be
一点都不卡,而且有一堆剩余的 gpu 资源。
 
其他问题
不过用 enermy 这部片测试了下,这个配置还是会出现画面残影的问题,需要调整到 4px 才能避免。但是 4px 会导致 4K 视频播放卡住。
使用 Nvidia Optical Flow 之后,拖动视频进度条的时候倒是快了很多。

1.1.3 结论

需要换成 MPC-BE 来做视频插帧,不管使用 CPU 还是 GPU,性能都比 mpv 好太多了。

1.2 关键指标

  1. 60 fps
  2. HDR 10bit Rec.2020
  3. 4K

1.3 关键技术-插帧

1.3.1 可选方案

(1) AMD Fluid Motion / Bluesky Frame Rate Converter
看网上评价,简单的平移的画面会做插帧操作,复杂的运动画面不会做插帧操作。
不支持 HDR
使用 AMD 显卡做运算
 
(2) dmitrirender
看网上评价,就算是静态的画面也会有模糊。
不支持 HDR
使用显卡做运算
 
(3) SmoothVideo Project (SVP)
自己使用体验还不错,插帧效果很好,也没有什么伪影问题
支持HDR
支持 10bit 色彩深度
主要使用CPU做运算
HDR + madVR 使用方法
 
(4) madVR smooth
这个是为了解决 judder 问题做的,不是插帧

1.3.2 网上的评价

来源: https://blackmickeysvp.blogspot.com/2017/05/dmitrirender.html
 
我自己的使用经验是,在同样皆为预设值之下,
DR有着最佳的流畅度丶中等的伪影丶低CPU使用率,因此有些使用者会推荐选择使用DR,
至于缺点则是 模糊 ,不论是如何的画面,都会变得模糊一些,连静态画面也会。
 
AFM流畅度较低丶伪影较少,缺点为限定AMD显卡(还有少部分Intel内显)。
 
SVP则是流畅度中等丶伪影多且明显丶显示卡消耗较低,缺点是CPU消耗高,
不过SVP在经过调整参数后可以达到最高流畅度,中低伪影,也是三者内可调参数最多的滤镜,
虽说其他二者不用调参数很方便,但也因为没办法调整参数来针对特定影片优化。

1.3.3 比较视频

AMD Fluid Motion vs 原生
AMD Fuild Motion vs SVP    看过去是 SVP 稍微好一点
dmitriRender
BFRC(FM)、DmitriRender、SVP补帧比较  BFRC,DmitriRender 流畅度比不上 SVP。SVP 能把原来是模糊的运动画面补清晰了。DmitriRender 有些画面感觉有些模糊。
结论:看了这些比较视频,感觉还是 SVP 最好了。

1.4 关键技术-视频后期处理

madVR

1.5 关键技术-色彩深度 10bit

软件/硬件 支持10bit? 备注
显示器 LG 27UL650-W 8bit抖动成 10bit
接口 DisplayPort Wikipedia
显卡&图形界面API
windows 上用 directx 全屏模式,Nvidia 部分的消费级显卡也能支持:
  1. Setting Graphics Card Software to Display 10-bit Output
  2. 10-bit Graphics card support ?
madVR  
Lav Filters  
Smooth Video Project  

1.6 关键技术-HDR

madvr

2 目标
想要实现下面的视频播放:4K, HDR, 10bit, svp 插帧到60fps, 使用madvr来做视频渲染
其他更低的画质也应该能正常高质量播放,比如
  • 4K, SDR, 10bit, svp 插帧到60fps, 使用madvr来做视频渲染
  • 4K, SDR, 8bit, svp 插帧到60fps, 使用madvr来做视频渲染
  • 1080p, SDR, 8bit, svp 插帧到60fps, 使用madvr来做视频渲染
  • 720p, SDR, 8bit, svp 插帧到60fps, 使用madvr来做视频渲染
  • 其他更低分辨率, SDR, 8bit, svp 插帧到60fps, 使用madvr来做视频渲染

3 基础知识

  • [VCB-Studio 科普教程 5] 那些播放器教程背后的知识
  • [VCB-Studio 科普教程 3] 视频格式基础知识
  • 《视频播放的调教 PlaybackGame v0.4》    这是一本电子书
  • 视频存储格式YUV420 NV12 NV21 i420 YV12
  • Wide Color Gamut Coverage of TVs Rec.709, DCI-P3, Rec.2020

4 测试环境

4.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  

4.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。

4.3 为什么使用上面的软件组合

注意下面的资料不是从 MSDN 获取的,所以细节准确性会有些问题。不过基本的流程是正确的。
 
整个视频处理流程(DirectShow): Source Filter => Splitter => Video Decoder => Post Filter => Video Renderer
视频播放器
这个实际上会涉及到这个流水线的选择。madVR 基于 DirectShow,所以必须使用 DirectShow 技术的视频播放器,所以就是上面的 DirectShow 的处理流程。mpv, vlc 之类的是另外一个流程,为什么不用 mpv 前面说过了。
Potplayer 根据 2013 年的 《视频播放的调教 PlaybackGame v0.4》 对于 madVR 的支持有很多问题,然后根据网络上众多文章,都说默认配置很坑爹,所以就排除掉好了。
我们这里暂定:MPC-BE
Splitter
这个不重要,一般不用特意考虑
Video Decoder
LAV 这个可以完美支持 10 bit 输出
Post Filter(SVP)
根据 SVP 架构,现在是这里加入插帧的。
SVP:支持10bit的插帧软件。其他还有AMD Fluid Motion / Bluesky Frame Rate Converter,dmitrirender,但是都不支持HDR,或者直接不支持10bit.
Video Renderer
madVR: video renderer。基于 DirectShow
完整的流程
MPC-BE 这个 DirectShow 播放器下:LAV Source => LAV Splitter => LAV Video Decoder => Post Filter / Avisynth => Post Filter / SVPflow => MPC-BE 自带的字幕渲染器 => madVR Video Renderer => 显示器输出
参考资料
  1. SVP 4 User Manual

5 配置软件
按照顺序执行下面的配置过程

5.1 系统设置

5.1.1 显卡

2021-01-01 遇到过莫名其妙显卡配置被重置了,不知道是不是更新nvidia显卡驱动导致的。
全部通过 `Nvidia 控制面板` 进行设置
(1) 动态范围参数调整至完全
(2) “输出颜色深度” 根据显示器调节,Dell U2718Q 为 10bit,“输出动态范围” 选择完全
[VCB-Studio 科普教程 2.2] 基于 PotPlayer 和 madVR 的播放器教程(已更新 XySubFilter)   这篇文章说到了其他显卡怎么设置。
(3) 修改 nvidia 显卡电源设置
下面的应该是不用设置的,Nvidia 显卡会自动适应。

5.1.2 win10操作系统电源

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

5.1.3 BIOS 电源配置

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

5.2 视频播放器基础配置

(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)" 来截图。

5.3 配置 splitter

(1) LAV Filter 不支持 webvtt 字幕,mpc-be 内置的 filter 支持。所以 Source Filter 和 Splitter 不能用 LAV Filter 提供的,需要用 mpc-be 内置的。
update: 0.75 版本支持了 mkv/webm 里面的 webvtt 字幕格式,可以改成用 LAV Filter 提供的 splitter 了。不过这个东西其实对视频播放影响不大,用 MPC-BE 内置的也没有什么关系。
 
(1.1) Internal Filters 里面的 Source Filters 全部勾选上
 
(1.2) External Filters 里面的 File Source(Async.) 和 LAV Splitter 不要勾选。或者直接把这两个东西从列表里面 remove 掉也行
 
(2) 如果要用外置的 LAV Filter 的话,按照下面的方法配置。
在 MPC-BE 里面加入下面的 Filters,全部设置成 Prefer 来强制覆盖内置的 Filter。

5.4 配置 LAV Filters

(1) 启用硬解
双击 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.5 SVP 配置

5.5.1 一些与画质无关的修改

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

5.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.5.3 SVP Profile

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

5.5.4 禁止调整 Video Frame Size

5.5.5 禁用 Outer Lighting

5.5.6 Vapoursynth 10bit 输出

SVP图标右击 - Application settings - Additional Options

5.5.7 参考资料

  1. 黑米奇SVP: 进阶教程系列(九)- HDR影片于SDR屏幕上播放(2018-12-10更新)
  2. SVP:4K and HDR
  3. SVP:MPC-BE
  4. SVP 4 User Manual
  5. 在 PotPlayer 中使用 VapourSynth 加载 SVP4   试了下,好像新版本不能这样开启了。
  6. SVP:Daum PotPlayer    这里有讲到如何使用 potplayer native avisynth 模式
  7. SVP:SMPlayer
  8. SVP:mpv
  9. Increasing the Frame Rate / Profiles

5.5.8 了解更多(在配置的过程中没有看这些资料,但是应该是有用的)

  1. 測試筆記:SVP最新測試版參數beta script(2019-11-10 更新)

5.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