在mpv中使用VapourSynth滤镜 · hooke007/MPV 您所在的位置:网站首页 mpv播放器配置参数 在mpv中使用VapourSynth滤镜 · hooke007/MPV

在mpv中使用VapourSynth滤镜 · hooke007/MPV

2023-10-22 13:16| 来源: 网络整理| 查看: 265

如果你不使用 --vf=vapoursynth ,点击右上角(

mpv播放器的使用引导 中介绍了从零开始部署双便携版本的Python和VapourSynth ,这里补充适用于各种不同需求的额外内容。

安装了最新的Python和VapourSynth还是无法成功启用滤镜 VapourSynth的发行版通常落后适配Python一个小版本号,并行兼容的版本号见 文档 的记录。 我还没有安装Python 官网 下载常规版( Windows installer ,务必勾选 Add Python 3.X to PATH )或便携版( Windows embeddable package ) (不推荐微软商店的版本——它所处的路径有较大权限限制,影响后续操作) 我只在机器上安装过Python 不要使用 pip install vapoursynth 因为它 不被官方认可和维护 ,按照 文档 下载VapourSynth的安装版( VapourSynth64-Rxx.exe )自动执行一切工作//或者下载便携版( VapourSynth64-Portable-Rxx )解压所有内容物到 python.exe 所在路径 (它所记录的 —— 运行 vs-detect-python.bat —— 不是必须的步骤) 我想使用便携版Python但不想把它和mpv的目录混在一起 参见小节 ”便携式Python的相关预处理“ 然后按照上一条回答安装VapourSynth 我升级了Vapoursynth后原先正常的脚本无法运行 R55之后vs完成了api3→4的迁移,这可能导致很多旧脚本无法兼容。如果下方 “# 过时的脚本” 部分的快速方案无法解决问题,而你又无力修正其它错误,那么就回滚到R54,或者使用 VapourSynth-classic 分支(该版本实现了api3/4的同时兼容)。 我找不到对应的外部插件/库 VSDB 记录了几乎全部公开的vs插件、脚本等。 便携式Python的相关预处理 添加相关目录到环境变量PATH(”用户变量“即可,不一定要”系统变量“)以便让系统”知道“它的存在(否则mpv无法获取你的Python路径) X:\xxxxx\你的Python文件夹

环境变量 可能需要注销或重启使该操作完全生效(WindowsApps这个路径至少应该排在你的Python相关路径之后,否则你在CMD或PowerShell执行 python 命令将会跳转商店引导你安装商店版Python)

在终端/CMD/PowerShell用 Python -V 命令检验部署的版本

(题外话)如果你的便携版Python不仅仅用于mpv

由于精简甚至没有集成包管理工具,那么你需要进一步做如下操作:

额外增加两条相关目录到PATH变量(仿照上图) X:\xxxxx\你的Python文件夹\Scripts X:\xxxxx\你的Python文件夹\Lib\site-packages

编辑 python._pth 文件(记事本即可打开),去掉 import site 前的注释符 # 保存退出。

下载 get-pip.py 文件(到 python.exe 所在目录即可),使用 python get-pip.py 命令即可完成安装Python的包管理工具。此后你就可以正常使用 pip install 正常安装各种包。

创建并调用简单的vpy脚本

如果只是通过mpv调用vs简单的处理画面,几乎没有什么门槛(但如果要成为压制大佬,还是要熟悉Python)。部署完毕前置后,就可以正式在mpv中开始使用vs滤镜了。

本身vs就有不少内部滤镜,不需要你像 第三方/社区插件 那样先下载相关库,mpv可以直接使用。 官方在 这里 记录了内部滤镜中视频相关的功能模块。

案例

从最简单的开始,创建一个 test.vpy 的空文本,这里我选择放在 mpv.conf 所在位置,其填充的内容为:

# 示范脚本 from vapoursynth import core clip=video_in clip.set_output()

然后运行mpv,拖入视频,打开控制台,输入指令 vf toggle vapoursynth="~~/test.vpy" 成功插入vs滤镜。(当然你也可以选择设置快捷键触发)

from vapoursynth import core 通常情况下,所有vpy脚本都以它为首行/开头,表示导入vs的库。VapourSynth官方在R55版本之后有很大的改动,造成了大量网上公开的脚本不兼容/过时——它们通常以这两行为开头: # 过时的脚本 import vapoursynth as vs core = vs.get_core()

import vapoursynth as vs 表示导入VapourSynth标记为 vs ,是便于后文引用。在我的简单脚本中没有要实际使用到它的地方所以没写,如果要加就这样:

# 示范脚本 import vapoursynth as vs from vapoursynth import core clip=video_in clip.set_output()

但是注意 core = vs.get_core() 该语法会在现在的版本中报错,如果你要使用他人的脚本,至少要先修正为 core = vs.core ,即:

# 修正的脚本 import vapoursynth as vs core = vs.core

clip=video_in 给变量 clip 赋值 video_in 。前者是我们自己定义的;后者是mpv提供的 (其它mpv中可用的参数见 此处) ,表示视频源的剪辑部分 (这里也能看出,因为是对源本身进行操作,所以 --vf=vapoursynth 作用于任何着色器shaders之前)

clip.set_output() 输出变量 clip 。所以这个示范脚本只干了一件事情——把当前播放进度的时间点片段导入vs帧服务器(却什么也没干)然后再导出

尝试增加内部滤镜

修改 test.vpy 的内容:

# 示范脚本 from vapoursynth import core clip=video_in clip=core.resize.Bicubic(clip=clip, width=700, height=700) clip.set_output()

core.resize.Bicubic 表示使用的 自带的缩放器滤镜 中的一个; (clip=clip, width=700, height=700) 是传递给这个函数的参数,文档中记录了该函数的全部可用参数,未传递的参数则自动使用默认值。表示执行双三次算法缩放尺寸,对象为clip,宽度到700,高度到700。

此时 clip.set_output() 中的 clip 表示的就是上一行中被resize处理过的clip而不是一开始的 video_in 如果感到混乱,那建议用不同的变量名理清逻辑,比如:

# 示范脚本 from vapoursynth import core input=video_in cut1=core.resize.Bicubic(clip=input, width=700, height=700) cut1.set_output()

自行播放时检验。

尝试再追加第三方滤镜

这次以一个能保留边缘的降噪插件 KNLMeansCL 为例,下载并安置 KNLMeansCL.dll 到你的VapourSynth路径内的子文件夹 plugins 中(按照我的习惯用便携版的目录应该是 vapoursynth64\plugins ),这个目录在官方文档中记录在 这里 ,使用安装版的用户则遵文档说明。 这样放的好处是当你脚本中 from vapoursynth import core 的时候就自动装载这些库的插件了(无需 手动装载指定文件 或 文件夹 )

修改 test.vpy 的内容:

# 示范脚本 from vapoursynth import core input=video_in cut1=core.resize.Bicubic(clip=input, width=700, height=700) cut2=core.knlm.KNLMeansCL(clip=cut1, d=1, a=2, s=3, h=2, channels="Y", device_type="GPU") cut2.set_output()

和使用内部滤镜相比,在语法上几乎一致。要使用的函数名和要传递的参数通常都会在开发者的仓库主页中记录。 自行播放时检验。

脚本查错

如果源/脚本或环境存在问题,mpv可能会静默处理,无提醒而直接撤回你的滤镜操作,所以我通常在测试首次编写的vs脚本时,会手动拉起控制台看是否正常。 Snipaste_2022-03-22_22-51-13_ty 为了演示我故意删掉了core.resize.Bicubic中的clip,见图中的报错,已经指出了这个错误。

另外的常见情况则是直接闪退/弹出警告对话框然后进程假死——这种情况你就需要让mpv输出日志了。

如果你在日志里看到如下错误

# mpv.log [ n.nnn][v][vapoursynth] using N concurrent requests. ! [ n.nnn][f][vapoursynth] Could not initialize VapourSynth scripting. [ n.nnn][e][user_filter_wrapper] Creating filter 'vapoursynth' failed.

说明你连Python都没装(/对)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有