神经网络超分辨率,不用写配置文件
老的 480p 剧集或 720p 动画放到大屏幕上会显得发虚,因为普通缩放只能把已有的像素摊开。Frame Player 可以改用神经网络来放大:实拍视频用 ArtCNN,动画用 Anime4K。从菜单中选择,作用于单个文件或整季,而且只在画面确实被放大时才运行。
普通缩放无论多好,都只能插值:根据周围的像素决定两个像素之间应该是什么,所以放大后的 480p 画面看起来是发虚,而不是满屏方块。用成对的小图和大图训练出来的神经网络可以做得更好:它学会了边缘、水墨线条或墙面纹理通常是什么样子,并把它们补回来。在 mpv 中,借助 Anime4K 这样的着色器早就能做到,代价是要自己下载、写进配置文件,再绑定按键来切换。Frame Player 附带了其中三个,并把它们放进了菜单。
如何开启
- 右键点击画面并打开画面,或者按 C。
- 在超分辨率下选择视频、动画或强化。默认为关闭。
- 选择这项设置是作用于此文件,还是整个播放列表,即文件所在的文件夹或它来自的种子。
还有一个快捷操作超分辨率:下一个模式,可以在四种模式之间依次切换;在快捷键编辑器中为它指定按键之前,它没有默认按键。
一集 480p 剧集上的“画面”面板,通过右键或 C 打开:依次是“视频”“动画”和“强化”,状态行显示着色器正在运行。画面中的差异是为了展示每个模式的效果方向而绘制的,并非实际截取。
三种模式
| 模式 | 网络 | 适用于 | 作用 |
|---|---|---|---|
| 视频 | ArtCNN C4F16 DS | 电影、剧集、实拍视频 | 放大 ×2,同时降噪和锐化 |
| 动画 | Anime4K Upscale CNN x2 M | 手绘动画 | 放大 ×2,针对线条和平涂色块调校 |
| 强化 | Anime4K Upscale GAN x2 M | 720p 及以下的片源 | 在整个画面中绘制纹理 |
“视频”和“动画”是还原,“强化”是创造。前两者补回的是画面中本来就有、只是模糊了的边缘。“强化”是一个生成式网络:它在片源没有纹理的地方添加纹理,正是这一点让整个画面而不只是轮廓显得细腻。它为此付出了两重代价。它是用动画训练的,所以在真人画面上,人脸可能出现瑕疵。而且它创造的纹理在相邻两帧之间并不完全相同,所以静止的场景会闪烁。我们在一部 480p 电影的两个相邻帧上测量了这一点,以两帧之间的 PSNR 表示差异:数值越低,两帧差异越大。
| 两个相邻帧,480p 电影 | 两帧之间的 PSNR |
|---|---|
| 普通缩放 | 35.4 dB |
| 视频(ArtCNN) | 34.6 dB |
| 强化(Anime4K GAN) | 33.9 dB |
| 在“强化”之前加一个修复 GAN(未采用) | 31.3 dB |
两帧本来就不同,因为画面中的东西在动;表格显示的是每个网络在此基础上又增加了多少差异。这就是为什么“强化”是为小而模糊的片源准备的,在那里它能发挥的最多。对于任何大于 720p 的内容(无论按长边还是短边计算),它都按“视频”模式工作,面板会显示“高于 720p 的视频按‘视频’模式处理”。因此,设为“强化”的播放列表可以混合 720p 和 1080p 的剧集,既不会丢掉超分辨率,也不会丢帧。
为什么是这三个,而不是更大的模型
每个系列都有好几种规格,更大的规格并不是更清晰的选项,而是更慢的选项。我们在 M3 Max 上测量了每帧的 GPU 时间,绘制到 3400×2000 的窗口中:
| 每帧 GPU 时间 | 720p 片源 | 1080p 片源 |
|---|---|---|
| 无着色器 | 2.3 ms | 2.9 ms |
| 视频:ArtCNN C4F16 DS | 7.2 ms | 8.5 ms |
| 动画:Anime4K CNN x2 M | 3.9 ms | 6.4 ms |
| 强化:Anime4K GAN x2 M | 9.9 ms | 20.7 ms |
| Anime4K CNN x2 L | 8.6 ms | |
| Anime4K CNN x2 VL | 15 ms | |
| ArtCNN C4F32 | 37 ms | |
| Anime4K GAN x4 UL | 39 ms | |
| Anime4K Restore GAN UL + GAN x2 M | 44 ms |
每帧 GPU 时间,即 mpv 报告的各渲染阶段之和,使用 mpv 0.41。
24 fps 的电影每帧有 42 ms,60 fps 的则是 17 ms。最重的几种规格,即使在现有最快的 Mac 上也要占去其中大部分甚至全部时间,而集成显卡的核心数只有它的一小部分。所以播放器为每个系列提供的是留有余量的那种规格,其余的不提供。
只在画面被放大时运行
每个着色器都会在每一帧自行决定是否运行:只有当屏幕上的画面在两个方向上都超过原尺寸的 1.3 倍时才运行(两个 Anime4K 模式为 1.2 倍)。所以开启超分辨率后:
- 在 1080p 显示器上全屏播放的 720p 剧集放大到 1.5 倍,会进行超分辨率;
- 在 1080p 显示器上的 1080p 电影按原尺寸显示,不做处理;
- 任何 4K 内容在几乎任何屏幕上都不做处理;
- 小窗口可能放大得不够,同一个文件在窗口变大或进入全屏后才开始超分辨率。
尺寸按屏幕的实际像素计算,所以在视网膜显示屏上,一个窗口在每个方向上容纳的像素是看上去的两倍。裁掉黑边或放大画面不算放大:着色器比较的是完整的解码帧与窗口内的那部分画面。
开关开着却什么都不做,看起来会像坏了,所以面板会说明是哪种情况:“已启用:画面放大到原尺寸的 1.6 倍”、“当前未启用:画面放大不足”,或者“无需启用:视频不小于屏幕”。
单个文件,还是整季
画面是否值得放大,取决于视频本身(从 DVD 压制的一季,每一集都是模糊的),所以这项选择按文件或按播放列表保存,文件自己的选择优先。把播放列表设为“动画”,文件夹或种子中的每一集打开时都会使用它,包括还没看过的集;把其中一集设回“关闭”,就只有那一集关闭。链接没有播放列表,所以对于链接,选择属于文件本身。
我们特意没有提供对所有文件生效的设置。一个处处开启的网络会在每一部它无法改善的 4K 电影上运行,在笔记本电脑上,代价就是电池续航。
在 Windows 上首次使用
着色器必须先针对显卡编译才能运行,mpv 会在画面第一次大到需要它时进行编译。在 Mac 上大约需要四分之一秒(我们测得 0.27 秒,丢了三帧),每种模式都一样。
在 Windows 上,“视频”模式开销最大。它的各个阶段由 Microsoft 的 Direct3D 11 着色器编译器编译,在一块当前的台式机显卡上,ArtCNN 花了十二秒多,而“动画”只要十分之一秒,“强化”只要三分之一秒。有两点让这件事只在第一次时才有影响:
- 每台电脑只发生一次。编译好的着色器会在会话之间保留,所以下次启动播放器时,超分辨率会立即开始。
- 播放器会告诉你。首次编译期间画面会静止,所以播放器会把画面调暗,显示“正在准备超分辨率:仅在这台电脑上首次使用时需要”以及一个走动的计时,而不是看起来像卡死了。
与在 mpv 中手动设置 glsl-shaders 对比
如果你在 mpv 中用过 Anime4K,就知道这套流程:下载着色器,在 mpv.conf 的 glsl-shaders 中列出它们,或者在 input.conf 中把模式绑定到按键,再记住哪个适合哪个文件。Frame Player 在底层做的是同一件事(同样的 mpv,同样的着色器文件,未经修改),但改变了四点:
- 无需下载或编写任何东西。着色器随播放器附带。
- 选择会被记住,按文件或按播放列表,而不是一行全局设置,所以看完一季动画后再看真人电影,不会沿用动画着色器。
- 面板会说明它是否在运行,以及为什么没有运行。
- 编译好的着色器会被缓存,在会话之间保留。mpv 本身默认会这样做;但播放器所基于的 mpv 库形式不会,这也是这个功能在 Windows 上的第一个版本每次会话都要重新编译的原因。
如果你更喜欢自己的着色器链,那就保留它:当你的 mpv.conf 设置了 glsl-shaders 时,播放器不会发送任何自己的着色器,面板会显示“着色器已在 mpv.conf 中设置,播放器不作更改”。
不适用的场合
- 投屏。电视自己解码视频,所以电脑 GPU 做的任何事都影响不到它;投屏期间画面设置不可用。
- 一起看。这项选择是你自己的,不会共享给房间;每个人都选择适合自己屏幕的模式。
ArtCNN 和 Anime4K 都采用 MIT 许可证,它们的许可证与播放器的其他第三方声明一起随播放器附带。
常见问题
它能让 1080p 电影在 1080p 屏幕上更清晰吗?
不能,它也不会去尝试。只有当屏幕上的画面在两个方向上都至少是原尺寸的 1.3 倍时(Anime4K 的模式为 1.2 倍),着色器才会运行。按原尺寸显示的 1080p 电影,或者任何 4K 内容,都交给普通缩放,不产生任何开销;“画面”面板会显示“无需启用”,而不是看起来像坏了。
应该选哪个模式?
实拍内容(电影、剧集、家庭录像)选“视频”。手绘动画选“动画”。当片源为 720p 或更低,而你希望整个画面都补上细节,并能接受一些闪烁和人脸上偶尔出现的瑕疵时,选“强化”;高于 720p 时,它按“视频”模式处理。
Windows 上能用吗?
能,两个系统都能用。在 Windows 上,“视频”模式在一台电脑上首次启动时需要十秒或更长的准备时间,期间播放器会显示“正在准备超分辨率”。之后准备好的着色器会保留下来,以后的会话中会立即生效。
需要高性能显卡吗?
它在 GPU 上运行,所选的模式都是各自系列中最轻量的。在 720p 片源上,开销最大的模式在 M3 Max 上实测每帧 9.9 ms,而 24 fps 的电影每帧有 42 ms。性能弱得多的 GPU,比如较老的集成显卡,可能跟不上“强化”模式;如果播放卡顿,请选择“视频”或“动画”,或者关闭超分辨率。
我的视频会被发送到别处做超分辨率吗?
不会。这些网络是随播放器附带的小型着色器,在视频播放时逐帧运行在你自己的显卡上。什么都不会上传,什么都不会保存。
我还能使用 mpv.conf 中自己的着色器吗?
能。如果你的 mpv.conf 设置了 glsl-shaders,播放器不会动它们:“画面”面板会显示“着色器已在 mpv.conf 中设置,播放器不作更改”,超分辨率开关也会让位。