有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 4612|回复: 5
收起左侧

[others] 原创-视频-AVS的基础运用

[复制链接]

该用户从未签到

2

主题

3

好友

510

积分

New Game

积分
510
发表于 2012-9-14 14:37:56 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 节操什么的吃掉 于 2012-9-14 23:31 编辑

在太古遗产的教学贴写了一个..
原帖地址:
http://www.taikoyc.com/thread-71997-1-1.html
想来想去
好像技术宅里没有这方面的教程
于是乎 我就搬过来了..(PS..本人自己搬的...
每天都会以缓慢的速度更新中...
首先申明小弟才疏学浅..
我的理解也仅限于是初级水平
如有说错望指正出来
小弟不胜感激..
下面言归正传..
何为AVS..
AVS是AviSynth的缩写
AviSynth 引用度娘百科上的一段话就是
一、简述

  AviSynth是AVI SYNTHesizer的缩写,意思就是AVI和成器,是一个Frameserver。(Frameserver就是一个把影像文件从一个程序转换到另外一个程序的过程, 其间没有临时文件或中介文件产生)
  
    AviSynth是由Ben Rudiak-Gould首创的一种非常有用的工具,能够提供各种方式来合并和滤镜处理影像文件。最独特的就是AviSynth并不是一个孤立的影像处理程序,而是在影像文件和应用程序之间担任“中间人”的角色。

    AviSynth的基本工作原理是这样的:
    首先建立一个包含特定命令的文本,称之为“脚本”(后缀为avs),这些命令指定要运行处理的影像文件和滤镜;
    然后运行影像应用程序,比如VD或ND,打开脚本。此时AviSynth就开始工作了,打开脚本中指定的影像文件,运行特定的滤镜,并把输出结果提供给影像应用程序。但影像应用程序并不了解AviSynth在后台所做的处理,而认为是直接打开了一个“被处理过”的影像文件。

    因此使用AviSynth有5大优势:
1. YUV支持:内建滤镜可以在YUV环境下运行,第三方滤镜几乎也兼容YUV,所以比起VD、ND的内嵌滤镜必须在RGB环境下运行要快很多。省却了一个转换的过程,将来还可以支持YV。
2. 滤镜处理:内建许多影像处理滤镜,比如Resizing,Cropping等。还有大量的第三方强力滤镜,并可以调用VD以及AviUtl的第三方滤镜。
3. 突破2G限制:通过AviSynth打开影像文件就相当于应用程序直接打开,这样就可以使本身有2G限制的程序也能突破2G的限制。
4. 打开格式:AviSynth可以打开几乎所有影像文件,包括MPEG和QuickTime。所以当影像应用程序通过AviSynth打开这些文件时,会被认为是打开标准的AVI,这样就可以处理影像应用程序本身并不支持的格式。
5. 节省硬盘空间:AviSynth处理的影像文件在运行过程中直接导入应用程序,没有临时文件,所以节省硬盘空间。


看完上面的简介大概对AVS有一定的了解...
其实呢 AVS的作用就是在视频处理的时候 把AVS当做一个跳板(不知道这么说对不对..
这么说吧...
在使用ADOBE的AE没法打开RV(也就是RM, RMVB等) 那么我们就可以在AVS里挂载这个RV语句之后 保存 之后用AE打开这个AVS 就可以打开了...
再比如 我要压制视频的时候 对视频经行缩放处理..把字幕渲染到画面上.成为画面的一部分..
AVS也可以经行这个处理..
而且中间不会生成任何文件
你只需要写几段代码就好了
是不是很方便?


说完用处之后咱们来说安装..

http://pan.baidu.com/share/link?shareid=31865&uk=1829156192#dir/path=%2F%E5%A4%AA%E5%8F%A4%E8%AE%BA%E5%9D%9B%E9%93%BE%E6%8E%A5%2FAVS
上面这个地址是雪大(逝雪)上传的AVS工具..
下载这三个即可...
那么咱们说一下AVS的安装吧
首先全部下载完毕之后打开
AviSynth_2.58.exe
在出现下面这个界面的时候 记住一定要选择FULL

                               
登录/注册后可看大图


之后 一定要记住自己安到哪了....


                               
登录/注册后可看大图

不过当然你C盘有空间的话 推荐安装到C盘..
不过一定要记住你装到那了..
因为一会我们还要装一些滤镜包..
AVS安装完毕之后 打开AVS_DLL_plugins.rar
里面有一些常用的滤镜
那么这些滤镜怎么安装呢..
你打开压缩包之后里面是不是有一个plugins文件夹...
把这个文件夹解压到你AVS的安装目录下
提示覆盖并替换...
那么你就吧AVS给安装完毕了
那么剩下的就说说AVSP的安装...
下载AVSPMOD..
之后找个地方解压就好了
解压完毕之后打开AVSPMOD.EXE就好了
是不是很方便?


好了安装讲完了
继续来说AVS吧..
AVS里面基本都是代码组成的....
这些代码都是需要自己写的
目前比较普遍的书写工具是记事本和AVSP..我们下面就着重介绍一下AVSP
AVSP作为书写AVS工具有一个好处就是
当你想打某个滤镜的名称的时候你只需要打该滤镜的第一个字母(注:要大写)后他下面就会出现一些滤镜供你选择..
如下图

                               
登录/注册后可看大图


这样你的记忆量就会比较少...
其次..AVSP还能把该滤镜的其他参数都列举出来,这也方便使用..
如下图

                               
登录/注册后可看大图


对了,AVS是可以用系统播放器播放出来的..比如WMP..

好了说完AVSP咱们来说一下AVS的基本语法吧..
下面一段引用自NMM文档库

所有基本的Avisynth脚本声明都符合以下的某种形式。
变量名 = 表达式
表达式
return 表达式

(也存在两种更高级的结构 - 函数声明和try..catch声明)

第一种情况,计算表达式的结果,赋给变量名。第二种情况,计算表达式的结果,如果类型是Clip,则赋给一个特殊的变量last。第三种情况,计算出的表达式成为活动脚本的“返回值”——可以是一个函数的“返回值”,也可以是整个脚本的“返回值”。在之后会提到的情况里,返回值往往是可以由打开AVS文件的应用程序看到的视频。简单的说,如果一个表达式中有关键字return,它就会成为一个脚本(或一个脚本block)的结束声明语句。
绝大多数时间,表达式的结果是一个视频Clip,但实际上表达式的结果可以是本脚本语言支持的任何类型(Clip、整数、浮点、布尔、字符串),而且是靠像内部脚本函数这样的模块运算的。
一个表达式有如下的一种形式:
数字常数、字符串常数或布尔常数
变量名或Clip属性
函数(参数)
表达式.函数(参数)
表达式1 运算符号 表达式2
布尔表达式 ? 表达式1 : 表达式2
第一种情况,表达式的值就是常数的值。第二种情况,值和Clip属性或语法:脚本变量有关(之前必须经过初始化)。第三种情况,值是AVS函数的返回值(见下文)。第四种情况,是一个替代的写法,(成为“OPP记号”),和函数(表达式,参数)等价。
最后两种情况,可以使用普通的算数和逻辑运算符号(来自C)操作表达式,计算整数、浮点和布尔,甚至使用三重符号的条件执行语句。字符串可以用相关运算符号比较,也可以用“+”合并。以下的运算符号也对视频Clip有定义:a + b等价于Splice(a,b),a ++ b等价于Splice(a,b)。
Avisynth脚本语言中大部分的函数是视频滤镜。尽管函数可以是它选择的任意类型(这个特性对创建在脚本中重复使用的模块代码很有用的特性,你可以定义自己的脚本函数),但是不返回一个Clip的函数的作用往往被局限在中间变量的处理,用来给滤镜传递变量。脚本最终应该返回一个Clip。总之,Avisynth是一个视频处理程序。
函数可以有60个参数(希望足够了),而且可以返回任何Avisynth支持的类型(Clip、整数、浮点、布尔和字符串)。函数一般计算出一个新值,而从不会更改已经存在的值。这就意味着函数所有的参数都是“按值”传递的而不是“按参考 - By reference”传递的。在Avisynth脚本语言中,为了改动一个值应该首先去赋一个新的值。
参考内部滤镜一节,学习调用内部滤镜函数的语法。同样也有内部函数,对非Clip变量进行运算。
参数是一个由逗号分开的函数参数列表,可以留空。每个参数必须是一个匹配函数所期望类型的表达式(比如文本字符串、整数、浮点/小数、布尔值或Clip)。如果函数期望第一个参数是Clip类型,而且没有提供这个参数,那么Clip会使用last这个特殊的变量。
Avisynth函数可以使用有名字的参数。有名字的参数能以任意顺序给出,滤镜也会给未指定的参数选择默认值。某些滤镜因此用起来很简单。比如你可以这样写: Subtitle("Hello, World!", text_color=$00FF00, x=100, y=200),而不用写成Subtitle("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00)。颜色可以像上面的例子里,以十六进制或十进制的数给出。两种情况下颜色都应该用RGB值,即使Clip本身是YUV的。
如果没有给函数传递函数,还是可以不需要括号就调用函数的。比如:函数名。作这种保留的主要原因是考虑老脚本的兼容性。但是当没有混淆的时候,不写括号也很方便。
Avisynth忽略每行#后面的任何字符。这个功能能用来在脚本中添加注释。
  • # Comment(注释)

在v2.58里允许使用以下的方式添加块注释和嵌套注释


  • # 块注释:/*# 嵌套注释:

Avisynth忽略关键字__END__(两个下划线)到脚本结束的所有文字。这个功能可以用来把脚本末尾的命令全部注释掉。

  • Version()
  • __END__
  • ReduceBy2()
  • Result is not reduced and we can write any text here

Avisynth忽略大小写:aViSouRCe和AVISource等效。

单行之内复合的Avisynth声明只能以OOP记号书写或作为参数内嵌在其他函数内,比如:

  • AviSource("c:\video.avi").Trim(0, 499)
  • -或-
  • AudioDub(AviSource("c:\video.avi"), WavSource("c:\audio.wav"))

Avisynth的声明可以用反斜杠(“\”)分成多行,反斜杠可以是此行的最后一个非空格字符或下一行的第一个非空格字符。

分行示例(两种都可行而且等效):

  • Subtitle("Hello, World!", 100, 200, 0, \
  •   999999, "Arial", 24, $00FF00)

-或-

  • Subtitle("Hello, World!", 100, 200, 0,
  •   \ 999999, "Arial", 24, $00FF00)

复制代码

当跨行时,注释只能写在最后一行的后面。在中间行里混杂分行反斜杠会导致错误信息或对寻找脚本漏洞造成困难。

以下的例子错在混杂了注释和分行反斜杠,丢失了信息:

  • ColorBars
  • ShowFrameNumber
  • Trim(0,9) # select some frames  \
  •   + Trim(20,29)

以上的例子并不如期返回[0..9,20..29]帧,因为“\”被前面的#注释掉了,因此两行不可能相连。




可能看完以上的你会比较晕..
当然看得懂是最好了..
看不懂也没关系..
不过最好还是要了解一下基本语法...

好了 下面我来说一下一些常用的滤镜

源文件滤镜..

何为源文件滤镜 就是挂在视频源或者音频源的...

比如挂AVI文件用的AVISource 挂MPEG的MPEG2Source DirectShowSource DSS2和FFVideoSource FFMS2等
那么就来介绍一下基础用法和常用的一些常用的参数吧..这里我们着重介绍FFVideoSource..
其实日常用的索引的话..(好吧是我常用的.)这个够了..
当你在AVSP选择这个FFVideoSource时.. AVS会出现以下可选参数

                               
登录/注册后可看大图


我们常用的就是Source参数和TimeCodes这两个参数..
一个是挂在源滤镜的 一个是抽取视频的TimeCode用的..
Source参数就是让你打出来源的路径的..
你可以用绝对路径比如..
  • FFVideoSource("C:\XXX\XXX\XXX.MP4")
也可以用相对路径比如
  • FFVideoSource("XXX.MP4")
(PS:对于相对滤镜和绝对路径不清楚的可以问一下度娘..这里就不说了(事实是你懒吧..偷懒去死
然后TimeCodes参数是抽取TimeCode用的..
  • FFVideoSource("C:\XXX\XXX\XXX.MP4",timecodes="C:\XXX\XXX\XXX\XX.TXT")
那么我们写完这些参数了怎么能看到我们的成果呢..
很简单 要是你用AVSP书写的话
你只需要在AVSP界面点这个就好了如下图
比如我写一个
  • FFVideoSource("D:\DVD\PVD3_SDHV_0005\VIDEO_TS\(C82)(同人视频)(东方)[SoundHolic]東方PVD3 特典[DVDRIP][X264_Hi10P][AC3][720P].MKV",TimeCodes = "D:\DVD\PVD3_SDHV_0005\VIDEO_TS\Timecodes.txt")
然后点一下我圈起来的内一个..

                               
登录/注册后可看大图


然后等一会就会出现如下图的

                               
登录/注册后可看大图


用红色方框圈起来的是前一帧图像 黑色方框圈起来的是后一帧图像..

然后你在相同文件的目录下生成了一个FFINDEX文件和TimeCodes.txt文件
这两个的用处我们以后会讲
FFVideoSource不索引音频流..也就是说它打开一个视频文件后 他只索引视频流不索引音频流
这就导致了播放只有视频没有音频..
所以我们要索引音频流..
索引音频流的滤镜是
FFAudioSource..
具体用法是

FFAudioSource("C:\XXX\XXX\XXX.MP4")
这里依旧可以用视频源的路径好比..

FFVideoSource("D:\DVD\PVD3_SDHV_0005\VIDEO_TS\(C82)(同人视频)(东方)[SoundHolic]東方PVD3 特典[DVDRIP][X264_Hi10P][AC3][720P].MKV")
FFAudioSource("D:\DVD\PVD3_SDHV_0005\VIDEO_TS\(C82)(同人视频)(东方)[SoundHolic]東方PVD3 特典[DVDRIP][X264_Hi10P][AC3][720P].MKV")


这样就挂在了音频流和视频流..
那么要是这么写的话 播放肯定是不可以的..因为你索引了两个流 但是你没有告诉它你到底该返回一个什么值..
所以我们在这里又用到一个滤镜

AudioDub


它的用处就是把视频流和音频流合并起来..
那么它怎么用呢...
AudioDub(视频片段,声音片段)


比如:
AudioDub(FFVideoSource("D:\DVD\PVD3_SDHV_0005\VIDEO_TS\(C82)(同人视频)(东方)[SoundHolic]東方PVD3 特典[DVDRIP][X264_Hi10P][AC3][720P].MKV"),FFAudioSource("D:\DVD\PVD3_SDHV_0005\VIDEO_TS\(C82)(同人视频)(东方)[SoundHolic]東方PVD3 特典[DVDRIP][X264_Hi10P][AC3][720P].MKV"))

这样你的第一个AVS就完成了...
你可以保存之后用WMP来查看了..
当然这么写起来很复杂..而且还这么多..三个滤镜叠加到一起 要是出现什么错误差错也不方便..
所以我们可以用变量..
变量是AVS里的基本语法
上面的介绍里写了..
那么咱们刚才的AudioDu语句用上变量来指定一个表达式后retuen 返回改变量来试试吧...

a = FFVideoSource("D:\DVD\PVD3_SDHV_0005\VIDEO_TS\(C82)(同人视频)(东方)[SoundHolic]東方PVD3 特典[DVDRIP][X264_Hi10P][AC3][720P].MKV")
b = FFAudioSource("D:\DVD\PVD3_SDHV_0005\VIDEO_TS\(C82)(同人视频)(东方)[SoundHolic]東方PVD3 特典[DVDRIP][X264_Hi10P][AC3][720P].MKV")
v = AudioDub(a,b)
return v

这样看起来是不是简介方便多了..
所以以后大家书写avs的时候多用一下变量..
坑了一天了 今天来继续填了...
今天讲的是去黑边 剪切视频 缩放滤镜还有挂在字幕
首先来讲去黑边吧
有些视频有一些黑边 可能看起来很不爽 比如下图

                               
登录/注册后可看大图

那么我们怎么去掉这个黑边呢..
这就用到了一个滤镜
Crop

那么Crop滤镜怎么用的呢...
有两种方法..
要是你使用的是AVSP的话能很只管的裁剪掉黑边..
你只需要把文件挂载后..
使用AVSP的预览模式来预览..
之后对着画面右键
点击我圈起来的内一个

                               
登录/注册后可看大图

会出现个这样的对话框

                               
登录/注册后可看大图

你看到个left top -right -bottom
那么我们看到我们是黑边是在上和下 所以我们只需要切掉上方的黑边和下方的黑边
所以我们只需要调整top和-bottom参数..
当你调整过度或者没有完全把黑边裁减的时候AVSP在画面中会出现反色 而且调整的top栏也变成了红色..
裁减过度裁减到了画面的如下图


没有裁减完毕后 还留有黑边的情况如下图



所以 这个需要你一个一个调... 下面也是同理...  下图是我完美裁剪掉黑边的情况..

                               
登录/注册后可看大图

裁减完毕之后点击Apply就好了~
裁减完毕之后会 AVSP命令输入区会多出来一条裁减滤镜

Crop(0, 40, -0, -40)

这个就是裁减的滤镜了

今晚继续填坑...

评分

参与人数 1宅币 +40 贡献 +7 元气(技能点) +3 收起 理由
syl是喵星人 + 40 + 7 + 3 不明觉厉啊0.0

查看全部评分

签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

14

主题

16

好友

2707

积分

Continue

积分
2707
发表于 2012-9-20 14:22:15 | 显示全部楼层
好棒 原来只用megui加载avs压制的 现在想学ae也有用处了嘛!!!
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

22

好友

1万

积分

第一章

积分
17322
发表于 2012-9-22 09:40:33 | 显示全部楼层
所有的图片都是【太古遗产】呢……
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

24

好友

1万

积分

第一章

积分
18687
发表于 2012-11-10 19:49:55 | 显示全部楼层
用megui加载flv的avs显示白屏 没画面 求大大解决
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

36

主题

36

好友

3万

积分

第二章

积分
35370
发表于 2012-12-8 02:05:56 | 显示全部楼层
好复杂。。。马一个,大部分时候还是用软件自动生成,最多在打开加点简单的。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

3

好友

510

积分

New Game

积分
510
 楼主| 发表于 2013-1-29 01:56:38 | 显示全部楼层
腹黑の炎 发表于 2012-11-10 19:49
用megui加载flv的avs显示白屏 没画面 求大大解决

用我提到的 FFMS2 来挂视频就好了 MEGUI默认应该是DSS DSS很容易RP
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-4-29 21:56 , Processed in 0.305771 second(s), 27 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表