查看單個文章
舊 2006-02-04, 06:10 AM   #5 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

avs講解及其在rmvb壓制中的合理運用

AviSynth簡單來說就是個合成平台!在媒體文件和壓縮軟體之間擔任"橋樑"的角色。這座橋樑不是簡單的獨木橋、而是有欄杆、有台階(比喻其提供的大量慮鏡)。因此比較靈活!如對於壓制real格式來說,源媒體文件是vob、d2v(DVD處理程序中的中間文件)、ac3、mp3、avi、DAT/mpge等,而應用程式是各種real壓縮軟體如Helix real producer、BatchRealProducer和EasyRealProducer等,它們都支持avs的匯入。推薦使用EasyRealProducer,目前版本1.83。

AviSynth首先要編寫建立一個包含特定指令的文本,稱之為"指令碼"(文件後面名為avs),這些指令指定要執行處理的媒體文件和濾鏡!

AviSynth的平台和相關濾鏡更新比較快,功能不斷增加,編輯avs指令碼也更簡單。在射手網可以下載到這個平台軟體,熟悉影視論壇的可以在論壇的技術板塊得到昇級訊息。至於濾鏡可以到得到http://www.avisynth.org/warpenterprises/下載
至於doom9論壇,大家知道有這麼個烏合的巢穴就可以了!
有些濾鏡已有更新。

上面簡單介紹了AviSynth的一些基本概念作為引子,在正文開始前,我想首先交待很重要的一點:avs指令碼及其各種濾鏡主要適用於大碼率媒體文件的處理,也即我們經常接觸的DVDRIP/TVRIP avi的製作最佳化。而對於高度壓縮格式的rmvb來說,我們利用的avs濾鏡應該持慎重態度(如亮慮鏡、字幕慮鏡、畫面裁減縮放等幾個)!也就是說avs在rmvb壓制方面,我們需要的是利用avs靈活的「中間人」的角色(看下面的例子)!而不是為了av s而去壓制!特別是最一般的DVDRIP-rmvb壓制中。我看到好多朋友初步接觸rmvb壓制,就在用avs壓制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也就45min左右的,可以直接用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).TextSub("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.idx")
R=directshowSource("e:\R.MP3")#mp3的壓制問題較多,所以有些情況下用MPASOURCE載入
L=directshowSource("e:\L.MP3")
stereo = MergeChannels(R,L)
return AudioDub(video, stereo)

以上都是avi,都可以自動關聯ffdshow,所以亮度可以在ffdshow裡設定!但請同時去掉ffdshow的字幕和avisynth功能

4,增加黑邊同時利用ssa字幕控制字幕顯示
a=aviSource("e:\avs\a.avi").AddBorders(0,40,0,40).Levels(0,1.2,255,0,255).textsub("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).textsub("e:\avs\cd2.ssa")
c=aviSource("e:\avs\c.avi").AddBorders(0,40,0,40).Levels(0,1.2,255,0,255).textsub("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,可能還是要用到其分離合成的步驟,哈哈!我下面是從實用性角度(比如我們最常接觸的幾種rm vb的壓制)談談。

directshowsource ,avisource是avs中最強大的2個載入語法,版本越高越強大!一般directshowsource 如同其名,只要安裝directshowsource 的插件,也就是說,可以用mediaplayer來播放,那麼就可以用Directshowsource 來載入。如,安裝了ac3filter7.0,就可以直接用Directshowsource來載入ac3音瀕了,安裝了mpge2插件,Directshowsource就可以載入bin(SVCD)和vob(DVD)文件了。牛過的mimi8(阿飛) 的解碼插件包,基本是關於directshowsource的插件,配合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個聲道以上的vob文件,雙語的avi多CD合成壓制時(mp3音軌的那種情況),目前的版本結合ACM插件基本解決了不同步的問題。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次