荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: enjoy (路过,大家继续~~), 信区: Newsoftware
标  题: AviSynth的相关使用说明--引自DreamLand
发信站: 荔园晨风BBS站 (2004年12月16日18:09:25 星期四), 站内信件




AviSynth简单来说就是个合成平台!在媒体文件和压缩软件之间担任"桥梁"的角色。这座
桥梁不是简单的独木桥、而是有栏杆、有台阶(比喻其提供的大量虑镜)。因此比较灵活
!如对于压制real格式来说,源媒体文件是vob、d2v(DVD处理过程中的中间文件)、ac3、
mp3、avi、DAT/mpge等,而应用程序是各种real压缩软件如Helix real producer、Batch
RealProducer和EasyRealProducer等,它们都支持avs的导入。推荐使用EasyRealProduce
r,目前版本1.83。

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

AviSynth的平台和相关滤镜更新比较快,功能不断增加,编辑avs脚本也更简单。在射手网
可以下载到这个平台软件,熟悉影视论坛的可以在论坛的技术板块得到升级信息。至于滤
镜可以到得到http://www.avisynth.org/warpenterprises/下载

至于doom9论坛,大家知道有这么个乌合的巢穴就可以了!

有些滤镜已有更新。

上面简单介绍了AviSynth的一些基本概念作为引子,在正文开始前,我想首先交待很重要
的一点:avs脚本及其各种滤镜主要适用于大码率媒体文件的处理,也即我们经常接触的D
VDRIP/TVRIP avi的制作优化。而对于高度压缩格式的rmvb来说,我们利用的avs滤镜应该
持慎重态度(如亮虑镜、字幕虑镜、画面裁减缩放等几个)!也就是说avs在rmvb压制方面
,我们需要的是利用avs灵活的“中间人”的角色(看下面的例子)!而不是为了avs而去
压制!特别是最常见的DVDRIP-rmvb压制中。我看到好多朋友初步接触rmvb压制,就在用a
vs压制DVDRIP-rmvb,完全套用个别论坛给出的avs脚本,里面全是各种滤镜,如3D增强、
柔化、去丝、色彩转换等!

real压制的原理和高码率的mpge4编码是不同的,后者有视频上层的概念,因此滤镜的修饰
作用可以体现。我看Doom9讨论avs时,主要还是处理各种大数据量影像媒体为主。如处理
自己DV录制的影视、电视卡录制的视频源之类的等。影响real媒体压缩效果就是片源效果
。因此avs直接在rmvb的压制中需要适当选择,而不能盲从,特别是对于各种滤镜的选择更
要注意。

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

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

avs用于DVDRIP-rmvb的压制,主要是利用其合成功能将多个avi文件直接压制成一个rmvb。
灵活处理加载源、字幕选择、双语声道选择等问题。也就是说利用的是avs技巧(加载,合
成)而不是单纯滤镜(颜色环境转换滤镜、各类柔化、锐化滤镜、场处理滤镜等)

avs用于rmvb的压制选用滤镜主要是处理VCD(mpge1/dat)、DVD(mpge2)、SVCD(bin)等
视频源。以便获得更好的压制效果。参见具体帖子的内容。

下面介绍些基本方法和常用滤镜。

首先安装avisynth,并将常用虑镜插件dll文件拷贝到安装目录的plugin目录里,如此有些
滤镜不用增加LoadPlugin()语句,如字幕滤镜

为了能充分利用合适的滤镜,也避免新手使用中出现的加载滤镜出错的情况,请同时安装
DVDRIP制作入门级的工具包,Gordian Knot,简称GK。这个软件可以到射手网或者太平洋
下载中心下载到!推荐0.28.7版本,其内置avisynth2.53版本和几个常用的辅助滤镜如

mpeg2dec3.dll

IVTC/Deinterlace类:decomb.dll,kerneldeint.dll

降噪、柔化类: undot.dll,FluxSmooth.dll,Convolution3d.dll,deen.dll等

缩放滤镜:SimpleResize.dll

字幕滤镜:VSFilter.dll

其它辅助工具有:提取vob文件的DVDecrypter、DVD2AVI,音频分离工具AVI_MUX1.13(此
版本基本可以处理所有的ac3/dts 和mp3类双语片,ogg的可以用VDM1.5.*版本提取)

avisynth版本可以在这个基础上进行升级,如较好的2.55版本

一 基本代码

1. LoadPlugin(),加载插件.dll文件。

如:

LoadPlugin("VSFilter.dll") #加载字幕滤镜

LoadPlugin("mpasource.dll") #加载mp3解码滤镜

LoadPlugin("C:\Program Files\GORDIA~1\mpeg2dec3.dll")#加载d2v工程文件的解码滤镜


LoadPlugin("C:\Program Files\GORDIA~1\decomb.dll")#加载场处理滤镜

滤镜下载可以到

http://www.avisynth.org/warpenterprises/

各滤镜都附带简单的参数说明

并解压制到plugin目录里(当然目录可以自己选定,也可以都解压到GK的目录内)

或者

在avs文本开始的地方设置滤镜的目录,如

SetWorkingDir("C:\PROGRA~1\GORDIA~1\")

如此接下来的

LoadPlugin()中,直接写滤镜名

加载滤镜还有2个

LoadVirtualDubPlugin()#加载VD的滤镜,.vdf文件

LoadVirtualDubPlugin(C:\VirtualDub\PlugIns\logo.vdf)

AVISource("file.avi")

ConvertToRGB32() #需要转换颜色环境

VD_logo(3, 320, 255, true, 0, 0, 0, 45, "E:\logo.bmp", false, 276, 216, 0, 20,
 492, 10)

此为利用VD的滤镜在影片中加载静态图像,具体参数可以到我技术区查阅相关帖子。

LoadVFAPIPlugin()#加载TMPGEnc滤镜

TMPGEnc的滤镜用于avs主要是利用其提供的IVTC作用,而在rmvb压制中,选择这类ivtc可
谓得不偿失,故略过

2.源媒体读取

DirectShowSource("e:\vob\ss.VOB")

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

AVISource(e:\avi\1.avi,false)

这个对于DVDRIP压制者来说可能更常用些.false表示禁止音频!在用AudioDub合成时,无
需定义是否禁止音频。

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的读取需要安装各种音频和视频的
解码器,目前基本可以用DirectShowSource来读取ac3和mp3格式。

mpeg2source("e:\temp\sample.d2v",cpu=4)#读取d2v文件,具体参加vob-rmvb压制的教程
,特别注意有时必须用d2v加载的情况。而且如果片子较短,如一些科教片,1CD也就45mi
n左右的,可以直接用DVD2AVI生成d2v和音轨直接在光驱上压制即可!

3. crop()、LanczosResize()裁黑边和调整大小

这avs用于vob压制的关键因素之一

裁减黑边和缩放画面是vob文件压制中很重要的因素,一般连用

crop(左切,上切,-右切,-下切)

全屏模式的

crop(16,8,-16,-8)#16为起始数值,如果切不干净,再增加数值,一般加4的倍数

LanczosResize(512,384)

16:9画面的有2种情况,请记住这几个数值,在rmvb压制中直接套用即可!

DVD变形宽银幕:640×352,608×336

电影宽银幕: 640×272,这个可以保留部分黑边,将字幕增加进去,画面变成640×360

请直接记住这几句就可以了得到最佳的rmvb画面大小了!

4.亮度滤镜

亮度滤镜是使用avs压制vob-rmvb vcd-rmvb的又一关键因素。

介绍2个

Levels(0,1.5,255,0,255)

改第二个,数值在1.2-1.7之间比较合适,一般1.5比较合适

Tweak(0,1,20,1)

4个浮点数分别表示:调节色度,饱和度,亮度,对比度。一般将第三个调节在0-30之间
,以10-20为宜

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

如果感觉片子偏红那么Tweak(-5,1.2,15,1)

如果感觉片子苍白,那么Tweak(5,1.4,10,1)

5.字幕滤镜

TextSub("h:\avs\jrvs.ssa") 加载水印文本

VobSub("e:\vob\ss.idx") 加载影片字幕

如果字幕和avs文件放在一个目录里,那么可以省去路径甚至是后缀名,如VobSub("ss")


注意,字幕应该加载整个avs语法序列的最后,特别是在裁减缩放滤镜的后面。

6,降噪滤镜

undot()

可以连在一起用,自己看效果体会

undot().undot().undot().undot().undot()

7.柔化滤镜

SpatialSoften / TemporalSoften 空间轴和时间轴柔化滤镜

FluxSmooth(5,7) 柔化滤镜

Convolution3d("moviehq") 3D优化滤镜

deen()

2者需要加载相应的滤镜插件

柔化滤镜具体参数参见那2篇

8,锐化、模糊滤镜

Sharpen(0.2,0)/Blur(0,1)

2个数值分别表示水平参数和垂直参数

一般Sharpen(0.2)表示Sharpen(0.2,0.2)

Blur(0,1)是模糊滤镜,设置了垂直参数可以消除些边缘刻痕

可以连续加载Blur(0,1).Blur(0,1)

可以结合MergeChroma / MergeLuma来使用,如

MergeLuma(Blur(0,1)Blur(0,1))

Blur(-1)就相当于锐化滤镜了

VCD-rmvb压制的介绍中还有个Warpsharp()锐化滤镜介绍

9,颜色环境转换

ConvertToRGB / ConvertToRGB32#用于内嵌图片时,一般不用

ConvertToYUY2/#根据出错提示来,如一些柔化滤镜SpatialSoften

ConvertToYV12# 加载Convolution3d和deen时需要转换

10 场处理滤镜,参见vob-rmvb压制

二,组合和连用

先给几个个具体的avs内容

1.VCD-rmvb的通用滤镜

#LoadPlugin("c:\Program Files\GORDIA~1\decomb.dll")

#LoadPlugin("c:\Program Files\GORDIA~1\undot.dll")

#LoadPlugin("C:\Program Files\GORDIA~1\Convolution3d.dll")

#LoadPlugin("C:\Program Files\GORDIA~1\deen.dll")

LoadPlugin("c:\Program Files\GORDIA~1\FluxSmooth.dll")

#LoadPlugin("C:\Program Files\GORDIA~1\Warpsharp.dll")

LoadPlugin("VSFilter.dll")#不加也行

DirectShowSource("F:\mpge\2.dat")

crop(8,4,-12,-4)#自由裁减

LanczosResize(448,336)#VCD-rmvb应该适度的放大画面

Levels(0,1.2,255,0,255)#先增加亮度,将噪音都放大,之后再用柔化滤镜

sharpen(0.2)#表面上看来应先柔化再锐化,sharpen应加在最后,同上

FluxSmooth(5,7)

TextSub("h:\avs\jrvs.ssa")#注意字幕应放在裁减之后

#GetChannel(2)#表示需要国语声道

当然本人的滤镜还会根据实际情况增加FieldDeinterlace,tweak,MergeLuma等滤镜,不
过以上这个模板基本可以压制出显眼的rmvb作品,也是我推荐给论坛连续剧压制组的一套
滤镜。

2

video=DirectShowSource("F:\mpge\*.dat")

video=Levels(video,0,1.2,255,0,255)

return GetChannel(video,2)

3.

V=MPEG2Source("D:\vob\08.d2v").FieldDeinterlace(blend=false).UnDot()

V=crop(v,16,4,-16,-4).LanczosResize(448,336).UnDot()

V=Levels(V,0,1.2,255,0,255).UnDot().vobsub("08.idx")

a=DirectShowSource("D:\vob\08.ac3")

AudioDub(v,a)

相当于

MPEG2Source("D:\vob\08.d2v")

FieldDeinterlace(blend=false)

UnDot()

crop(16,4,-16,-4)

LanczosResize(448,336)

UnDot()

Levels(0,1.2,255,0,255)

UnDot()

vobsub("08.idx")

4,

DelayAuido(DirectShowSource("e:\temp\sample.GRF"),100)

相当于

a=DirectShowSource("e:\temp\sample.GRF")

a2=DelayAuido(a,100)

参考DVD压制篇

5,

ERP的avs框内可以添加以下内容以实现成批压制

LoadPlugin("c:\Program Files\GORDIA~1\VSFilter.dll")

LoadPlugin("c:\Program Files\GORDIA~1\FluxSmooth.dll")

video=video.crop(8,4,-12,-4).LanczosResize(448,336)

video=video.Levels(0,1.2,255,0,255).sharpen(0.2)

video=FluxSmooth(video,5,7)

video=video.TextSub("h:\avs\jrvs.ssa")

说明

#表示禁止某句语法

.(点)连用,如此可以省略一些变量。当然有些滤镜,特别是组合套用的滤镜不能用点来引
出。

非合成语句定义参数者需再加return语句,这也是ERP的辅助avs功能中需要注意的地方,
因为强制了return video结束,所以avs语句中需要增加video变量。

三,avs的合成

1

LoadPlugin("VSFilter.dll")

LoadPlugin("mpasource.dll")

video=AVISource("c:\1.avi").Levels(0,1.3,255,0,255).Lanczosresize(512,384).Tex
tSub("c:\logo.ssa").VobSub("c:\1.idx").#定义了avi源、亮度、画面大小、字幕、水


audio=DirectShowSource("c:\1.mp3") #音频

AudioDub(video, audio)

或者

LoadPlugin("VSFilter.dll")

LoadPlugin("mpasource.dll")

video=DirectShowSource("c:\1.avi").TextSub("c:\logo.ssa").VobSub("c:\1.idx")#亮
度、缩小画面可以在ffdshow中设置

audio=DirectShowSource("c:\1.mp3")

AudioDub(video, audio)

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

2

LoadPlugin("VSFilter.dll")

b=directshowSource("e:\avs\cd1.avi").TextSub("e:\BBSLogo\logo.ssa").VobSub("e:
\avs\cd1.idx")

c=directshowsource("e:\avs\cd2.avi").VobSub("e:\avs\cd2.idx")

final=b+c

return final

这个语法很好,直接将多CD的压制成一个rmvb,可以在一定程度上解决单CD码率过度错位
。如分别1pass压制CD1和CD2可能会由于码率错位太大而使文件增大,但如果2个一起压制
,则可能由于码率补偿,平均码率错位反而不大,而使文件大小减小。

请注意,这里自己可以将水印放在CD1上

一般DTS的都要2CD以上,有时影片长度也不长,所以DTS的电影可以这么写avs压制,先将
DTS的转换成wave

LoadPlugin("VSFilter.dll")

video=directshowSource("e:\cd1.avi").Vobsub("e:\cd1.idx").TextSub("c:\logo.ssa
")+directshowSource("e:\cd2.avi").VobSub("e:\cd2.idx")

audio=wavSource("e:\cd1.wav")+wavSource("e:\cd2.wav")

AudioDub(video, audio)

3,双语rmvb的制作

a,双语DVDRIP压制成双语的rmvb

先用AVIMux_GUI来处理音频。右键点击提示另存为mp3即可

对于喜欢压制rmvb而门外与DVDRIP压制的朋友建议使用AVIMux_GUI来处理音频,更显轻松
合理。

avs语法如下:

LoadPlugin("VSFilter.dll")

LoadPlugin("mpasource.dll")

video=directshowSource("c:\1.avi",false).TextSub("c:\logo.ssa").VobSub("c:\1.i
dx")

R=directshowSource("e:\R.MP3")#mp3的压制问题较多,所以有些情况下用MPASOURCE加


L=directshowSource("e:\L.MP3")

stereo = MergeChannels(R,L)

return AudioDub(video, stereo)

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

4,增加黑边同时利用ssa字幕控制字幕显示

a=aviSource("e:\avs\a.avi").AddBorders(0,40,0,40).Levels(0,1.2,255,0,255).text
sub("e:\avs\cd1.ssa").textsub("e:\bbslogo\logo.ssa")

b=aviSource("e:\avs\b.avi").AddBorders(0,40,0,40).Levels(0,1.2,255,0,255).text
sub("e:\avs\cd2.ssa")

c=aviSource("e:\avs\c.avi").AddBorders(0,40,0,40).Levels(0,1.2,255,0,255).text
sub("e:\avs\cd3.ssa")

d=a+b+c

return d

此为2.35:1的宽银幕片子增加黑边,然后将字幕控制在黑边内,字幕位置可以在ssa中定义


avs在rmvb压制中另外一个作用是利用ffdshow支持avisynth的功能来实现多字幕的加载,
部分动态水印可以通过这种方法来实现,但是还不是很完善,请参见水印的那个帖子

第二,部分VCD/mpge格式由于插件冲突,在播放时能自动加载版权水印,但用压缩软件压
缩时就不能自动加载了,那么这个时候,就可以利用avs来加载

再来谈谈2个重要的加载滤镜directshowsource 和avisource

avs的重要功能体现在其合成、嵌套以及强大的增强滤镜。早期的avs需要先分离视频和音
频,然后再利用avs的合成,比较繁琐,一般人也不愿意接触。随着avisynth版本的提高,
directshowsource 和avisource可以直接加载,不用分离视频和音频了,avs语法也显得简
练起来,因此目前的avs开始广泛的普及了。不过我先提到,真正的掌握和利用avs,可能
还是要用到其分离合成的步骤,呵呵!我下面是从实用性角度(比如我们最常接触的几种
rmvb的压制)谈谈。

directshowsource ,avisource是avs中最强大的2个加载语法,版本越高越强大!一般dir
ectshowsource 如同其名,只要安装directshowsource 的插件,也就是说,可以用media
player来播放,那么就可以用Directshowsource 来加载。如,安装了ac3filter7.0,就可
以直接用Directshowsource来加载ac3音频了,安装了mpge2插件,Directshowsource就可
以加载bin(SVCD)和vob(DVD)文件了。牛过的mimi8(阿飞)的解码插件包,基本是基于di
rectshowsource的插件,配合avs,很大程度上方便了directshowsource的运用!

而avisource和wavescource,ac3scource还有mpascource实际是一个性质的东西,他们可
以加载不能Directshowsource的源,但是就比较娇贵了,需要相应的滤镜dll文件了,前2
者是avs内置的滤镜!

一般来说,对于avi文件先用avisource来加载,如wm9和vp6格式的!使用avisource加载的
话,源和其它插件脱离关系!如就不能关联ffdshow了!而directshowsource仍旧可以关联
ffdshow!所以,我一般推荐DVDRIP的avi文件是用directshowsource来加载,而一些亮度
滤镜、画面大小、水印之类的可以通过ffdshow来加载!

关于directshowsource和avisource的其它东西,可以再看看avisynths自带的说明

avisource("("d:\test\sample.avi",false)

false表示禁止音频

AVISource("cap.avi",false,"RGB32")

RGB32是一种色彩处理模式,默认是YV12,处理速度最快

一般,这个在常规使用AVISource中不必使用!而很多人在刚接触avs时,就盲目套用一些
avs,这样就走上了不归路了!

转换成RGB32,一般字幕社用的多些,因为他们喜欢加一些图片的logo等,而只有RGB32支
持透明处理,但RGB32模式处理速度较慢!

directshowsource("d:\test\sample.rm",fps=24)

举这个例子来说明directshowsource吧,对于rm和asf格式的,需要定义帧率才能读取。如
里面的fps=24

DirectShowSource(string filename, int fps, bool "seek")

int fps说明这个是整数型的帧率,但是如果我上例子改成fps=23.976仍旧可以读取

处理定义帧率的源,需要注意不同步

又如双语VCD只压制一个声道,avs语法可以这么写

video=DirectShowSource("F:\mpge\test.dat)

return GetChannel(video,2)

directshowsource 和avisource直接加载的缺点是有可能导致不同步。如5个声道以上的v
ob文件,双语的avi多CD合成压制时(mp3音轨的那种情况),目前的版本结合ACM插件基本解
决了不同步的问题。


--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.36.48]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店