网站大量收购独家精品文档,联系QQ:2885784924

[VCB-Studio][教程06]VapourSynth基础与入门.docx

[VCB-Studio][教程06]VapourSynth基础与入门.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

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脚本

在之前的教程中,我们有给过例子:

importvapoursynthasvs

importsys

importhavsfuncashaf

importmvsfuncasmvf

core=vs.get_core(threads=8)

core.max_cache_size=2000

source=00001.m2ts

ripped=SymphogearVol1-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(mavensVapourSynthfunctions)和haf(holysVapourSynthfunctions)

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;elsex=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)return10;

elseif(x100)return100

elsereturn200

当x小于10的时候,返回10;当x在10-99的时候,返回100,否则,返回200

.函数赋值,res=core.std.Interleave([src16,rip16]),这句就是调用core.std.Interleave()这个函数,输入src16和rip16(严格来说,是它们用[]运算符,运算而出的结果,那就是它们的顺序组合),作为输入变量,来计算一个新的值。

最后,vs的输出,通过set_output()来完成。res.set_output()就是输出res这个值。

2.VS函数的调用

可以想

文档评论(0)

158****5542 + 关注
实名认证
内容提供者

教师资格证持证人

24小时提供说明书查找服务。

领域认证该用户于2023年12月02日上传了教师资格证

1亿VIP精品文档

相关文档