AviSynth帮助文件中文版.docx

上传人:b****7 文档编号:10597539 上传时间:2023-02-21 格式:DOCX 页数:24 大小:36.89KB
下载 相关 举报
AviSynth帮助文件中文版.docx_第1页
第1页 / 共24页
AviSynth帮助文件中文版.docx_第2页
第2页 / 共24页
AviSynth帮助文件中文版.docx_第3页
第3页 / 共24页
AviSynth帮助文件中文版.docx_第4页
第4页 / 共24页
AviSynth帮助文件中文版.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

AviSynth帮助文件中文版.docx

《AviSynth帮助文件中文版.docx》由会员分享,可在线阅读,更多相关《AviSynth帮助文件中文版.docx(24页珍藏版)》请在冰豆网上搜索。

AviSynth帮助文件中文版.docx

AviSynth帮助文件中文版

AviSynth帮助文件中文版

1开始

简单说来,AviSynth是这样工作的:

首先,使用特定的命令形成一个简单的文本文档,称为脚本。

这些命令和你要用的一个或多个视频或者滤镜有关。

然后,运行一个视频处理程序,比如VirtualDub,并且用其打开这个脚本。

这时候,AviSynth开始工作。

它打开了你在脚本中使用的视频,运行了指定的滤镜,并且把结果输出给视频处理程序。

然而,视频处理程序并不关心AviSynth在台后是如何工作的,它认为它只是直接打开了一个你硬盘上已经存在的过滤好了的一个AVI文件。

在AviSynth2中,有很多新的和再开发出来的功能。

为了清楚的看到这些新功能(特别是当以前的版本中没有这些特点时),新功能将以v2标识。

2.1线性编辑

你用AviSynth能做的最简单的事情就是你用VirtualDub也能做到的那种编辑工作。

这样的脚本是很容易编写的,因为如果你不想用的话你可以不必去管那些变量和复杂的表达式。

可以做一个测试,把下面的一行文字写在一个文本文件中,保存为test.avs文件。

#C,g8W)g.v)\#i

Version

6o6E8}8|.X'D7w8M5s现在用WindowsMediaPlayer打开这个文件,你会看到一个十秒钟的视频剪辑,显示了AviSynth的版本号和拷贝权信息。

这里,Version称为“源滤镜”,意思是它产生了一个剪辑而不是更改了一个剪辑。

AviSynth脚本的第一条命令一定是一个源滤镜。

:

F6n8f"^:

b,l

现在在刚才生成的脚本文件中加入第二行,这样就变成了如下所示:

$l/_0};w6sVersionReduceBy2

#N7^(V!

n/B3p再次用MediaPlayer打开这个脚本文件。

你应该再次看到拷贝权信息,但是这次显示内容的大小只有原先的一半。

ReduceBy2称为“变形滤镜”,意思是他作用于前一个剪辑并且对它作某种方式的变形处理。

你可以连续使用很多变形滤镜,就像用VirtualDub一样。

让我们再加一条命令让这个视频最后淡出成黑屏,在脚本文件中再加入另外一行如下所示:

3l/D-g#P&R0M9kVersionReduceBy2FadeOut(15)!

{1E/|'CZ2E6b(H

现在再次打开文件。

前九秒钟剪辑应该没什么变化,在最后一秒,剪辑应该平滑的淡出成黑屏。

1v8D.n5?

)z7H;_7}8k-KFadeOut

7z0w;f+^'S+Z滤镜有一个数字参数,表示淡出所用的帧数。

由Version产生的视频剪辑刚好是每秒钟15帧(15fps),因此FadeOut的参数15使得剪辑在最后一秒的时候淡出。

(筝儿:

这里似乎有点错误,version产生的剪辑似乎是24fps的,所以后面的整个帧数也不对,应该总共是240帧,不过不影响

9H1t'\8{9n5F:

O,Ga对命令的学习,把后面trim的第二个参数都改为0就没什么关系了)0v9}-k9j:

b(j7y/p5vS2O

在淡出前有很长的一段时间,我们可以修整一下剪辑的开始部分来减少我们的等待时间。

由Version产生的剪辑有150帧(15fps乘以10秒)。

AviSynth从第0帧开始。

因此,实际帧数是从0到149。

6k$k*C/c9\1W+\$b:

K4QFadeOut刚好会增加额外的一帧,这样一来,整个剪辑从头至尾,就有从0到150帧。

让我们去掉开始的120帧。

1S&`1h.|-u*l

VersionReduceBy2FadeOut(15)Trim(120,150)#砍掉前8秒(筝儿:

建议写成Trim(192,0))

0D*\$L:

I-c"M:

?

#_(g;g在这个例子中,我们第一次使用了注释。

注释以#开始,持续到这一行的结尾,注释会被AviSynth完全忽略掉。

Trim滤镜有两个参数,以分号隔开,分别表示剪辑中所要保留的第一帧和最后一帧。

如果把表示最后一帧的参数设为0,则意味着整个剪辑的结尾,因此上面的trim命令也可以简单的写成

8XB;M7}%y0yTrim(120,0)。

!

|c9n+i$K;U6z)V

用这种计算帧数的方式是很麻烦的,使用象VirtualDub这样的应用程序来打开一个已经完成了一部分的脚本就要简单得多,因为VirtualDub可以为你显示帧数。

你也可以使用ShowFrameNumber滤镜,这个滤镜可以显示每一帧本身的帧序号。

再练习一个比Version更有用的滤镜AVISource,这个滤镜可以从硬盘中读取一个AVI文件(或者是一个其他类型的文件)。

如果你手边现在就有AVI文件,你就可以按照下面所示试一下:

3n1s4u8@)r)]$k6Y'MAVISource(“d:

capture.avi”)#这里写你自己的AVI文件的实际路径和文件名ReduceBy2FadeOut(15)Trim(120,0)

6Sk*l&y,@!

N8Y只需要脚本中有一行AVISource命令就可以令视频处理程序支持大于2GB以上的AVI文件,否则的话一般视频处理程序只支持小于2GB的AVI文件。

5a!

P.q5^5n8[

2.2非线性编辑6b5|0E.E(@4R8t+_

现在我们开始学习有意思的部分了。

按照下面的脚本生成一个AVS文件:

(P.u2R:

y*l2[;S3YsStackVertical(Version,Version)

7j$m&p#B-i2w+g现在运行这个脚本:

出现了两个版本信息,一个在另一个的上面。

StackVertical并不用数字或者字符串作为参数,它是用视频剪辑作为参数的。

在这个脚本中,Version滤镜被调用了两次。

每一次,它都返回一个视频剪辑的复本。

这两个副本视频剪辑都传递给了StackVertical,然后StackVertical把它们组合在一起(而不管它们是从哪里来的)。

这类滤镜中最有用的一个是UnalignedSplice,它能够把视频头尾相连。

下面是一个载入了三个AVI文件并能够连起来播放的脚本:

-R1`7R%r&|"K#n0N

UnalignedSplice(AVISource(“d:

capture.00.avi”),AVISource(“d:

capture.01.avi”),AVISource(“d:

capture.02.avi”))0O"A#O%r9s*T#k/q

StackVertical和UnalignedSplice都可以带两个或者最多六个参数。

你可以用+运算符作为UnalignedSplice的简捷方式。

例如,上面的脚本和下面的脚本完成同样的功能:

6Z1r;A%S1B$}7w8o/@&\

AVISource(”d:

capture.00.avi+AVISource(”d:

capture.01.avi”)+AVISource(”d:

capture.02.avi”)

7G3f6q6T:

[9D现在假设你用某个程序抓屏,并且存成了多个AVI片段,但是把声音放在了一个单独的WAV文件当中了,我们能把这些都组合在一起吗?

你猜呢:

Q*F4jR.wAudioDub(AVISource(”d:

capture.00.avi”)+AVISource(”d:

capture.01.avi”)+AVISource(”d:

capture.02.avi”),WAVSource(”d:

audio.wav”))(筝儿:

上面的例子应该写成一行)

4v4M-e.|'Z-u#D2.3语法7`7|7p#]*^4q9Y7c

2.3.1表达式

0N7Q(n$f1o一个AviSynth脚本由下面这样的多行语句组成:

2O)j(M(u6?

;dul+b变量名=表达式

.a!

Q*q!

h3]6P在这个例子中,求出的表达式的值存放在变量名当中。

:

T/A/dW!

f#P%s+f#[;q还可以用简单的方式来表示,这一点很重要:

表达式在这个例子中,表达式的值求出来之后被放在一个特殊的剪辑变量last当中。

上面的语句就相当于:

8b5@;S2B'_7K)T/i:

S

last=表达式

B'e,q4_%_;R*}:

T脚本结尾总是写成这样:

9V:

U4y"x6m-L%{;L9m

return表达式!

g)|.T/B%m8r'Y

这里的表达式已经求出值并且作为脚本的返回值,也就是说,现在视频剪辑可以用能够打开AVI文件的应用程序播放了。

&Q"t:

_9U#|6|"T调用函数的表达式的基本形式如下:

'g)[6I0[9v,b

函数(参数表)

"@8z"N7f0D,e#{&C(z剪辑函数可以产生一个新的视频剪辑,但不会改变现有的剪辑。

参数表是用逗号隔开的函数的参数列表。

参数表可以为空(意思是全部或者部分参数可选)如果滤镜函数以视频剪辑作为第一个参数,而且这个参数没有给出,那么就会使用一个特殊的变量last来代替。

+w"p7T5H,N"l3_/s/G4z&fAviSynth滤镜可以带命名参数。

命名参数可以以任意顺序来说明,而且,滤镜会为你没有选择的参数取默认值(命名参数总是可选的)。

这使得某些滤镜用起来更容易一些。

a!

H$X+n$g,s5k+c'Z你可以用

8@"O6ln-m&W#_#?

8TSubtitle(“Hello,World!

”,text_color=$00FF00,x=100,y=200)E:

q6c'M+L:

y0Q8U7J

来代替

!

K"@!

v;S(b4gSubtitle(“Hello,World!

”,100,200,0,999999,“Arial”,24,$00FF00)|_%_4Z8_2E3e8H

剪辑函数有一种替换语法(称为“面向对象设计的符号”):

&d*x9{'~(q4c0e7u

表达式.函数(参数表)"]#[+Q'i2x4\

例如:

4V3B&_)]8O&uVersion.ReduceBy2.FadeOut(15)

6Q$P._%P"V&|5S这等价于'd!

k'l+c(^%M;e

函数(表达式,参数)!

g1Q"o)f'F%l-B3u

例如:

#z0k.W'V9R.i"m;|5V

FadeOut(15,ReduceBy2(Version))

;@5^/q/B#o+}'J-^而且可以理解为函数作用于表达式。

面向对象设计的符号有一个缺点就是只能使用带有一个视频剪辑参数的滤镜,而不能用于带有多个参数的滤镜。

']4q&X:

`(f

不管语法看起来有多复杂,所有的AviSynth函数都可以生成输出帧数和帧速率的定义号。

AviSynth在读完脚本之后就知道输出会有多长,帧速率是多少,以及所有输入的剪辑顺序。

这些都在打开脚本的时候被计算出来。

只有实际的过滤过程是按照需要在运行时进行的。

l5Y#L7r:

o)E!

E0t

注释:

AviSynth忽略任何以#开头直到这行末尾的内容。

0E6f9P~:

B忽略大小写:

aVISouRCe和AVISource是一样的"N)[6}6q&{,^#]8F0i

下一行继续或者接前行:

5G2A/^"z4D3|9H+Q4VSubtitle(“Test-Text”)

G'l$n3ZM3L&H$^$W\!

aSubtitle(“Test-Text”)4p4J/d/b:

l

Subtitle(“Test-Text”)

6\:

Z7[7Z$y1G7J(筝儿:

Subtitle的第一个参数是视频剪辑参数,不可缺省,上面写的例子只是为了说明换行的用法,实际应该写成Subtitle(version,“Test-Text”),这里version可以替换为其他的视频剪辑文件)!

B-d.j!

l9l)]5a1U3Z/B0I

2.3.2变量

4B*Y$x7n*i-y变量名最长可以有50个字符,包括字母、数字和下划线,但是不允许用其他的符号。

名字不可以以数字开头。

下面是可以使用的变量类型:

1`0w8Q)^%Kn(qclip:

包括视频和/或音频的视频剪辑。

脚本中至少要有一个clip变量并且要由脚本返回。

3@"M:

w4r;Xstring:

两边加双引号(英文引号——筝儿)。

string类型文本可以包括任何字符,但不包括表示string结束的双引号。

如果你要让字符串包括双引号,就要用文本符号(中文引号——筝儿)。

你还可以用Windows的扩展ASCII码中的弯双引号来代替直的双引号来绕过这种限制(似乎就是用中文引号来代替英文引号,但我试好像不行——筝儿)。

.]"]-{)_J&K

int:

以数字字符串形式输入,开头可以有+或者-。

&n'X.]+i.a0j!

Dfloat:

带小数点的数字字符串,也可以有+或者-。

例如+1.被看作浮点数。

&X!

]$Z!

S2|8D3g,E*nval:

用做函数的参数类型,而不管它是int还是float类型。

7E!

[)h5Q(C;W7Xbool:

只能为TRUE或者FALSE。

9n*_/s-J:

k9A

hexadecimalnumbers:

前面加$表示。

这个变量被当作整数对待。

很多滤镜用这种声明来表示颜色。

例如:

$FF8800表示桔色。

;U0s1P0x7C;~$u8]1F2u'Q7M

global:

定义一个全局变量,通常用于所有的用户定义函数和主脚本。

V25k*J)m/r&a7|1i1T,?

下面是前文例子的另一个版本,但是这里可操作性要更好,而且更容易理解:

#J-B,a'r6`8X4{-l*M

a=AVISource(”d:

capture.00.avi”)b=AVISource(”d:

capture.01.avi”)c=AVISource(”d:

capture.02.avi”)sound_track=WAVSource(”d:

audio.wav”)AudioDub(a+b+c,sound_track)

)N*E-Y&pF!

Fo;C2.4运算符

(n/X2q1k2N%Q&T对于所有类型的操作数(clip,int,float,string,bool)你可以使用:

-Y`8E!

k6H.?

5E==等于

+{0x9q;?

5~#t!

=不等于#O'k/p,s!

d(C&H1k'D*M

||或

6d9\6S0k&e&g2P?

/d&&与4f9G,a3p1D(mb

对于数值类型(int,float)

)m:

v)\.X,r"b3I5j)t+加+d$W9N:

d0J/y3b!

E

-减F*P7s!

g:

o)Z6R.s

*乘%Y7h3F-D,{+|.iV,Q$l

/除6[+m#H+y0U#M8P-b!

T"Y

%求余'T5F)]&cD6~

>=大于等于3r1~"@(?

7V#X

<=小于等于3C0f&o6F+k8ja

<小于

3B)k+s;r,I&s>大于-G:

B3p!

p+a6v6R

AviSynth在以前的版本中是从右到左解析表达式的,这样可能会给出错误结果:

:

v7q+O5t/S*\1w#w2U4I

a=10–5–5结果为10-(5–5)=10而不是(10–5)–5=0!

*Q6J+g!

T-o(v5d!

V2b

这个错误已经被改正过来。

从2.53版开始,连乘法和除法都是从左到右解析(而不是从右到左)。

!

q"~/\1u%tc4O5D:

w对于string类型:

%o$T'E:

V4^k'W+m

+加)[.X3|%o$s0O

>=大于等于(大小写敏感)7W({&^&|%^.z3Z2j

<=小于等于(大小写敏感)

+].I3]+|:

l"U'C!

`<小于(大小写敏感);Q1z"|1[#F#o,v

>大于(大小写敏感)0T:

[6w.W1L,k2_"v

对于clip类型:

3K1F0[5m"S2Z%U,a*J+和函数UnalignedSplice的功能一样

'U2x5M7o0e9a-_-u++和函数AlignedSplice的功能一样

5m6_)o+Q'h+v8L&?

0H对于bool类型,k.D4V$I-m*K:

r+K

?

:

有条件执行代码

:

k6F)o*d"E6?

&J6L7U'T6Jb=(a==true)?

1:

2

4W3i;C8?

%\:

Yz在pseudo-basic语言中意思是:

5c8J!

B1H;c9^4g0f"Cif(a=true)thenb=1elseb=28S.i2y2[1U2s)i

3函数$[,R-N1L$D"S2n

3.1脚本函数

6P!

x5T9s*M,{这些函数的输入输出不是剪辑,而是脚本中用到的其他变量。

:

QE-g4B7h*j7U&M

3.1.1数值函数

9o8}+r2ph3[+IFloor(float):

将float类型转换成int类型Floor(1.2)=1Floor(1.6)=1Floor(-1.2)=-2Floor(-1.6)=-2

t(])j7R2i/\&J#t*H(hCeil(float):

将float类型转换成int类型Ceil(1.2)=2.0Ceil(1.6)=2.0Ceil(-1.2)=-1Ceil(-1.6)=-1

1?

7h&x*I.p*ERound(float):

将float类型转换成int类型Round(1.2)=1Round(1.6)=2Round(-1.2)=-1Round(-1.6)=-2

5w8y:

u7Z3|2O$s2I!

_Int(float):

将float类型转换成int类型(四舍五入).v2.07Int(1.2)=1Int(1.6)=1Int(-1.2)=-1Int(-1.6)=-1

+`)N;j!

P%y2H,^Float(int):

将int类型转换成float类型.v2.076T.N4{5d9l4a

Frac(float):

返回float类型数值的小数部分.v2.07Frac(3.7)=0.7Frac(-1.8)=-0.8,p(vP/T9~/g1K5X

Abs(integer)/Abs(float):

计算整数和单精度类型数值的绝对值.v2.07Abs(-3.8)=1.8

0k%K)z%y4H1u3H&}Sign(int)/Sign(float):

以-1,0or1的形式返回数值的符号位.v2.07Sign(-3.5)=-1Sign(3.5)=1Sign(0)=0'C,S4Q!

}7g:

M:

s-|

HexValue(string)返回一个十六进制字符串的值.v2.07HexValue(“FF00″)=65280!

b1G9K!

O#t+{;{1~

Sin(float)v2

$h'W(]&x'HCos(float)v2#b1r"N7[)u9L

Pi()v2

6|!

c$o5F.kLog(float)v2(W.J1M;l8k&V!

_*C0B0F

Exp(float)v2

3H/o2z"@+IW:

b%y5u5^Pow(floatbase,floatpower)v2

3{,S)b|n-u-ySqrt(float)v29n3b8}*b:

x

Rand([int

-s;l/@2~)G.Ln,g5w+bmax][,boolscale][,boolseed]):

返回0到最大值(max)之间的随机整数.v2.07

:

o.L.T!

g8P7J2J(j,]默认值:

max=32768scale=TRUE(TRUE=正常模式,FALSE=模块模式)5x$i*R1\8K9T;zP6k.h

seed=FALSE(TRUE=用时间作为随机数种子)Rand(100)=0到99之间的整数)V%{.f7b+{6R;_n

Spline(floatX,x1,y1,x2,y2,….,bool“cubic”)v2.5

9i,u,B,h3i4_&H0j!

Y使用控制点x1/y1在X点处插入Y值至少要有两个x/y对.插值可以是立方(结果为样条曲线)或者线性(结果为多边形)

4J9c&r3P-~Spline(5,0,0,10,10,20,0,false)=5Spline(5,0,0,10,10,20,0,true)=7

*z(o2C!

h5h/d-G3h3.1.2字符串函数

+h7N4l:

b1A-`%N6|5}UCase(string):

返回全部大写的字符串v2.07UCase(”AviSynth”)=“AVISYNTH”*}2K)?

8k!

w3V

LCase(string):

返回全部小写的字符串v2.07LCase(”AviSynth”)=“avisynth”

(v;e%F3x3[1V6k$M9PRevStr(string):

返回字符串的倒序.v2.07RevStr(”AviSynth”)=“htnySivA”.e'L/C5i-T%h!

w

StrLen(string):

返回字符串的长度.v2.07StrLen(”AviSynth”)=8+a5H8j$q-[2^+P$v3@/u3q

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1