本帖最后由 孤雨独火 于 2022-4-18 20:16 编辑
本文已过时,附件已移除。
以后在这里更新,手册02
写在前面,写的时候有点放飞自我,论坛编辑器做成精编我有点苦手,排版完善版建议直接下html版(下楼/后页底部)
- 阅读本章前默认已基本熟悉 mpv.conf 内各参数用途及含义
- mpv.com 文件是MPV播放器的CLI(命令行界面)程序
- 这里有另一种思路下 mpv.conf 的写法与更多条件配置示例(conditional auto profiles)
☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲
我把 mpv.conf 里的参数分为通用参数和配置参数。通用参数在你打开MPV空窗口的同时就已经加载了,而配置参数正常情况下不会加载。
你所见到的 [xxxxx] 这样的文本就是一个配置参数的头部标志,在首个未被注释掉的配置 [xxxxx] 所在行之前的参数都是通用参数,在两个配置 [profile-x] 和 [profile-y] 所在行之间的参数都属于 [profile-x] ,这些特性也决定了通用参数只能写在最前面。
配置参数又分为常规配置和条件配置。先讲解一下常规配置,它不会自动触发,下面导入实际例子。
基本操作
很多人的 mpv.conf 里都有一条高频的通用参数 --profile=gpu-hq ,它其实就是一套预设参数组的集合。MPV其实预设了不止一套参数组,你可以通过在 mpv.com 文件所在目录打开 PowerShell (空白处 按住Shift+单机鼠标右键)执行 ./mpv --profile=help 得到所有可用的(常规+条件)配置:
- ##上图例为懒人包v20210210的所有可用配置,代码块展示的是0.33原版的
- PS C:\MPV list\mpv-stable> ./mpv --profile=help
- Available profiles:
- opengl-hq
- sw-fast
- low-latency
- gpu-hq
- encoding
- libmpv
- builtin-pseudo-gui
- pseudo-gui
- default
复制代码 同样的位置, PowerShell 执行 ./mpv --show-profile=配置名 查看某个配置的实际内容:
- PS C:\MPV list\mpv-stable> ./mpv --show-profile=gpu-hq
- Profile gpu-hq:
- scale=spline36
- cscale=spline36
- dscale=mitchell
- dither-depth=auto
- correct-downscaling=yes
- linear-downscaling=yes
- sigmoid-upscaling=yes
- deband=yes
复制代码 所以你在 mpv.conf 中某行写入 --profile=gpu-hq 时实际等效在该位置按顺序写入以上八项实际参数。
顺序逻辑
① 通用参数:执行逻辑是从上到下依次读取。
假如你想在 mpv.conf 中启用 --profile=gpu-hq 的同时关闭 --deband ,却这样写:
只会得到相反的结果:MPV先关闭了去色带,再读取 [gpu-hq] 后又打开了去色带功能。正确写法是调换这两行参数的位置。(当然你也可以再往后额外加一行 --deband=no ,但是正常人应该不会这么做)
② 配置参数:虽然,实际运行时条件配置的先后触发顺序文档中没有记录(根据观察是相对固定的),但是,常规配置和条件配置参数在 mpv.conf 中没有书写顺序的要求。
创造 检验 运用
① 先从常规配置起步
尝试在空白的 mpv.conf 中创造一个简单的常规配置:
- [JBLp] # 配置名。支持中文
- profile-desc=叽叽哔哔循环 # [多余参数] 配置描述,支持中文,随意填写
- video-sync=audio # 自定义参数1
- loop-file=inf # 自定义参数2
- audio-pitch-correction=no # 自定义参数3
- speed=2 # ......
复制代码 保存之后退出,检验:
法(1)
打开MPV空窗口,` 键 调出控制台(控制台模式下屏蔽绝大多数快捷键,按Esc关闭)
输入 apply-profile JBLp 执行(回车键)。正常情况是控制台不会有信息显示,此时一次性拖入任意数量的视频,符合预期的表现是当前文件二倍速播放+音调变高+无限单曲循环。
法(2)
mpv.conf 内最上方加入通用参数 --profile=JBLp ,即整体修改成如下样式。
- profile=JBLp
- [JBLp]
- ###以下内容省略
复制代码 之后打开MPV空窗口,一次性拖入任意数量的视频,检查实际表现。
▲ 当然,此时你也可以通过前面的基本操作,可以发现 <font color=blue>**PowerShell**</font> 执行对应命令产生的列表中出现了自己刚写的这个配置 JBLp 。如果你填写了 `--profile-desc=<value>` ,那么这项值也会显示(见最上方图)
② 进阶尝试一个典型的条件配置
在之前的 mpv.conf 中继续修改,以很常见的需求——1080p的视频制定单独方案来举例:
- #profile=JBLp # 现在不需要它捣乱
- [JBLp]
- ###以下内容省略
- [1080p] # (同前)
- profile-desc=全高清方案 # (同前)
- profile-cond=height==1080 and width==1920 # [必要参数] 用于判定满足该条件时自动执行该套参数组
- profile-restore=copy # [选用参数] 备份执行该配置前的所有参数,用于恢复
- cscale=jinc
- scale=jinc
- dscale=jinc
复制代码 保存之后退出,按设定的条件进行检验:先打开MPV空窗口,调出控制台, --profile-cond 的值如果有书写错误会有类似 [auto_profiles] Profile '1080p' condition: 的红色文本报错信息,无错再进行下一步。一次性拖入1080p和720p的两个视频,当播放1080p视频时控制台自动弹出文本 [auto_profiles] Applying auto profile: 1080p ,当切换到720p视频时控制台显示 [auto_profiles] Restoring profile: 1080p
你也可以同时查看内置的 stats.lua 统计信息(Shift+i)的第二页共同检验jinc算法的切换是否正常。
▲ 不写或注释掉选用参数 #profile-restore=copy 后,MPV在满足该配置的触发条件后彻底覆盖原参数。该行为类似于自动在控制台输入 apply-profile 1080p
▲ --profile-cond 可以用通用参数作为判定条件,也可以用 https://mpv.io/manual/master/#property-list 里的属性。这些属性需要用引号和中括号规范,单等于号不可用, and or not 分别表示 和 或 非 ,详细示例见后文。
☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲☲
可能的风险
条件配置的最大局限在于,它并不是直接的开关on/off的关系,自动触发某条件配置后,你在这期间手动激活的其它参数,有可能会随着撤回该条件配置的同时一起被移除,可以通过以下的示例轻松复现问题:
新建空白 input.conf 中写入:
- CTRL+v vf add deblock=filter=weak:block=4 # 去色块滤镜
复制代码
清空 mpv.conf 中写入:
- [N-fs-r]
- profile-desc=非全屏状态时画面顺时针转90°
- profile-cond=not fullscreen
- profile-restore=copy
- vf-add=rotate=90*PI/180
复制代码
然后打开MPV空窗口,拖入一个视频,已触发条件配置 N-fs-r ,再手动 Ctrl+v 激活去色块滤镜,观察统计信息的滤镜列表:
进入全屏,假想情况是只撤销 rotate 旋转滤镜,实际是所有视频滤镜都消失了
存在的一个不完美的解决方案是改为非典型条件配置并创建对应的反配置:
- [N-fs-r]
- profile-desc=非全屏状态时画面顺时针转90°
- profile-cond=not fullscreen
- #profile-restore=copy # 注释/删掉回归默认值 default
- vf-add=rotate=90*PI/180
- [N-fs-r_Alt] # 反配置没有名称格式要求,随意写
- profile-desc=N-fs-r的反配置
- profile-cond=fullscreen # not “非”的对应
- vf-remove=rotate=90*PI/180 # 改为 --vf-add 的对应行为参数
复制代码 再次检验,实际情况符合预期。
配置规范化
通用参数和常规配置可以设计的很复杂,但条件配置应尽量简化以避免实际运行时可能造成的混乱。
在MPV更改目前这个条件配置的机制之前,只有通过相对规范的配置来避免切换中可能存在的问题。虽然配置可以相互套娃,但是最好不要这么做。
一个简单的 mpv.conf 示范:
- profile=gpu-hq
- [SD]
- profile-restore=copy
- profile-cond=width==720 and (height==576 or height==480)
- scale=ewa_lanczossharp
- cscale=bilinear
- dscale=ewa_lanczos
- linear-downscaling=yes
- deband=yes
- glsl-shaders="~~/shaders/KrigBilateral.glsl;~~/shaders/ravu-zoom-r4.hook"
- [HD]
- profile-restore=copy
- profile-cond=width==1280 and width==720
- scale=ewa_lanczossharp
- cscale=bilinear
- dscale=ewa_lanczos
- linear-downscaling=yes
- deband=yes
- glsl-shaders="~~/shaders/KrigBilateral.glsl;~~/shaders/FSRCNNX_x2_16-0-4-1.glsl"
- [FHD&2K]
- profile-restore=copy
- profile-cond=(width==1920 or width==2560) and (height==1080 or height==1440)
- scale=spline16
- cscale=spline64
- dscale=catmull_rom
- linear-downscaling=yes
- deband=yes
- glsl-shaders="~~/shaders/Anime4K_Upscale_CNN_L_x2.glsl"
- [UHD]
- profile-restore=copy
- profile-cond=width>=3840 or height>=2160
- scale=bilinear
- cscale=bilinear
- dscale=mitchell
- linear-downscaling=no
- deband=no
- glsl-shaders="~~/shaders/SSimDownscaler.glsl"
复制代码
现实情况中设置多重且复杂的条件配置会导致一个播放视频同时调用多个配置,切换下一个视频时只撤销部分配置又拉起新的配置,暂无验证是否在这种情况下产生异常情况,因此示范偏保守只选择分辨率作为变量设置不同组。
|