视频滤镜

ver.20220726(此为过时旧版,前往首页查看新版)

序言

本章亦是 mpv进阶的小节4 的拓展内容,可结合阅读。 原文基于纯净版 20210731-git-416668d 版本(按照惯例程序根目录新建 portable_config 文件夹)进行演示。

手册关联: https://mpv.io/manual/master/#video-filters

介绍

视频滤镜(过滤器)即 VIDEO FILTERS

快捷键 (shift+) i 的第一页下方显示已挂载的滤镜列表 Filters: 。无挂载则不显示该条目

语法

最简最基础 vf=滤镜名 挂载滤镜中对其中的子参数进行指定 vf=滤镜名=子参数1:子参数2 挂载多个滤镜的最简方式 vf=滤镜1,滤镜2 挂载滤镜时手动打上标签 vf=@标签名:!滤镜名

视频滤镜在列表中进行管理,以下扩展命令被用来管理过滤器列表。(不推荐的语法可能在将来的版本中被移除)

标签的作用

便于删除与管理。 例如:使用 vf=@标签1:滤镜1=子参数1:子参数2:子参数3 写入一个较复杂的滤镜1的设置后,移除该滤镜1只需要使用 vf-del=@标签1 即可。

滤镜信息

定位到 mpv.com 所在目录,打开 powershell 执行以下命令查看视频滤镜的综合信息

vf-help-01 Available video filters: 可见mpv的可以滤镜被分为以上几个所属 Available libavfilter filters: 后方展示的是该mpv编译的所能调用的ffmpeg的滤镜,使用 ./mpv --vf=lavfi=help 同样可以获取该部分信息

细化查询信息使用以下命令:(除去来自ffmpeg的 lavfilavfi-bridge 外,都是mpv自己实现的滤镜)

lavfi的滤镜信息也可以查阅参考FFmpeg的文档(可能存在版本和编译上的差别): https://ffmpeg.org/ffmpeg-all.html#Video-Filters

常用

常用滤镜为 format lavfi vapoursynth

format(输出格式转换)

手册关联: https://mpv.io/manual/master/#video-filters-format

powershell 中使用 ./mpv --vf=format=help 获取该滤镜完整的可用子项 format-help-01

format滤镜可以作为魔法帮助部分无法在纯硬解模式下的滤镜工作,例如调用fmt子参数作为前置条件:

此时即便你使用的是纯硬解(例如d3d11va),前置该条件后,可以正常追加使用垂直翻转滤镜 vf-append=vflip

format-bgra-01

🔺 这是邪道用法,我依然强烈推荐用硬解-copy甚至软解最大化兼容性和效能(面对CPU滤镜,硬解-copy效率不及软解)

lavfi(来自FFMPEG)

lavfi 分类下的滤镜所用语法略有不同,完整写法参考: https://mpv.io/manual/master/#video-filters-lavfi 为了简洁和防止出错,演示皆使用简单语法代替 —— vf=滤镜名 聪明的你查看以下示例和对比,自然知道选择哪一种...

使用某滤镜时可以仅指定主要赋值,不指定子参数将自动使用默认值。例如: vf=fps=60 使用某滤镜时不用指定全部子项参数,未指定的子参数将自动使用默认值。例如: vf=fps=fps=60 以上两种写法实际画面效果完全一致。区别在于不指定子项会可能会被自动打上标签。

vapoursynth(压制者最熟悉的帧服务器)

手册关联: https://mpv.io/manual/master/#video-filters-vapoursynth 不赘述,参考此处即可: https://hooke007.github.io/mpv-lazy/mpv.html#6vapoursynth

花式使用

不清楚这两个文件或者控制台是什么的。。。请先阅读前置文档

mpv.conf -- 预设

直接在主设置文件中写入相关参数,即伴随mpv启动时自动加载

也可以完全不使用 vf=... ,全部使用append:

vf=... 是仅能存在的一条的参数,多个滤镜按顺序用 append 追加。

或者不用 append 直接使用以下参数代替:

当然同滤镜写一起也是可以的(画面效果存在差异但不一定能察觉)

这种方法将 gammacolorlevels 子项合并,略微提高了渲染效率

input.conf -- 快捷键

在快捷键的方法中用的最多的是 toggle 语法,即开/关的功能。

下面以lut3d滤镜进行特殊例子示范: (3dlut除了被用于色彩矫正外,也常用于风格调色)

通过 powershell./mpv --vf=lut3d=help 命令或ffmpeg关联文档,查询该滤镜详细信息及其用法规范。 lut3d-01

首先获取一个 pinkgirl.cube 作为该滤镜所需的必要3dlut文件 下载安置到 D:/luts test/ 目录中

如果用在 mpv.conf 中,那只需要这个命令即可

但是在 input.conf 中存在几个坑:

或者使用 自定义引用

为什么不直接放在没空格的目录?因为要演示潜在的问题...

🔺 小提示:lut3d滤镜在各种硬解模式下都存在效率低下的问题,高码率与高帧率源将无可避免的掉帧

效果对比图(粉上加粉的调色...)

pinkgirl-00

pinkgirl-01

pinkgirl-02

console -- 控制台

控制台语法与 input.conf 中类似(下方以水平翻转滤镜作例子) 打开mpv后按键 ` 呼出控制台,此时激活的动态绑定按键查阅此处

启用水平翻转即 vf toggle hflip ,再次输入该命令即关闭。 追加水平翻转即 vf append hflip 清空滤镜列表即 vf clr "" ...其它自行举一反三。

🔺 特例:设置指定滤镜(列表)写法不同,例如指定为水平翻转滤镜: set vf hflip

 

其它

影响画面色彩的滤镜与ICC校色兼容性较差(例如 vf=format=gamma=gamma2.2 会导致hdr转sdr时画面发灰),广色域显示器优先使用自带的色域限缩SRGB(如果有此功能)

如果你是滤镜狂魔,请无脑使用 软解 ...

懒人包已经内置了几个常见的滤镜使用的解决方案,可供参考。 更多实用滤镜集合: https://github.com/hooke007/MPV_lazy/discussions/120