VapourSynth API4 体验
2021 年 9 月下旬,VapourSynth 发布 R55 版本,从这一版本开始使用 API4。API4 的启用使大量脚本需要更新,一些滤镜似乎也需要做相应的适配。同时,由于大版本的升级和滤镜开发的迁移,配套的 IDE、对应的 Python 版本都需要关注一下。
脚本 API4 适配
常见的 API 替换:
core = vs.get_core()
->from vapoursynth import core
->core = vs.core
色彩空间 YCoCg 和 COMPAT 系列被弃用
内置函数的更新
比如AverageFrames()
从misc
迁移到std
命名规则中
_
从后缀变为前缀,避免和 Python 变量名冲突
比如lambda_
改为_lambda
在调试中遇到过如下报错
1 |
|
可能是后缀变前缀,但滤镜没有适配导致的。后来直接升级 VapourSynth 和 Python 大版本就没有这个问题了。
滤镜 API4 适配
新版 API 对滤镜的影响有限,除了 Histogram 外暂时没有遇到因为 API 更新导致不可用的问题(也可能是我没注意到)。不过 API4 启用后不止一个滤镜发布了更新,稍稍关注一下。比如 fmtconv 久违近两年,连续发布多个更新。
一些 API 的变化:
变量类型:
VSFrameRef
->VSFrame
VSFormat
->VSVideoFormat
函数(
prop
->map
)propGetNode()
->mapGetNode()
propSetInt()
->mapSetInt()
官方 Doc 似乎还没有完全更新,没事看看 vsapi.cpp 总是好的。
依赖索引
VapourSynth Organization 增加了数个滤镜,把一些滤镜从 VapourSynth 本体中剥离了出来。
部分滤镜指路:
- 单张图像读写:vapoursynth/vs-imwri
- 降噪与修复 Removegrain:vapoursynth/vs-removegrain
- 场匹配与删除重复帧(反胶卷过带):vapoursynth/vivtc
- 源滤镜 lsmas:AkarinVS/L-SMASH-Works
越来越多的脚本放到了 Python Package Index(PyPI)上,所以动手前先试一下
pip install xxx
不是个坏主意。
IDE:从 VSEditor 到 VSEditor2
我的 VSEditor 很久之前失去了语法高亮,时间太久想不起来当时搞了什么操作。删了重下、重装 VapourSynth 都无济于事。D9 论坛上提到删除 xx.config,但我这是 Windows 系统啊…
环境配置
顺势改用 VSEditor2。VSEditor2 目前更新到 R6.5。其中,R6.5 版本需要 LibP2P,AkarinVS/vapoursynth-plugin,Histogram。R6.4 及之前的 R6.x 版本不需要后两者。
但我在使用 R6.5 版本时 VSEditor2 发生崩溃,怀疑与 Histogram 有关。Histogram 在适配 API4 后未发布相应版本,并且似乎没有完全适配,简单改了代码编译后 VSEditor2 仍然崩溃。幸好 VSEditor2 的作者做了相应适配(gundamftw/vapoursynth-histogram),R6.5 版本顺利运行。
应该说 VSEditor2 正处于开发阶段,加上新版 VapourSynth API 的启用可能引发潜在的问题,遇到问题多看看作者的帖子是值得的。
功能与界面
基本的功能都和 VSEidtor 保持了一致,右侧的工具栏提供了一些方便的小工具,比如单独查看 Y、U、V 各个平面,裁剪助手等,预览界面下方的进度条也让查找视频内容更加便捷。总之增添了不少人性化的细节。
但不得不吐槽一句,把预览界面和代码界面放到同一个窗口,取消原来单独的预览窗口,真是对小屏幕太不友好了。
Python 版本升级
截至目前,最新版的 VapourSynth R58-RC2 仅适配 Python 3.10.x 版本和 Python 3.8.x 版本。
在调用脚本时遇上一个报错。
1 |
|
当时环境为 VapourSynth R57 + Python 3.8。这似乎是一个蛋疼的语言问题,直接升级版本到 VapourSynth R58-RC2 + Python 3.10,之后相安无事。