AviSynth初步了解
视频编辑
基本上来说,AviSynth是这样工作的:首先,你会创建一个包含命令的简单文本文档,它叫做脚本。这些命令代表若干个你想要的视频以及想要运行的滤镜。然后,当你运行一个视频程序,例如VirtualDub,并且打开刚才的脚本时,AviSynth就会运作起来。它会加载脚本中的视频,并且运行指定的滤镜,然后将结果输出给视频程序。然而视频程序并不知道AviSynth在后台运行,而是以为自己在直接读取一个硬盘上的AVI文件。
线性编辑:
在AVISynth里能做的最简单的事就好比在VirtualDub里的编辑视频。因为这些语句都太好写了,不需要担心变量以及复杂的表达式。
作为测试,请先创建一个文件命名为“test.avs”,然后输入如下一行文字:
Version()
现在用Windows Media Player或其他来打开这个文件,你会看到一个10秒钟的写有AVS版本号及版权信息内容的视频片段。
Version叫做“源滤镜”,这意味着它的作用是生成片段而非修改。在AVISynth脚本中第一个命令永远是源滤镜。
现在加入第二句,让它看起来是这样:
Version() ReduceBy2
在Media Player中再次打开这个文件,你应该还可以看到那些版权信息,不过只有以前的一半大小。ReduceBy2是一个“变换滤镜”,它会以某种方式改变原有的视频片段。你可以连续使用多个变换滤镜就好像在VirtualDub里一样。
让我们再加一句使视频变成淡出至黑色的结尾,它应该是这个样子:
Version() ReduceBy2 FadeOut(10)
现在再次打开文件,片段的前9秒应该是一样的,而最后一秒会平滑的淡出到黑色。
FadeOut滤镜需要一个数值,用来代表淡出所需的帧数。
渐变开始之前的时间太长了,所以我们需要修剪视频的起始部分以减少等待的时间。
我们扔掉前120帧,保留120-150帧:
Version() ReduceBy2 # 砍掉前119帧,保留120-150帧 # (AVISynth的起始帧数是从0算起的) Trim(120,150) FadeOut(10)
在这个例子中,我们第一次使用了注释。
注视以”#”开头,一直到最后一个字母结束,是被AVISynth完全忽视掉的。Trim滤镜需要两个数值,以逗号“,”(英文半角,AVS脚本内一切皆为英文半角)分开,两个数分别代表视频中要保留的起始帧和中止帧,若最后一帧输入的是0,就代表到视频片段的最后一帧。所以如果要砍掉前119帧,可以输入Trim(120,0)。
像这样把帧数仔细记录真是一件麻烦事,在VirtualDub等这样的程序里直接打开一个部分完成的脚本就方便多了,它会把帧数都为你显示出来。你还可以用ShowFrameNumber滤镜,它会把帧数直接打在视频上。
其实实际使用中在AVISynth里有一个比Version实用很多的源滤镜,就是AVISource,它用来从硬盘中读取一个AVI(或其它视频格式)的文件。如果你手头上已经有了一个AVI文件,那么你可以试试把这些相同的滤镜加到你的文件上。
AVISource("d:\capture.avi") # 这里要写你实际的路径和文件 ReduceBy2 FadeOut(15) Trim(120,0)
只有单独一行AVISource命令的脚本可以为只支持小于2GB文件的视频程序提供大于2GB文件的支持。
非线性编辑:
好了我们到了有趣的部分了,建立一个有如下语句的AVS文件:
StackVertical(Version, Version)
打开它,结果是这样:输出的视频中有两行一模一样的版本信息,一行在另一行之上。
StackVertical不需要数值或是字符串作为参数,而是需要视频剪辑。在以上语句当中Version滤镜被两次调用,每一次都返回给StackVertical一个版本信息的视频,于是StackVertical把它们拼在一起(不管那视频从哪儿来的)。
UnalignedSplice也是有用的此类滤镜之一,它可以将视频剪及首尾相接,这段语句就是将3段视频(例如可能是AVI_IO生成的)读取并连接在一起:
UnalignedSplice(AVISource("d:\capture.00.avi"), \ AVISource("d:\capture.01.avi"), \ AVISource("d:\capture.02.avi"))
StackVertical和UnalignedSplice都可以接受少到两个多到六七十个的视频。你也可以用加号“+”代替UnalignedSplice,作为速记。
比如说这段语句,与上段语句的功能是一样的:
AVISource("d:\capture.00.avi") + \ AVISource("d:\capture.01.avi") + \ AVISource("d:\capture.02.avi")
现在假设你的一个程序捕捉到的视频存到了多个AVI片段里,但音频又存到了一个单独的WAV文件里,你能把他们重新组合在一起么?你说呢:
AudioDub(AVISource("d:\capture.00.avi") + \ AVISource("d:\capture.01.avi") + \ AVISource("d:\capture.02.avi"), \ WAVSource("d:\audio.wav"))
转载请注明: 转载自MeGUI中文版博客