- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VCB-Studio 教程 06: VapourSynth 基础与入门
0. 前言
BDRip 压制的核心是批处理,会使用 avs/vs 对片源做预处理,是一个动漫 ripper 的入门。历史上,AviSynth 是
最早成体系的,为动漫 Rip 设计的非编。而VapourSynth 在 2014 年初基本完善可用,现在逐步替代 AviSynth。
想学习的人都会碰到这个问题:如果我只学一个,我该学哪个?如果我两个都学,我需要先学哪个?解答这个问题
就需要先对比一下 avs 和 vs 的优劣:
avs 落后,vs 先进;
avs 教程多,vs 教程少;
avs 支持广,vs 支持窄;
avs 不规范,vs 规范;
avs 入门简单,深入难,vs 入门难,深入简单
……
VCB-Studio 系列教程选择先介绍 VS ,原因在于,VS 是现在 vcb-s 的主要产能,而且vs 的规范性使得介绍基础知
识的时候,更容易让初学者理解和掌握。
VapourSynth 主页:/
官方使用文档:/doc/
在线词典:/
1. 简单的 vs 脚本
在之前的教程中,我们有给过例子:
import vapoursynth as vs
import sys
import havsfunc as haf
import mvsfunc as mvf
core = vs.get_core(threads=8)
core.max_cache_size = 2000
source = 00001.m2ts
ripped = Symphogear Vol1-1.mkv
src16 = core.lsmas.LWLibavSource(source,format=yuv420p16)
rip16 = core.lsmas.LWLibavSource(ripped,format=yuv420p16)
res = core.std.Interleave([src16,rip16])
res = mvf.ToRGB(res,full=False,depth=8)
res.set_output()
作为 Python 的一个扩展,vs 脚本本质上是 Python 的脚本。在最开始我们需要载入(import)各种库,除了必须的
VapourSynth 核心,还有 mvf(mavens VapourSynth functions) 和 haf(holys VapourSynth functions)
core = vs.get_core(threads=8)
core.max_cache_size = 2000
这两句是载入 vs 运行环境,并且指定最大使用线程数和内存(MB )
接下来的部分,vs 主要依赖赋值语句完成。一个赋值语句的格式为:
变量 = 表达式
比如 source, ripped, src16, res 等就是变量。Python 的变量不需要声明,自动会判断是视频系列(clip) ,整数(int) ,
还是字符串(string)等类型。
表达式,则有多种形式:
. 直接赋值,比如 source = 00001.m2ts, debug = True, res = dbed 这种直接用值来给定的 ,值可以是具体
的数值,值可以是具体的数值,也可以是其他的变量(比如 res = dbed, dbed 就是另一个变量);
. 简单运算,比如 strength = 80/100 ,output_depth = debug?8:10 这样的运算;
这里详细讲一下表达式 A?B:C 的计算。A 叫做判断式,必须是一个布尔类型的表达式(只有True/False, 或者 1/0 ),
B 和 C 则是可能返回的值。
x = A?B:C 等效于 if (A) x=B; else x=C; 如果 A 成立,则 x 赋值为 B ,否则x 赋值为 C
比如说:
False?0:1 返回的是 1 ,因为判断式不成立,所以返回两个值中的后者
debug?8:10 如果 debug 是 True/1 ,则返回 8 ,否则返回10
x10?10:x100?100:200 是一个嵌套性的语句;拆开来看:
if (x10) return 10;
else if (x100) return 100
else return 200
当x 小于 10 的时候,返回 10 ;当x 在 10-99 的时候,返回 100 ,否则,返回200
. 函数赋值,res = core.std.Interleave([src16,ri
原创力文档


文档评论(0)