用户
 找回密码
 立即注册
搜索

avs入门课程 and rmvb压制中的合理运用

[复制链接]

4515

主题

3万

帖子

17万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
176769
QQ
发表于 2009-7-19 16:56:53
教程】avs入门课程 and rmvb压制中的合理运用

  由于自己不懂avs(主要是懒得写,上篇文章打的到现在看见键盘手腕都痛),转来个大家一起看看,结构或许和其它的不同,但意思都是一样的。



一、简述
  AviSynth是AVISYNTHesizer的缩写,意思就是AVI和成器,是一个Frameserver。(Frameserver就是一个把影像文件从一个程序转换到另外一个程序的过程,其间没有临时文件或中介文件产生)AviSynth是由BenRudiak-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处理的影像文件在运行过程中直接导入应用程序,没有临时文件,所以节省硬盘空间。
AviSynth现在有3个版本,第一个是BenRudiak-Gould的首先编译的AviSynthv1.0b;在BenRudiak-Gould停止开发后,EdwinvanEggelen继续开发,最新的版本是AviSynthv1.0b6;在2002年7月第二次源码编写计划开始,目前最新的版本是AviSynthv2.0.6,新的v2.5版还在开发中。
最后一个版本比较强大,更新速度快,增加了许多实用的命令,也吸收了一些优秀的第三方滤镜成为内建滤镜,强力推荐使用

二、安装
AviSynth的安装可谓简单,先下载AviSynth,然后解压缩,把AviSynth.dll复制到Windows\System下(W98,ME)或Windows\System32下(W2K,XP),然后运行INSTALL.REG就完成安装了。

三、内建滤镜
AviSynth内建了数目繁多的滤镜,所以只能介绍一些最常见实用的一部分。

1、源文件滤镜
①AVISource
导入AVI,对于DivX或XviD,需要安装相应的Codec。
例:AVISource(“test.avi”)

②WAVSource
导入WAV
例:WAVSource(“test.wav”)

2、处理滤镜
①AddBorders
加边:给影像加黑边,尤其适用于对16:9的影像加字幕,希望不影响图像,把字幕加在图象的下方的情况。参数是整数,顺序是左、上、右、下。
例:AddBorders(0,64,0,64)#把640*352(16:9)改成640*480(4:3)

②ConvertToRGB和ConvertToYUY2
改变颜色环境:
VD和AviUtl第三方滤镜有的需要RGB环境才能运行,需要ConvertToRGB来进行切换。
有的RAW文件是RGB的,但调用的AVISynth滤镜只能运行在YUV下,就需要用ConvertToYUY2来运行。
例:ConvertToRGB()#改变成RGB颜色环境
??ConvertToYUY2()#改变成YUV颜色环境

③Crop
切边:为了保持比例或切除黑边,参数是整数,顺序是左、上、宽、高。
例:Crop(8,0,704,480)#左右各切去8,以保持比例

④Levels
层次:调节亮度、对比度和Gamma值。
例:Levels(0,1.2,255,0,255)#调整Gamma,使画面变亮

⑤LanczosResize
放大缩小:Lanczos采样方法可以在图像处理中看到,是BicubicResize的替代者,提供更精准、更锐利的画质。本来是日本人开发的第三方滤镜,在日本普遍使用,欧美使用BicubicResize。自2.05版本开始吸收为内置滤镜。
例:LanczosResize(640,480)#把分辨率改变为640*480

⑥Tweak
??调整:可以调节色度,饱和度,亮度,对比度。
??色度:-180.0~180.0,默认0.0。正数趋向红色,负数趋向绿色。
??饱和度:0.0~10.0,默认1.0。0.0为黑白。
??亮度:-255.0~255.0,默认0.0。
??对比度:0.0~10.0,默认1.0。
使用道具 举报 回复
发表于 2009-7-19 16:57:07
3、编辑滤镜
①FadeIn和FadeOut
淡入和淡出:提供淡入和淡出功能,尤其是淡出功能,可以使影片结束地更自然。参数为整数,表示需要编辑的帧数.
例:FadeOut(24)#影片最后1秒淡出

②Trim
截取:决定需要处理的部分。参数为整数,表示需要编辑的开始帧和结束帧。对抽样做Sample比较有用。
例:Trim(240,480)#决定处理240~480这一片断

4、声音滤镜
①AudioDub
影音合并:可以把影像和声音合并在一起。适用用用Helix直接做RMVB格式的DVDrip。
例:Video=AVISource("test.avi")
??Audio=WAVSource("test.wav")
??AudioDub(Video,Audio)#把test.avi和test.wav合并

②GetLeftChannel和GetRightChannel
获取声道:把立体声的左右声道单独返回,适用于左右声道不同语种的WAV。
例:stereo=WavSource("test.wav")
??returnGetLeftChannel(stereo)#返回test.wav的左声道

③DelayAudio
声音延迟:由于从VOB里分离的AC3通常有延迟,所以用Azid转码得到的WAV也有延迟,在用AudioDub合并时就需要加上这个延迟。
例:WavSource("test.wav").DelayAuido(0.5)#把test.wav延迟半秒

四、第三方滤镜
  AviSynth最强大之处就是有数目繁多、功能强大的第三方滤镜;同时还可以调用VD以及AviUtl的滤镜;甚至还有特别开发的接口,可以让TMPGEnc和AviUtl读取AVS。和内建滤镜不同,第三方滤镜需要先调用声明,再可以使用。

1、源文件滤镜
①MPEG2Dec
由dividee编写的读取DVD2AVI产生的d2v工程文件的滤镜,同时内建去除Noise的TemporalSmoother。
例:LoadPlugin("MPEG2Dec.dll")
??MPEG2Source(”test.d2v”)

②MPEG2Dec2
trbarry在MPEG2Dec的基础上进行了改进,支持P4的SSE2指令集。用文本编辑工具打开d2v,把iDCT_Algorithm=?改成5就可以了。速度很快,效果也好,推荐P4CPU的用户使用。
例:LoadPlugin("MPEG2Dec2.dll")
??MPEG2Source(”test.d2v”)

③MPEG2Dec3
在MPEG2Dec2的基础上再进行了改进,加入了Nic的图像后处理(PP),一定程度上可以减少Noise。好像除了P4的SSE2外,还加入了AMD的3DNow!优化,目前还在开发中,是个非常有前途的滤镜。
例:LoadPlugin("MPEG2Dec3.dll")
??MPEG2Source(”test.d2v”,CPU=4)#CPU=4就是开启了PP模式

2、处理滤镜
①SimpleResize
放大缩小:由trbarry编写的,由于对SSE进行了优化,所以速度快,效果好。替代了AviSynth中的BilinearResize。和LanczosResize的米切尔双立方体算法不同,这个是单纯的双线性算法。LanczosResize的画质更锐利和真实,适合普通电影;而SimpleResize的画质较柔和,适合动画。
例:LoadPlugin("SimpleResize.dll")
??SimpleResize(640,480)
使用道具 举报 回复 支持 反对
发表于 2009-7-19 16:57:20
②ColorYUY2
颜色补偿:Kiraru2002编写的滤镜。由于经过编码,得到的结果和DVD相比较,颜色有所改变,所以要对颜色进行补偿。
例:LoadPlugin("ColorYUY2.dll")
??ColorYUY2(0,10,0,10,0,0,0,0,0)

3、交错滤镜
Decomb
IVTC和Deinterlace滤镜:由DonaldA.Graft编写,新增加的专门处理NTSC格式动画的mode=2,要和Avisynth2.05以上版本使用,不然速度会慢一倍。
guide0~2,默认0,NTSC用1,PAL用2,可以提高IVTC准确度。
gthresh0~100,默认15,控制区分不同帧的程度。
post默认true,用来处理IVTC遗漏的细节,使画面略微模糊。
threshold0~255,默认15,控制post的程度。
dthreshold0~255,默认9,控制threshold判定IVTC遗漏的程度。
blend默认true,在交错画面用渲染来替代填充。
chroma默认false,在交错画面的亮度色度调整。
cycle2~25,默认5,每n帧删除1帧,NTSC选5,PAL选25。
mode0~2,默认2。
mode=0对cycle里最相近的帧不进行处理。
mode=1对cycle里最相近的帧进行处理,用于处理混合帧速。
mode=2在一个很长的范围里进行帧对比,可以正确处理动画里由8帧或12帧复制为29.97帧的情况。
Threshold默认0,控制mode=1时的处理重复帧的程度,Threshold默认100,控制mode=2时的处理重复帧的程度。
Quality0~3,默认2,采样和色度的质量,与速度成反比。

但是最近的几个版本似乎都存在一个问题,就是处理后的画面有波动现象,并伴随影片里文字闪烁现象,所以还是用老版本的保险。

例:LoadPlugin("Decomb.dll")
Telecide(Guide=1,Gthresh=50,Chroma=True,Quality=3,Post=false)
Decimate(cycle=5)#NTSC3:2PullDown
LoadPlugin("Decomb.dll")
Telecide(Guide=1,Gthresh=50,Chroma=True,Quality=3,Post=false)
Decimate(Cycle=5,Mode=2)#NTSCProgressive和Interlaced混合
LoadPlugin("Decomb.dll")
Telecide(Guide=2,Gthresh=50,Chroma=True,Quality=3,Post=false)
Decimate(Cycle=25)#PAL

4、字幕滤镜
①VobSub
Sub字幕:VobSub不但是外挂字幕的好手,内嵌字幕也是一样的强。
将字幕的2个文件test.idx和test.sub放在同一个目录下就可以了。
例:LoadPlugin("VobSub.dll")
??VobSub(“test”)

②TextSub
SSA和ASS字幕:这个也是VobSub自带的,可以内嵌特效字幕。
例:LoadPlugin("TextSub.vdf")
??TextSub(“test.ssa”)

avs讲解及其在rmvb压制中的合理运用

原作者 极速copd

做为rmvb制作爱好者,尽管很早就接触过avs,但真正体会出其强大功能的还是近2月的事,因为自己在rmvb压制方面也算积累了不少经验和技巧,对于avs在rmvb的应用有自己的一番见解,呵呵!

AviSynth是AVI synthesizer的缩写,简单来说就是个合成平台!在媒体文件和压缩软件之间担任\"桥梁\"的角色。这座桥梁不是简单的独木桥、而是有栏杆、有台阶(比喻其提供的大量虑镜)。因此比较灵活!如对于压制real格式来说,源媒体文件是vob、d2v(DVD处理过程中的中间文件)、ac3、mp3、avi、DAT/mpge等,而应用程序是各种real压缩软件如Helix real producer、BatchRealProducer144和EasyRealProducer14,它们都支持avs的导入。个人推荐使用EasyRealProducer14(可能目前的版本在avs方面不够完善,但趋势是明朗的,呵呵)。AutoRv9虽然在avs方面有所体现,但不适合刚接触rmvb压制的朋友,我总觉得有误导之嫌。

AviSynth首先要编写建立一个包含特定命令的文本,称之为\"脚本\"(文件后缀名为avs),这些命令指定要运行处理的媒体文件和滤镜!

AviSynth的平台和相关滤镜更新比较快,功能不断增加,编辑avs脚本也更简单。在射手网可以下载到这个平台软件。至于滤镜可以到得到http://www.avisynth.org/warpenterprises/
下载,至于doom9论坛,大家知道有这么个乌合的巢穴就可以了!
使用道具 举报 回复 支持 反对
发表于 2009-7-19 16:57:35
上面简单介绍了AviSynth的一些基本概念作为引子,在正文开始前,我想首先交待很重要的一点:avs脚本及其各种滤镜主要适用于大码率媒体文件的处理,也即我们经常接触的DVDRIP/TVRIP avi的制作优化。而对于高度压缩格式的rmvb来说,我们利用的avs滤镜应该持慎重态度(如亮虑镜、字幕虑镜、画面调整等少数几个)!也就是说avs在rmvb压制方面,我们需要的是利用avs灵活的“中间人”的角色(看下面的例子)!而不是为了avs而去压制!我看到好多朋友初步接触rmvb压制,就在用avs压制DVDRIP-rmvb,完全套用个别论坛给出的avs脚本,里面全是各种滤镜,如3D增强、柔化、去丝等!这些滤镜如果制作DVDRIP的avi那是会获得肯定的画质效果,但是用于rmvb压制,仿佛就是东施效颦,忠言逆耳!real压制的原理和高码率的mpge4编码是不同的,后者有视频上层的概念,因此滤镜的修饰作用可以体现。我看Doom9讨论avs时,主要还是处理各种大数据量影像媒体为主。如处理自己DV录制的影视、电视卡录制的视频源之类的等。而众所周知的影响real媒体压缩效果就是片源效果。VCD片源的再怎么处理也不可能达到DVD的效果,而DVD片源,再怎么胡乱压制也不会差到哪里。因此avs直接在rmvb的压制中需要适当选择,而不能盲从,特别是对于各种滤镜的选择更要注意。

第二,需要认识avs的桥梁作用。修饰之余尽可能的使用压缩软件本身的功能。如rmvb压制中帧率的改变就可以在压缩软件中进行设置,而不要在avs中写入相关的语句。另外各种压缩软件使用的是real的压缩内核,而real压缩一般以YV12的快速处理环境为主。这也是在使用avs压制rmvb时需要注意的问题

DVDRIP-rmvb的压制请使用我中高级教程里介绍的方法来压制,更显成熟和含蓄!因为黑边裁减、画面缩放和亮度调节都可以通过辅助软件如ffdshow来实现。请注意我使用的少数几个ffdshow的辅助功能(ffdshow可以变相的认为是avs滤镜的插件化)。其道理和avs是一样的,我只是用了其字幕、调节亮度和缩放尺寸等少数几个功能!

自己觉得上文对avs的介绍及应用范围要比下面的内容来的更重要!这是我直到现在才撰写完毕这篇小文的良苦之处。我希望接触过avs法压制rmvb的朋友能够更有效的利用这种方法!

我自己测试过利用avs压制vob文件。感觉:1,压缩速度较快,因为vob直接压缩成rmvb本身就需要画面缩放,用常规方法压制速度较慢。2,黑边裁减很是轻松。3,可以灵活的加载字幕合水印文件。4,压缩效果不如高质量的DVDRIP-rmvb。


下面先简单的介绍些基本方法和常用滤镜。

首先安装avisynth,并将常用虑镜插件dll文件拷贝到安装目录的plugin目录里。

我们主要利用avs来压制DVD的vob文件

一 基本代码
1. LoadPlugin(),加载插件。
如:
LoadPlugin(\"VSFilter.dll\") 加载字幕插件
LoadPlugin(\"mpasource.dll\") 加载mp3插件

请下载以上提到的滤镜!并解压制到plugin目录里(当然目录可以自己选定)

2.源媒体读取
DirectShowSource(\"e:\vob\ss.VOB\")
DirectShowSource()在高版本avisnyth中显得更万能些,常用的媒体格式,如avi、mpge1/dat、mpge2/vob/bin都可以加载,另外可以不用分离视频和音频,而直接压缩!想要直接压制vob请使用高版本的avisynth,如目前的2.54

AVISource(e:\avi.avi,false)
这个对于DVDRIP压制者来说可能更常用些.false表示禁止音频!

WAVSource(\"e:\vob\ss.wav\") 读取wave音频
AC3SOUECE(\"e:\vob\ss.ac3\") 读取ac3音频
MPASOURCE(\"e:\vob\ss.MP3\") 读取mp3音频
注:WAVSOURCE和AVISOURCE是属于核心脚本,无须读取插件,但AC3SOURCE和MPASOURCE需要读取AC3SOURCE和MPASOURCE插件。DirectShowSource的读取需要安装各种音频和视频的解码器

3. crop()、LanczosResize()裁黑边和调整大小
vob文件画面大小一般720×480。16:9宽银幕的都带了很大的黑边,需要裁减掉。也是avs用于vob压制的关键因素之一
裁减黑边和缩放画面是vob文件压制中很重要的因素,一般连用。对于本身就无黑边的文件直接用LanczosResize()
16:9画面的有2种情况,请记住这几个数值,在rmvb压制中直接套用即可!
DVD变形宽银幕:640×352,608×336
电影宽银幕: 640×272

如要将电影宽银幕的画面比列调整到640×272,avs里可以这么写
Crop(8,90,704,300)
LanczosResize(640,272)

如要将DVD变形宽银幕的画面比列调整到608×336,avs里可以这么写
Crop(8,64,704,352)
LanczosResize(608,336)

无黑边的画面的直接用
LanczosResize(512,384)
缩小同时画面强制到标准4:3

请直接记住这几句就可以了得到最佳的rmvb画面大小了!
4.亮度滤镜
亮度滤镜是使用avs压制vob-rmvb vcd-rmvb的又一关键因素。画面太暗的rmvb是失败之作

介绍2个
Levels(0,1.5,255,0,255)
改第二个,我感觉数值在1.3-2之间比较合适,一般1.5比较合适
使用道具 举报 回复 支持 反对
发表于 2009-7-19 16:57:56
Tweak(0,1,20,1)
4个浮点数分别表示:调节色度,饱和度,亮度,对比度。一般将第三个调节在0-30之间,以15-20为宜

个人感觉level()比较好,主要调背景为主,而vob文件主要是背景暗。注意Tweak的其他调节可能和颜色控制环境有关,如YUY2,因此其它的最好不要再改动

注:ffdshow目前的版本还是不能支持mpge2唉!否则可以利用它来调节亮度了

5.字幕滤镜
TextSub(\"h:\avs\jrvs.ssa\") 加载水印文本
VobSub(\"e:\vob\ss.idx\") 加载影片字幕

6.其它虑镜介绍,在rmvb压制中不推荐使用,如部分朋友选用的
FluxSmooth(5,7) 柔化滤镜
Convolution3d(\"moviehq\") 3D优化滤镜
2者需要加载相应的滤镜插件

二,合成
1
LoadPlugin(\"VSFilter.dll\")
LoadPlugin(\"mpasource.dll\")
video=AVISource(\"c:.avi\",false).TextSub(\"c:\logo.ssa\").VobSub(\"c:.idx\").Lanczosresize(512,384) #定义了avi源、字幕、水印和画面大小
audio=mpasource(\"c:.mp3\") #音频
AudioDub(video, audio)

为简便起见,以avi文件为例说明语法,但此例不推荐用,直接用压缩软件+ffdshow设置即可。原始avs加载了至少3个额外的滤镜,已略去!

该方法可以用于双语DVDRIP的压制,使用双语处理的软件提取自己要的声道即可,而不要再合并成avi了!

DTS音轨格式的可以用这个avs法压制
先根据中高级教程里的方法将DTS音频转换成wave格式,如放在e:\avi\目录里
avs可以这么写:
LoadPlugin(\"VSFilter.dll\")
video=AVISource(\"c:.avi\",false).TextSub(\"h:\avs\jrvs.ssa\").VobSub(\"e:\avi\t1.idx\")
audio=WAVSource(\"e:\avi\t1.wav\")
AudioDub(video, audio)
如此可以不用再合并那么费事了!


2
LoadPlugin(\"VSFilter.dll\")
b=directshowSource(\"e:\avs\cd1.avi\").TextSub(\"e:\BBSLogo\logo.ssa\").VobSub(\"e:\avs\cd1.idx\").Lanczosresize(608,320)
c=directshowsource(\"e:\avs\cd2.avi\").VobSub(\"e:\avs\cd2.idx\").Lanczosresize(608,320)
final=b+c
return final
这个语法很好,直接将多CD的压制成一个rmvb,可以在一定程度上解决单CD码率过度错位。如分别1pass压制CD1和CD2可能会由于码率错位太大而使文件增大,但如果2个一起压制,则可能由于码率补偿,平均码率错位反而不大,而使文件大小减小。
请注意,这里自己可以将水印放在CD1上,而CD2不会显示(说明什么?呵呵!)

一般DTS的都要2CD以上,有时影片长度也不长,所以DTS的电影可以这么写avs压制
LoadPlugin(\"VSFilter.dll\")
video=AviSource(\"e:\cd1.avi\",false).Vobsub(\"e:\cd1.idx\").TextSub(\"c:\logo.ssa\")+AviSource(\"e:\cd2.avi\",false).VobSub(\"e:\cd2.idx\")
audio=wavSource(\"e:\cd1.wav\")+wavSource(\"e:\cd2.wav\")
AudioDub(video, audio)
使用道具 举报 回复 支持 反对
发表于 2009-7-19 16:58:08
3
双语的vcd分成单语来做
LoadPlugin(\"VSFilter.dll\")
video=DirectShowSource(\"F:\mpge\*.dat\").Levels(0,1.7,255,0,255).LanczosResize(480,360)
return GetChannel(video,2)

1 left channel
2 right channel ,一般是国语


如果要求控制帧率,那么有句改成这个
video=DirectShowSource(\"F:\mpge\*.dat\",fps=25)

以上都是avi,都可以自动关联ffdshow,所以亮度可以在ffdshow里设置!但请同时去掉ffdshow的字幕和avisynth功能

下面集中给2个用avs法压制vob-rmvb的avs代码
先按照常规教程里介绍的方法将vov文件拷贝到硬盘上,然后在记事本里写上如下语句,保存为后缀名为avs的文件即可
然后可以用mediaplayer播放这个avs(想一想,是怎么个效果。呵呵,avs不是联系源文件和应用程序的桥梁吗,播放avs就相当于在播放带字幕和水印的影视了)

1,无黑边者
LoadPlugin(\"VSFilter.dll\")
DirectShowSource(\"e:\vob\ts.VOB\")
LanczosResize(512,384)
Levels(0,1.5,255,0,255)
VobSub(\"e:\vob\ss.idx\")
TextSub(\"h:\avs\jrvs.ssa\")

2,宽银幕(16:9)
LoadPlugin(\"VSFilter.dll\")
DirectShowSource(\"e:\vob\ss.VOB\")
Crop(8,64,704,352)
LanczosResize(608,336)
Levels(0,1.5,255,0,255)
TextSub(\"H:\avs\jrvs.ssa\")
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则