You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
Important
此文章的内容已部分过时 #66 (reply in thread)
如果你不使用
--vf=vapoursynth
,点击右上角(mpv播放器的使用引导 中介绍了从零开始部署双便携版本的Python和VapourSynth ,这里补充适用于各种不同需求的额外内容。
VapourSynth的发行版通常落后适配Python一个小版本号,并行兼容的版本号见 文档 的记录。
官网 下载常规版( Windows installer ,务必勾选 Add Python 3.X to PATH )或便携版( Windows embeddable package ) (不推荐微软商店的版本——它所处的路径有较大权限限制,影响后续操作)
不要使用
pip install vapoursynth
因为它 不被官方认可和维护 ,按照 文档 下载VapourSynth的安装版( VapourSynth64-Rxx.exe )自动执行一切工作//或者下载便携版( VapourSynth64-Portable-Rxx )解压所有内容物到 python.exe 所在路径 (它所记录的 —— 运行vs-detect-python.bat
—— 不是必须的步骤)参见小节 ”便携式Python的相关预处理“ 然后按照上一条回答安装VapourSynth
R55之后vs完成了api3→4的迁移,这可能导致很多旧脚本无法兼容。如果下方 “# 过时的脚本” 部分的快速方案无法解决问题,而你又无力修正其它错误,那么就回滚到R54,或者使用 VapourSynth-classic 分支(该版本实现了api3/4的同时兼容)。
VSDB 记录了几乎全部公开的vs插件、脚本等。
便携式Python的相关预处理
可能需要注销或重启使该操作完全生效(
WindowsApps
这个路径至少应该排在你的Python相关路径之后,否则你在CMD或PowerShell执行python
命令将会跳转商店引导你安装商店版Python)在终端/CMD/PowerShell用
Python -V
命令检验部署的版本(题外话)如果你的便携版Python不仅仅用于mpv
由于精简甚至没有集成包管理工具,那么你需要进一步做如下操作:
编辑 python<你所用的版本号>._pth 文件(记事本即可打开),去掉
import site
前的注释符#
保存退出。下载 get-pip.py 文件(到 python.exe 所在目录即可),使用
python get-pip.py
命令即可完成安装Python的包管理工具。此后你就可以正常使用pip install <xxx>
正常安装各种包。创建并调用简单的vpy脚本
如果只是通过mpv调用vs简单的处理画面,几乎没有什么门槛(但如果要成为压制大佬,还是要熟悉Python)。部署完毕前置后,就可以正式在mpv中开始使用vs滤镜了。
本身vs就有不少内部滤镜,不需要你像 第三方/社区插件 那样先下载相关库,mpv可以直接使用。
官方在 这里 记录了内部滤镜中视频相关的功能模块。
案例
从最简单的开始,创建一个 test.vpy 的空文本,这里我选择放在 mpv.conf 所在位置,其填充的内容为:
然后运行mpv,拖入视频,打开控制台,输入指令
vf toggle vapoursynth="~~/test.vpy"
成功插入vs滤镜。(当然你也可以选择设置快捷键触发)from vapoursynth import core
通常情况下,所有vpy脚本都以它为首行/开头,表示导入vs的库。VapourSynth官方在R55版本之后有很大的改动,造成了大量网上公开的脚本不兼容/过时——它们通常以这两行为开头:import vapoursynth as vs
表示导入VapourSynth标记为vs
,是便于后文引用。在我的简单脚本中没有要实际使用到它的地方所以没写,如果要加就这样:但是注意
core = vs.get_core()
该语法会在现在的版本中报错,如果你要使用他人的脚本,至少要先修正为core = vs.core
,即:clip=video_in
给变量clip
赋值video_in
。前者是我们自己定义的;后者是mpv提供的 (其它mpv中可用的参数见 此处) ,表示视频源的剪辑部分 (这里也能看出,因为是对源本身进行操作,所以--vf=vapoursynth
作用于任何着色器shaders之前)clip.set_output()
输出变量clip
。所以这个示范脚本只干了一件事情——把当前播放进度的时间点片段导入vs帧服务器(却什么也没干)然后再导出尝试增加内部滤镜
修改 test.vpy 的内容:
core.resize.Bicubic
表示使用的 自带的缩放器滤镜 中的一个;(clip=clip, width=700, height=700)
是传递给这个函数的参数,文档中记录了该函数的全部可用参数,未传递的参数则自动使用默认值。表示执行双三次算法缩放尺寸,对象为clip,宽度到700,高度到700。此时
clip.set_output()
中的clip
表示的就是上一行中被resize处理过的clip而不是一开始的video_in
如果感到混乱,那建议用不同的变量名理清逻辑,比如:
自行播放时检验。
尝试再追加第三方滤镜
这次以一个能保留边缘的降噪插件 KNLMeansCL 为例,下载并安置 KNLMeansCL.dll 到你的VapourSynth路径内的子文件夹 plugins 中(按照我的习惯用便携版的目录应该是 vapoursynth64\plugins ),这个目录在官方文档中记录在 这里 ,使用安装版的用户则遵文档说明。 这样放的好处是当你脚本中
from vapoursynth import core
的时候就自动装载这些库的插件了(无需 手动装载指定文件 或 文件夹 )修改 test.vpy 的内容:
和使用内部滤镜相比,在语法上几乎一致。要使用的函数名和要传递的参数通常都会在开发者的仓库主页中记录。
自行播放时检验。
脚本查错
如果源/脚本或环境存在问题,mpv可能会静默处理,无提醒而直接撤回你的滤镜操作,所以我通常在测试首次编写的vs脚本时,会手动拉起控制台看是否正常。
为了演示我故意删掉了core.resize.Bicubic中的clip,见图中的报错,已经指出了这个错误。
另外的常见情况则是直接闪退/弹出警告对话框然后进程假死——这种情况你就需要让mpv输出日志了。
如果你在日志里看到如下错误
说明你连Python都没装(/对)
Beta Was this translation helpful? Give feedback.
All reactions