VS入门难易度的问题:
1. 对有编程基础的人来说VS很容易上手,对没有的人来说可能需要熟悉一些基本的编程思想和Python语法。
2. 现成的教程并不多(特别是中文的),滤镜相关doc缺少(很多avs移植滤镜需要看原本avs滤镜的doc),现成脚本、使用例子缺少(很多处理思路可能还是要看avs相关的讨论),总之这是历史和环境问题。
3. 目前大部分常用滤镜VS都有原生的了,但单从数量来说和avs比还是九牛一毛(某些人写的avs滤镜数量甚至跟现在VS滤镜总数有的一比),尤其是各种处理老片的、以及各种偏门的功能。
4. IVTC方面,VIVTC相比TIVTC砍了不少功能(这也是因为TIVTC的源码写的不是给人看的,
Myrsloik还专门写了篇文章来吐槽Open Binary),所以目前auto vfr就没有很好的现成实现;同样的TDeint也砍了不少东西,不过那些大都不怎么用所以影响不大。
5. 挂载字幕方面,VS选择倒是很丰富,有自带的基于libass的AssVapour,可以通过avs接口挂载VSFilter/xy-VSFilter(avs 2.6接口x64编译版可以在我签名的VS滤镜收集里找到),
还有移植到VS接口的——libass主要问题是行为和我们常用的VSFilter不太一样,出来的效果会有偏差;
vs移植的版本目前bug还很多,不太安全;通过avs接口挂载算是最安全的方案,多线程效率可能会打折扣(可能会报prefetch warning),其他方面我也不太清楚因为我没用过。。。VSFilter的主要问题就是它的代码和DirectShow系统高度耦合,而且各种历史遗留和各种branch,所以移植起来会有很多困难,DirectShow的存在也导致它无法跨平台。
EDIT: Holy菊又重新移植了
VSFilter和
VSFilterMod
但熟练并掌握各种高级使用方法、编写复杂脚本,VS却容易得多:
1. AVS的last自动赋值、自动传参、自动返回机制,在简单脚本里显得更简洁。但在复杂脚本里很容易让人困惑并且容易出错(可怕的是不会报错的错误),对于那些对AVS脚本工作机制理解不够的人,还经常产生各种哭笑不得的错误。
2. VS原生多线程相比于AVS的各种第三方多线程技术要稳定、安全、高效得多。尤其是MPP这种大杀器,即使是我,曾经用了三年,都搞错了prefetch的原理和正确的使用姿势,最后是LP敲皮神才知道了它的原理(当然读源码也是一种办法),然后我们才分析出了正确的使用方式——即便如此,在后来LP又发现了若干不明原因的bug,甚至连皮神都解决不了。
3. VS对各种格式(8-16bit int、32bit float、4:2:0-4:4:4乃至横向纵向各1/16的chroma subsampling、Gray/YUV/RGB)的原生支持,并且大部分VS滤镜也能广泛支持这些格式,所以我的脚本很多时候能从头到尾在16bit 4:4:4下处理。不像AVS需要通过hack的方式来支持16bit,并且支持16bit、4:4:4、Gray/RGB之类的avs滤镜实在是很少。
4. VS的frame property机制可以衍生出各种灵活的高级用法,虽然就普通使用而言frame property也带来了各种问题:比如不合适的_FieldBased经常可以让nnedi3这类滤镜产生一些我们不期望的结果(在做AA、upscale时)。尤其是core.resize对frame property的依赖和检查,而其他滤镜却并不一定处理的好frame property,这种不匹配带来了各种问题:比如昨天我就遇到了一个,ffms2读取png图片,输出了一个_Matrix标记为1(BT.709)的RGB clip,Resize接收后就直接报错——RGB clip的_Matrix只能是0。
5. Python的语言环境和庞大的第三方库带来了无限可能。相比于avs脚本语言捉襟见肘的功能,稍微复杂一点的脚本,用Python的优势就显而易见。而且利用Python大量的库,你甚至可以把VS的frame data拿出来,交给NumPy、OpenCV、PyCaffe之类的库做处理,然后再转回VS。而这一点一定程度上可以弥补VS滤镜数量不足的问题。