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=@标签名:!滤镜名
视频滤镜在列表中进行管理,以下扩展命令被用来管理过滤器列表。(不推荐的语法可能在将来的版本中被移除)
xxxxxxxxxx
71vf-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 执行以下命令查看视频滤镜的综合信息
xxxxxxxxxx
11./mpv --vf=help
Available video filters:
可见mpv的可以滤镜被分为以上几个所属
Available libavfilter filters:
后方展示的是该mpv编译的所能调用的ffmpeg的滤镜,使用 ./mpv --vf=lavfi=help
同样可以获取该部分信息
细化查询信息使用以下命令:(除去来自ffmpeg的 lavfi 和 lavfi-bridge 外,都是mpv自己实现的滤镜)
xxxxxxxxxx
31./mpv --vf=所属名=help
2./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子参数作为前置条件:
xxxxxxxxxx
11vf=format=fmt=bgra # 将输出格式强制为bgra
此时即便你使用的是纯硬解(例如d3d11va),前置该条件后,可以正常追加使用垂直翻转滤镜 vf-append=vflip
🔺 这是邪道用法,我依然强烈推荐用硬解-copy甚至软解最大化兼容性和效能(面对CPU滤镜,硬解-copy效率不及软解)
lavfi
分类下的滤镜所用语法略有不同,完整写法参考: https://mpv.io/manual/master/#video-filters-lavfi
为了简洁和防止出错,演示皆使用简单语法代替 —— vf=滤镜名
聪明的你查看以下示例和对比,自然知道选择哪一种...
xxxxxxxxxx
51##以下皆为使用某同一滤镜的不同的正确写法
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启动时自动加载
xxxxxxxxxx
51
2hwdec=no
3vf=format=gamma=gamma2.4
4vf-append=format=colorlevels=limited
5vf-append=hflip
也可以完全不使用 vf=...
,全部使用append:
xxxxxxxxxx
41hwdec=no
2vf-append=format=gamma=gamma2.4
3vf-append=format=colorlevels=limited
4vf-append=hflip
vf=...
是仅能存在的一条的参数,多个滤镜按顺序用 append
追加。
或者不用 append
直接使用以下参数代替:
xxxxxxxxxx
21hwdec=no
2vf=format=gamma=gamma2.4,format=colorlevels=limited,hflip
当然同滤镜写一起也是可以的(画面效果存在差异但不一定能察觉)
xxxxxxxxxx
21hwdec=no
2vf=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 中,那只需要这个命令即可
xxxxxxxxxx
11vf=lut3d=file="D:/luts test/pinkgirl.cube"
但是在 input.conf 中存在几个坑:
~~/
),甚至不支持 PATH环境变量 ...toggle
作示范) xxxxxxxxxx
11Ctrl+l vf toggle "lut3d=file=\"D:/luts test/pinkgirl.cube\":interp=trilinear"
或者使用 自定义引用
xxxxxxxxxx
11Ctrl+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