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=@标签名:!滤镜名
视频滤镜在列表中进行管理,以下扩展命令被用来管理过滤器列表。(不推荐的语法可能在将来的版本中被移除)
xxxxxxxxxx71vf-append=滤镜名 # 追加指定滤镜到列表中2vf-add=滤镜名 # 追加多个滤镜到列表中(不推荐)3vf-pre=滤镜名 # 前置多个滤镜到列表中(不推荐)4vf-remove=滤镜名 # 移除列表中的多个滤镜(不推荐)5vf-toggle=滤镜名 # 追加指定滤镜到列表中,如果已存在则移除6vf-del=滤镜名 # 移除列表中的指定滤镜(不推荐)7vf-clr # 移除全部视频滤镜
便于删除与管理。
例如:使用 vf=@标签1:滤镜1=子参数1:子参数2:子参数3 写入一个较复杂的滤镜1的设置后,移除该滤镜1只需要使用 vf-del=@标签1 即可。
定位到 mpv.com 所在目录,打开 powershell 执行以下命令查看视频滤镜的综合信息
xxxxxxxxxx11./mpv --vf=help
Available video filters: 可见mpv的可以滤镜被分为以上几个所属
Available libavfilter filters: 后方展示的是该mpv编译的所能调用的ffmpeg的滤镜,使用 ./mpv --vf=lavfi=help 同样可以获取该部分信息
细化查询信息使用以下命令:(除去来自ffmpeg的 lavfi 和 lavfi-bridge 外,都是mpv自己实现的滤镜)
xxxxxxxxxx31./mpv --vf=所属名=help2./mpv --vf=所属名=滤镜名=help # FFMPEG的滤镜无法使用此参数,直接使用下一条代替3./mpv --vf=滤镜名=help # MPV实现的滤镜无法使用此参数,使用上一条lavfi的滤镜信息也可以查阅参考FFmpeg的文档(可能存在版本和编译上的差别): https://ffmpeg.org/ffmpeg-all.html#Video-Filters
常用滤镜为 format lavfi vapoursynth
手册关联: https://mpv.io/manual/master/#video-filters-format
powershell 中使用 ./mpv --vf=format=help 获取该滤镜完整的可用子项

format滤镜可以作为魔法帮助部分无法在纯硬解模式下的滤镜工作,例如调用fmt子参数作为前置条件:
xxxxxxxxxx11vf=format=fmt=bgra # 将输出格式强制为bgra
此时即便你使用的是纯硬解(例如d3d11va),前置该条件后,可以正常追加使用垂直翻转滤镜 vf-append=vflip

🔺 这是邪道用法,我依然强烈推荐用硬解-copy甚至软解最大化兼容性和效能(面对CPU滤镜,硬解-copy效率不及软解)
lavfi 分类下的滤镜所用语法略有不同,完整写法参考: https://mpv.io/manual/master/#video-filters-lavfi
为了简洁和防止出错,演示皆使用简单语法代替 —— vf=滤镜名
聪明的你查看以下示例和对比,自然知道选择哪一种...
xxxxxxxxxx51##以下皆为使用某同一滤镜的不同的正确写法2vf=lavfi=[fps=60]3vf=lavfi="fps=60"4vf=lavfi=graph="fps=60"5vf=fps=60
使用某滤镜时可以仅指定主要赋值,不指定子参数将自动使用默认值。例如: vf=fps=60
使用某滤镜时不用指定全部子项参数,未指定的子参数将自动使用默认值。例如: vf=fps=fps=60
以上两种写法实际画面效果完全一致。区别在于不指定子项会可能会被自动打上标签。
手册关联: https://mpv.io/manual/master/#video-filters-vapoursynth 不赘述,参考此处即可: https://hooke007.github.io/mpv-lazy/mpv.html#6vapoursynth
不清楚这两个文件或者控制台是什么的。。。请先阅读前置文档
直接在主设置文件中写入相关参数,即伴随mpv启动时自动加载
xxxxxxxxxx512hwdec=no3vf=format=gamma=gamma2.44vf-append=format=colorlevels=limited5vf-append=hflip也可以完全不使用 vf=... ,全部使用append:
xxxxxxxxxx41hwdec=no2vf-append=format=gamma=gamma2.43vf-append=format=colorlevels=limited4vf-append=hflipvf=... 是仅能存在的一条的参数,多个滤镜按顺序用 append 追加。
或者不用 append 直接使用以下参数代替:
xxxxxxxxxx21hwdec=no2vf=format=gamma=gamma2.4,format=colorlevels=limited,hflip当然同滤镜写一起也是可以的(画面效果存在差异但不一定能察觉)
xxxxxxxxxx21hwdec=no2vf=format=gamma=gamma2.4:colorlevels=limited,hflip这种方法将 gamma 和 colorlevels 子项合并,略微提高了渲染效率
在快捷键的方法中用的最多的是 toggle 语法,即开/关的功能。
下面以lut3d滤镜进行特殊例子示范: (3dlut除了被用于色彩矫正外,也常用于风格调色)
通过 powershell 中 ./mpv --vf=lut3d=help 命令或ffmpeg关联文档,查询该滤镜详细信息及其用法规范。

首先获取一个 pinkgirl.cube 作为该滤镜所需的必要3dlut文件
下载安置到 D:/luts test/ 目录中
如果用在 mpv.conf 中,那只需要这个命令即可
xxxxxxxxxx11vf=lut3d=file="D:/luts test/pinkgirl.cube"但是在 input.conf 中存在几个坑:
~~/ ),甚至不支持 PATH环境变量 ...toggle 作示范) xxxxxxxxxx11Ctrl+l vf toggle "lut3d=file=\"D:/luts test/pinkgirl.cube\":interp=trilinear"或者使用 自定义引用
xxxxxxxxxx11Ctrl+l vf toggle ``lut3d=file="D:/luts test/pinkgirl.cube":interp=trilinear``为什么不直接放在没空格的目录?因为要演示潜在的问题...
🔺 小提示:lut3d滤镜在各种硬解模式下都存在效率低下的问题,高码率与高帧率源将无可避免的掉帧
效果对比图(粉上加粉的调色...)


Shift+c vf toggle colortemperature=temperature=9300 (阴间滤镜)
控制台语法与 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