您好,欢迎访问三七文档
如果你还没有AVS的话,可以去下载一个。搜索AviSynth很快就可以找到下载地址。(要2.5版或以上)1、初识AVS首先必须明确,AVS是什么东西?AVS的全称是AviSynth。还记得用VDM内嵌字幕的时候是怎么做的吗?先打开片源,然后挂字幕,最后送到编码器压制。所以说到最后,VDM的工作就是给编码器提供带有字幕的视频。AVS的功能也是差不多,就是输入源视频,输出处理过的视频。AVS的处理过程全部保存在AVS文件里。对于AVS文件,我们可以把它当作是视频文件,因为安装好AviSynth以后,AVS文件可以像AVI那样被VDM打开,甚至能被播放器打开。AVS文件中包含的是处理信息。先举个简单的例子。比如之前的用VDM内嵌字幕,现在改用AVS内嵌字幕。VDM启动的时候自动加载字幕插件,先打开片源,然后添加字幕插件。用AVS的话就可以这样写:(文件名自己改)loadplugin(c:\vsfilter.dll)avisource(c:\1.avi)textsub(c:\1.ssa)我来解释一下,第一句中的loadplugin()意思是加载插件,括号里面就是插件的名字。在VDM里面启动时会自动加载插件,AVS中要手动写这一句。vsfilter.dll是字幕插件的名字。然后是avisource(),这个是加载AVI的功能,就像VDM中的打开文件。textsub这个功能本来AVS没有,是加载完vsfilter.dll这个插件以后才有的。就像是VDM在没有加载字幕插件的情况下在Video-Filter里面不会出现textsub这个东西。textsub()括号里面的是字幕文件的名字。以上内容用记事本写好,保存的时候在文件名后面加上“.avs”。然后这个AVS文件拿去用播放器打开试试,播放出来有字幕的影片了吗?这样还只是出来一个AVS文件而已,字幕并没有真正跑到影片里面去。刚才看到的是AVS输出的画面,只要把这个画面拿去压制就可以出来有字幕的文件了。可以使用VDM进行压制。在VDM打开文件的时候,直接选择AVS文件,然后不要再挂字幕了,设置好以后送去压制就可以了。2、特效的内嵌AVS强大的功能还不止这一点,现在再介绍复杂一点的AVS操作。比如特效,字幕组的人经常会把特效制作成AVI格式或者字幕格式。如果是字幕格式,那好办,用AVS就这样写:loadplugin(c:\vsfilter.dll)avisource(c:\1.avi)textsub(c:\1.ssa)textsub(c:\tx.aas)和刚才相比,就多了一句,再加载一次字幕而已。如果是AVI的特效,比如是片头,就是去掉原来动画片的片头,把这个AVI塞进去充当片头。就是说用AVI里面的内容替换片源的内容。先要找到片源中要替换的部分的位置。这个用VDM操作。用VDM打开片源,拖动下面的滚动条找到片源中要替换部分的开头,这里的开始位置就是361,记住这个数字。然后用同样的方法找到结束位置,这里找到的是2519。再把滚动条移动到最后面,找到总帧数,这里是35963。然后找出那个AVI特效。这里假设片源是c:\py.avi,字幕是c:\zm.ssa,特效是c:\tx.avi。loadplugin(c:\vsfilter.dll)py=avisource(c:\py.avi,audio=false).textsub(c:\zm.ssa)tx=avisource(c:\tx.avi,audio=false)py.trim(0,360)+tx+py.trim(2520,35963)这个AVS会相对比较复杂。解释一下:loadplugin(c:\vsfilter.dll)加载字幕插件py=avisource(c:\py.avi,audio=false).textsub(c:\zm.ssa)加载片源并挂字幕tx=avisource(c:\tx.avi,audio=false)加载特效py.trim(0,360)+tx+py.trim(2520,35963)用特效代替片源中的部分和前面相比,又多了一些东西。在加载片源语句中,多了一个audio=false,这个的意思是加载片源的时候不加载音频。以此类推,加载特效的时候也没有加载音频。音频的话可以在最后压制好再混合。这样就直接在AVS里面禁掉了音频,不用在VDM里面选audio-Noaudio了。加载语句的后面跟了一个点,然后是加载字幕。点的作用是分割,意思是加载好片源以后紧跟着挂字幕。为的是写在同一行。写在同一行的理由在这一行的开头,就是那个py=。它的意思是这一整行出来的结果用py表示。下面的也是,特效加载好以后用tx表示。接下来是最后一句。py.trim(0,360)的意思是在py中截取第0帧到第360帧。因为片源要替换的部份是从361帧开始的,我们不能把要替换的部分截出来,py.trim(2520,35963)的意思是把片源的2520帧到35963帧截出来。加号表示连接。连起来,最后一行就是先把输出py的0-360帧输出,然后输出tx,tx输出完了就把py的2520-35963输出。这样看起来,就是py中361-2519的那部分没掉了,取而代之的是tx。这样,特效就用进去了,然后送到VDM压制。总结:这一次介绍的AVS内容归纳起来有以下几点:(中括号内表示可有可无)loadplugin(插件文件的位置、文件名)加载AVS的插件avisource(文件名[,audio=false])加载AVI文件,可以用audio=false禁止加载音频部分trim(起始帧,终止帧)截取片段textsub(字幕文件名)AVS插件Vsfilter中的语句,加载字幕120fps片源的处理在内嵌的时候,经常会遇到一些很奇怪的片源。这些片源大小和普通片源看起来没什么差别,可是压缩的时候几个小时都完不成,好不容易等死等活地等完了,发现播放的时候不是卡卡的就是CPU吃了100%甚至就来“发送错误报告”了。究其原因,在打开片源的时候多留一个心眼儿,发现这个片源的FPS有点诡异(注:FPS指的是帧速率,就是每秒钟显示几张图)。看到了吗?这个FPS是119.88,也就是所谓的120fps了。事实上,这个视频文件不是真的每秒钟播放120张图,也是和普通的片源一样每秒钟播放24或30张图。不同之处在于这个AVI文件里面有一种帧,叫做“D帧”。作用是占时间,播放的时候会被忽略。这样说可能还是不好理解,还是还是排列出来就一目了然了:用K表示普通帧,D表示D帧:24fps的:KKKKKK120fps的:KDDDDKDDDDKDDDDKDDDDKDDDDKDDDD会发现都是一样的。24fps的有6帧,播放需要0.25秒。而120fps的有30帧,播放也是0.25秒。而实际上,120fps那里只有6帧是K,也就是说两个都是一样的。那这样用24不就好了,为什么要弄一个120出来呢?是因为,还有一种常见的帧速率是30fps。当动画片种既出现30fps又出现24fps,AVI是不能一个文件拥有多种fps的。那么,就用120fps,既可以包含30fps的部分,又可以包含24fps的部分。在压制的时候,我们压制的都是K帧,如果你就这样把120fps的东西送去压制,出来的结果就是全部的D都变成K,这样怎么行?不仅播放的时候暴耗CPU,浪费压制的时间,还无意义地增大了文件地体积。在压制之前,要先把D帧去掉。本节新出现的AVS语句:selectevery(n)每n帧取一帧。比如原来是123456789,那么用了selectevery(3)以后就会变成147。import(文件名)导入另一个AVS文件,效果和把这个AVS文件的代码粘贴进来一样。assumefps(目标帧速率)更改帧速率,不改变帧数(改变时间)。比如原来有30帧,fps由30改为24后,播放时间变为1.25秒。原理很简单,在30fps的片段用selectevery(4),在24fps的片段用selectevery(5)。那么如何判断哪些地方是24fps,那些地方是30fps呢?从AVI中可以导出一个文件叫做timecodes,这个文件里面记录了每一个K帧出现的时间。通过这个文件,我们可以判断出哪里是帧交替点。这里介绍一个我写的自动判断的工具,把timecodes送进去它会出来一个AVS文件,里面就是刚才介绍的selectevery()语句之类的东西。在对片源加载好字幕以后,导入这个AVS即可去除所有D帧,接下来就是送去压制。例:这个是片源AVS:loadplugin(c:\programfiles\avisynth2.5\plugins\vsfilter.dll)avisource([dmhy][fmp2][dvdrip][01].avi)textsub([dmhy][fmp2][dvdrip][01].ssa)import([dmhy][fmp2][dvdrip][01].deldf.avs)这是[dmhy][fmp2][dvdrip][01].deldf.avsa0=trim(0,206).selectevery(5).assumefps(29.97)a1=trim(209,535).selectevery(4).assumefps(29.97)a2=trim(538,1983).selectevery(5).assumefps(29.97)a3=trim(1987,10833).selectevery(4).assumefps(29.97)a4=trim(10836,11891).selectevery(5).assumefps(29.97)a5=trim(11895,12253).selectevery(4).assumefps(29.97)a6=trim(12256,15622).selectevery(5).assumefps(29.97)a7=trim(15625,16584).selectevery(4).assumefps(29.97)a8=trim(16586,39557).selectevery(5).assumefps(29.97)a9=trim(39560,40007).selectevery(4).assumefps(29.97)a10=trim(40009,67039).selectevery(5).assumefps(29.97)a11=trim(67043,67361).selectevery(4).assumefps(29.97)a12=trim(67364,71610).selectevery(5).assumefps(29.97)a13=trim(71613,71875).selectevery(4).assumefps(29.97)a14=trim(71878,74128).selectevery(5).assumefps(29.97)a15=trim(74132,75650).selectevery(4).assumefps(29.97)a16=trim(75653,84143).selectevery(5).assumefps(29.97)a17=trim(84147,85105).selectevery(4).assumefps(29.97)a18=trim(85108,158948).selectevery(5).assumefps(29.97)a19=trim(158952,166138).selectevery(4).assumefps(29.97)a20=trim(166141,167496).selectevery(5).assumefps(29.97)a21=trim(167500,167795).selectevery(4).assumefps(29.97)a22=trim(167797,169696).selectevery(5).assumefps(29.97)a0+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+
本文标题:AVS教程1
链接地址:https://www.777doc.com/doc-3224632 .html