引用:
Originally posted by silentlain
[QUOTE]Originally posted by snic
~~恕刪~~
感謝SNIC兄的回應
您的方法我之前就有試過(在您第一次PO這個方法時)
不過我現在的重點還是在於AviUtl和avisynth的友情大合體........(XD)
因為最近想TEST新的decomb 5.0,所以還是得用avisynth才行....
anyway,多謝您的回應......
如果方便的話,可以麻煩請shade兄回應一下嗎??
|
抱歉最近很忙碌,以下是簡短的說明:
您上面所有問題的回答都是「是的,沒錯」
Avisynth 可以調用 VFAPI 和 AviUtl 的 plugin 在 Avisynth 內使用,
例如我們想在 Avisynth 裡面開啟 .d2v 檔或 .tpr 檔,可以這樣寫:
# 載入 TMPGEnc.vfp,將這個 function 命名為 "TMPGSource"
LoadVFAPIPlugin("c:\Program Files\Pegasys Inc\TMPGEnc Plus 2.5\TMPGEnc.vfp", "TMPGSource")
TMPGSource("sample.d2v")
.d2v 檔當然也可以用 DVD2AVI 開啟
LoadVFAPIPlugin("c:\Program Files\jackei\DVD2AVI\DVD2AVI.vfp", "D2VSource")
D2VSource("sample.d2v")
VFAPI 內部傳的資料是 RGB24,Avisynth 讀進來,因為放置的問題,畫面會上下顛倒,後面要接
FlipVertical()
畫面就會恢復正常。
關於畫面為何為上下顛倒的問題,請參閱 MSDN,此處不再詳述
http://www.microsoft.com/whdc/hwdev...p/biheight.mspx
利用 LoadVFAPIPlugin,只要是 VFAPI 能開的檔,Avisynth 也都能開啟。
例如日本的 marumo 神樣有寫一個 MPEG-2 VIDEO VFAPI Plug-In
http://www.marumo.ne.jp/
畫質比 DVD2AVI 還要好,也可以用同樣的方法在 Avisynth 裡面直接調用
LoadVFAPIPlugin("c:\Program Files\Pegasys Inc\TMPGEnc Plus 2.5\m2v.vfp", "MPEG2VIDEO")
MPEG2VIDEO("sample.vob")
這樣 m2v 解出來的資料會是 RGB24(因為 VFAPI 一律以 RGB24 傳資料)。
密技:
但是如果有看過 m2v 的 source,你會發現 m2v 不只是一個 VFAPI 的 plugin,同時它也是一個 AviUtl 的 input plugin。
所以你只要將 m2v.vfp,改名成為 m2v.aui,丟到 AviUtl 的資料夾下,開啟 AviUtl,你就會發現 AviUtl 多了一個 input plugin,而這個 m2v.aui 輸出的就是 AviUtl 內部處理所使用的 YUY2 格式了。
這樣如果你只用 AviUtl 做處理,就可以保持在 YUV 空間下工作,減少色空間轉換的損失。
但是 AviUtl 很吃記憶體(AviUtl 內部處理,其實不是用 YUY2,而是獨自的格式,每個向量 16bit,YUV 總共 48bit,精度嚇死人的高 O_O;),處理速度緩慢,如果只想用 m2v 解 MPEG,其他的處理都用 Avisynth 來做,又要 m2v 能輸出 YUY2,不像上面用 VFAPI 讀取只能為 RGB24,這要怎麼做呢?
日本有人寫了一個大雜燴的 plugin,叫做 warpsharp,warpsharp 有一堆數不清的功能,通通放在一個 .dll 裡面
http://www.avisynth.org/~warpenterprises/
最新版(YV12 的版本)在這裡下載
http://www.geocities.co.jp/SiliconValley-PaloAlto/2382/
warpsharp 的包包裡面還有附兩個 plugin,一個叫做 loadaui.dll,loadaui.dll 是一個 Avisynth 2.0.x 版的 plugin,顧名思義,是用來 load .aui 檔的 plugin。
用這個 plugin 的 LoadAviUtlInputPlugin 功能,就可載入所有 AviUtl 的 Input Plugin,當然包括 m2v.aui,這樣 Avisynth 就可以調用 m2v.aui,直接在 Avisynth 裡面輸出 YUY2 了。
但是問題又來了,這個 loadaui.dll 是 2.0.x 版的 plugin,不能在現在的 2.5.x 版的 Avisynth 裡面使用,要怎麼辦呢?
warpsharp 的包包裡面另外附的一個 plugin,叫做 LoadPluginEx.dll,這個 plugin 提供讓 2.5.x 版的 Avisynth 可以載入 2.0.x 版的 plugin 的功能。
載入這個 plugin 之後,後面再使用 LoadPlugin 語法,通通會變成由 LoadPluginEx 來處理,這樣就可以在新版的 Avisynth 中,開啟舊版的 plugin 了。
LoadPlugin("c:\Program Files\AviSynth2\plugins\LoadPluginEx.dll")
LoadPlugin("c:\Program Files\AviSynth2\plugins\loadaui.dll")
LoadAviUtlInputPlugin("c:\Program Files\ken\AviUtl\98d\m2v.aui", "MPEG2VIDEO")
MPEG2VIDEO("sample.vob")
這時輸出是 YUY2。
要注意的是,LoadPluginEx.dll 這個檔會引起 Avisynth 在關閉檔案的時候 crash,所以不能把它放在 Avisynth 2.5.x 版預設會自動載入的路徑底下。
這個自動載入的路徑的設定值在 registry 中,可以修改,預設是 "c:\Program Files\AviSynth 2.5\plugins\",你只要將 LoadPluginEx.dll、loadaui.dll 等舊版的 plugin 放到別的路徑下,這樣就不會引起 Avisynth crash 了。
上面的例子中我是放在舊版的 Avisynth 建立的資料夾底下 "c:\Program Files\AviSynth2\plugins\"。