![]() |
||
Advance Member
![]() ![]() 加入日期: Jul 2001 您的住址: 雲の向こう、約束の場所
文章: 496
|
抱歉,一直重複PO文..
最近學校的網路真不穩定.... ![]()
__________________
雖然我已被地獄的業障之火所玷汙 我的心還是憧憬天堂~ 此文章於 2003-05-28 07:26 PM 被 silentlain 編輯. |
|||||||
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Oct 2002 您的住址: El's room
文章: 1,046
|
引用:
呃,您大致上的意思是對的,不過更精細地講,不完全是這樣。 DVD 有兩種儲存的畫面結構,一種是 Interlaced,一種是 Progressive,由 progressive_frame 這個旗標指示。 Interlaced 和 Progressive 只是表示這個畫面當初在取樣的時候,是以 Interlaced 的方式取樣,還是以 Progressive 的方式取樣。是將畫面視為一個完整的 Frame,以 Progressive 取樣,chroma = (c1+c2)/2,取樣成 progressive chroma,還是將畫面視為是由奇偶兩個 Field 所組成,以 Interlaced 取樣,chroma = 0.75*c1 + 0.25*c3,取樣為 interlaced chroma。 所以這只是一個取樣的方式,和畫面上是否真的有交錯的瑕疵無關,和這個畫面是否真的是一個交錯的畫面無關。笨蛋的 encoder,即使是畫面明明都無交錯,每一張都是 Progressive Frame,encoder 還是可以以 Interlaced 的方式取樣。 這時候 DVD2AVI 的 Frame Type 欄位會顯示這是 Interlaced Frame,但是畫面上明明沒有交錯。 DVD2AVI 的 Frame Type 欄位,是根據 progressive_frame 這個旗標來顯示,所以它顯示的是這個 Frame 的原始取樣方式。 不知道這個道理的人,就會說 DVD2AVI 的 Frame Type 欄位顯示是錯的,明明畫面沒有交錯,但是 DVD2AVI 會顯示 Interlaced,所以許多人說 DVD2AVI 的顯示是錯的,不要相信。 例如你可以看 Doom9 上的討論區,這種錯誤的說法一堆,甚至連寫置頂精華文章的大大都這麼說。 其實這是因為他們不懂真正的道理,DVD2AVI 並沒有顯示錯誤,Frame Type 顯示的是取樣方式,和畫面是否真的有交錯無關。DVD2AVI 從來沒有去分析畫面,去比較畫面的奇偶差異,判斷這個畫面是否有交錯。它只是很簡單地讀取 MPEG-2 stream 裡面的 progressive_frame 旗標,按照旗標顯示,指示這個 Frame 當初壓縮時是用哪種取樣方式,解壓縮時要用哪種 upsampling 方法才會正確。 分析畫面、比較畫面奇偶、判斷是否交錯,那是 IVTC plugin 做的事情。 呃,一時失控,寫了一堆無關的 ^^; 所以 引用:
MPEG2Dec3 輸出 YV12 的時候,並沒有 chroma upsampling 錯誤,因為它根本還沒做 upsampling(YV12 -> YUY2),但是遇到 Hybird 訊源(混合 Progressive/Interlaced Frame 的訊源),如果不在 MPEG-2 解碼的時候做 upsampling,等到解碼輸出 YV12 後再做 upsampling,會失去可以指示怎麼做 upsampling 的旗標 progressive_frame,以致於我們不知道哪幾個 Frame 是 Progressive 的,哪幾個 Frame 是 Interlaced 的,這樣就無法做正確的 upsampling。 所以 引用:
如果當 source 「全部」都是 Interlaced,例如 RC3 的「校園漫畫大王」DVD,OP 是 30p,30fps Progressive Frame,張張都無交錯,但是 DVD 壓的時候,張張都是 Interlaced Frame(取樣時以 Interlaced 方式取樣)。 這樣用 MPEG2Dec3 輸出 YV12,也可以得到正確的結果,只要我們在 MPEG2Dec3 後面加 LoadPlugin("c:\Program Files\AviSynth 2.5\plugins\MPEG2Dec3.dll") MPEG2Source("sample.d2v") ConvertToYUY2(interlaced=true) #<-- 加上這一行 這樣結果就會正確,因為我們知道每一張 Frame 都是 Interlaced 的,全部都用 Interlaced 的方式轉成 YUY2,問題就解決了。 但是如果遇到部分是 Progressive,部分是 Interlaced 的訊源(Hybird 訊源),就無法用一種 upsampling 方法通吃所有的情況,這時候只好 |
|||||
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Oct 2002 您的住址: El's room
文章: 1,046
|
1. 如果訊源可以 IVTC,藉助 Decomb 等 IVTC 的 plugin,還原回 Progressive 畫面,這樣畫面還是會正確,例如下面五張畫面
no.1 2 3 4 5 奇 A B B C D 偶 A B C D D 3 和 4 交錯,Interlaced Frame,其他 1, 2, 5 無交錯,Progressive Frame。 IVTC 後可得 1 2 3 4 5 A B C C D A B C C D 刪掉重複的 3 或 4 1 2 3 4 A B C D A B C D 可得四張 Progressive 的畫面。 這時將 3 當成 progressive chroma 做 upsampling 其實還是不太正確,不過差異小,看不太出來。 另外結果會接近正確的原因是因為以上都是在 YV12 工作,如果是錯誤 upsampling 後在 YUY2 上做 IVTC,IVTC 結果是 YUY2,則結果還是錯的,這也就是 jackei 大說的,錯誤 upsampling 之後則無可能正確 IVTC。 至於原因,我不知道該怎麼解釋比較好懂 ^^; 需要自行思考理解。 如果畫面壓縮時沒有那麼剛好像上面那樣,例如 no.1 2 3 4 5 奇 A B B C D 偶 A B C D D 1, 2, 5 無交錯,但仍然是以 Interlaced 取樣,或是 3, 4 交錯,但仍然是以 Progressive 取樣, 則這樣仍然是無法利用 Decomb 等 IVTC plugin 還原回正確的畫面。 另外 Decomb 如果無法 IVTC 的部分,需要做 deinterlace 的部分,則 chroma 也還是錯的。 2. 因為有這麼多的限制,所以還是用 MPEG2Dec 輸出 YUY2,最為穩當。 引用:
是的。 MPEG2Dec 解碼速度較快,但是 upsampling 的品質 MPEG-2 VIDEO VFAPI Plug-In 較好,所以我都用 MPEG-2 VIDEO VFAPI Plug-In 解碼。 MPEG-2 VIDEO VFAPI Plug-In 是一個 VFAPI 的 plugin,本來只能輸出 RGB24,但是有密技。 將 m2v.vfp 改名成 m2v.aui,丟到 AviUtl 的資料夾底下,開啟 AviUtl,你就會發現 AviUtl 多了一個 m2v 的 input plugin,而這個 m2v.aui 輸出的不再是 RGB24,而是 YUY2 ![]() 然後利用 LoadAviUtlInputPlugin,就可以在 Avisynth 裡面調用這個 m2v 來解碼。 我也不喜歡用 Decomb 做 IVTC。 TMPGEnc 的手動指定 pattern 做 IVTC,如果熟練的話,速度也很快。 24fps "10100" or "10010" or "1010100100" or "1001001010" 24fps -> 30fps "1012010100" "2" copy frame 30fps "1010101010" 48fps "1o011e1o011e1o1e" -> 24fps "00101o001e01e" or "1o001e00101o0" o: 奇數解除(適應) e: 偶數解除(適應) n: none d: 二重化 mo: 奇數解除(anime 適應) ao: 奇數解除(anime 適應2) me: 偶數解除(anime 適應) ae: 偶數解除(anime 適應2) 60fps "1o1e1o1e1o1e1o1e1o1e" 引用:
ConvertToYV12 是 Avisynth 2.5 內建的 filter,和 MPEG2Dec 無關。 不客氣,如有錯誤煩請指正 ^^; |
||
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Jul 2001 您的住址: 雲の向こう、約束の場所
文章: 496
|
引用:
抱歉,這篇是未完成的........(為什麼會出現我也很納悶)......
__________________
雖然我已被地獄的業障之火所玷汙 我的心還是憧憬天堂~ 此文章於 2003-06-03 12:33 AM 被 silentlain 編輯. |
|
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Jul 2001 您的住址: 雲の向こう、約束の場所
文章: 496
|
很抱歉這麼晚才回文,之前曾嘗試多次回文但都失敗了(學校網路好爛.....)
而且用"引言回覆"又一定會失敗,真不知道為什麼...... 您第一篇的意思是說,如果source為全progessive 24張(並且以progessive型態儲存)(例如宮崎駿系列,張張film率高達99.多%),則在DVD2AVI中直接force film輸出,那麼便可以用全程YV12的方法來做,而且沒有錯誤(不需要chroma upsampling,所以不會錯,而且又可以減少色彩轉換的損失).... 如果source是progessive 30張,但用interlace儲存(如普社出的"星之聲"),此時只要 加上ConvertToYUY2(interlaced=true),便可以得到正確的輸出,請問是這樣的嗎?? --------------------------------------------------------------------- 關於您所回覆的第二篇 那麼關於source為全progessive 24張,但在儲存時卻interlace/progessive都有的(就是那些DVD2AVI裡測出filmxx%的那種,xx不大於95),就會發生您所說說的1.的情形是嗎?? 如果在DVD encoder端的IVTC正確(interlace用interlace存,progessive用progessive存)(如您的1.前半部),那麼可以經過decomb得到接近正確的畫面(1/4的畫面還是有錯..?) 但如果DVD encoder端的IVTC不正確(如您的1.後半部),那麼即使用了decomb,也會因為不正確的chroma upsampling而得到錯誤的畫面,是這樣的嗎? 關於2."AviUtl和avisynth的友情大合體(啊,不是,那是Figure 17...)"的部份,可以請您再說的更明確一點嗎?? 如果想要使用decomb的IVTC再加上AviUtl的YUY2輸出(因為TMPG的手動我不熟,而自動我覺得效果不盡理想),那麼要如何做呢?? 感謝您的回文,謝謝~~
__________________
雖然我已被地獄的業障之火所玷汙 我的心還是憧憬天堂~ |
![]() |
![]() |
Master Member
![]() ![]() ![]() ![]() 加入日期: Nov 2001
文章: 1,563
|
引用:
你可以下載TMPGEnc version beta 12 中文泰山版試試看 http://hw-driver.nctu.edu.tw/pub/sl...c%20version.zip 其實這版自動IVTC我覺得比新版TMPEGNC準... 經我多次實驗確實如此!!!因為演算法不同!!! 自動後幾乎我不用檢查失誤率也極低...你可以試試看^^b 我現在都用這版自動IVTC...相當好用!強烈推薦 我推薦的手動+自動 IVTC 方法是:(為偷懶剪貼 jackei 大的教學解釋:P) 首先你要先確定你是把 DVD2AVI 的 Field Operation 設成 None 匯出 *.d2v 專案檔!沒問題的話請看下面步驟: 1.執行新版PLUS 版 TMPEGEnc,從畫面下半部的 Video Source 載入 *.d2v 專案檔,按右手邊的 Load 載入 unlock.mcf 範本 2..為了確定 Field order 是否正確,請先選取 Top field first(field A)或是 Bottom field first(field B),然後雙擊點選下頭的 Deinterlace(None)在所出現的視窗下方選取欄位,選取 Even-Odd field (filed),再按住右邊的方向鍵使影片運動,這時候看看影片有沒有倒退走,沒有的話就對了!會倒退的話就選擇 其他 Field order 選項再重複檢查,確定沒問題後記得要按 Canel 退出,注意別啟用 Deinterlace 功能!判斷好是 field A 或 field B 以後關閉新版TMPEGNC 3.打開 TMPGEnc version beta 12 中文泰山版載入 *.d2v 專案檔,請先依剛才的判斷選取 Top field first(field A)或是 Bottom field first(field B)之後,雙擊點選 Advanced 下的 24fps conversion,進入後按 Auto-setting 準備開始,"以 3:2 pull-down 順序為準則" 先跑一次.跑完之後, 滑鼠點大畫面, 按左右鍵 "一格格" 檢視畫面 (偷懶會遭報應)上面的小畫面會跳著放有 "紅框" 的 "補完畫面".如果 "全部的大畫面" 都對了, 恭喜, 這是單一順序 (很少有這麼好康的),不行的話, 接著跑 "以去水平橫紋為準則"(資料都有了, 這次會很快)會發現大部分的畫面都補好了, 可能有少數幾張還是交錯的,根據經驗通常從頭到尾只有個數張錯,而且是不易發覺的地方(若還是有一堆交錯畫面? "掃描線優先順序" 設錯了, 或者根本不是 24fps),接著你再用這裡下面的去交錯功能,我個人建議選最後一個(不喜歡的自己選別的測試),然後再跑一次,但一樣因為是自動可能還是有漏的! 4. 少數交錯畫面如何處理? 挑鄰近的完整畫面取代它, 滑鼠點選可增減畫面. 注意!! 取代的原則是保持畫面的流暢, 左右鍵移動看看感覺如何. 5. 有水平橫紋跟交錯的畫面出現怎麼辦?按滑鼠右鍵出現選單, 第6個選項可個別指定單張畫面所採用的去交錯方式.這方法可以找到同時去橫紋跟交錯的選項,但你如果很懶的話是有方法可以用全自動方式幫忙去橫紋,不過如果畫面還有交錯的話這方法只能去橫紋但交錯依然存在,實在很在意交錯的話你只好手動一起解決橫紋問題囉 全自動去橫紋不模糊方法(不想用就直接跳第10步驟): 6. 儲存剛剛用 TMPGEnc version beta 12 中文泰山版IVTC後的專案檔:[File]-->[Save Project]存出 *.tpr 專案檔 7.執行新版PLUS 版 TMPEGEnc,按右手邊的 Load 載入 unlock.mcf 範本,再打開剛剛IVTC後的*.tpr 專案檔,此時一樣要注意確定 Field order 是否正確,反正剛剛選哪個這裡選一樣就行不用再試一次 8.注意看Advanced設定中的IVTC選項後面變成(用戶自訂),你可以點進去確認一下,之前用泰山版挑過的紅色畫面已經在上面了,注意別再跑一次阿! 9.然後雙擊點選下頭的 Deinterlace(None)在所出 現的視窗下方選取欄位,選取"加倍(適應性)去交錯",再按住右邊的方向鍵使影片運動,確定沒問題後啟用 Deinterlace 功能!(這選項是對全部畫面"加倍(適應性)去交錯"所以全片的橫紋一條都不剩的被消除了...真是一勞永逸阿:P) 10.儲存專案檔:[File]-->[Save Project]存出 *.tpr 專案檔,接著就可以用 VFAPI 將 *.tpr 檔快速轉換為 *.avi 給其他軟體解決了!
__________________
免裝Codec就可輕鬆將各種格式(含RMVB,AVI)轉檔成DVD,AVI,MP4,H264,PSP/iPod可看的免安裝軟體(可加字幕,簡單) 軟體永久下載點,使用上的常見問題&解答,官方討論區 《圖文解說》用全世界80%影音DVD之母 Scenarist 為市售DVD加中文字幕(保留原始選單,章節,多重PGC,且能相容WinDVD) 2006/08/01 修正更新教學下載!不用VobBlanker也能保留多重 PGC,打造最高相容性加中文字幕 DVD,連WinDVD也可以拉動時間條! 新增快速 AVI 轉 DVD(字幕非內嵌,可開可關!)的方法,無字幕 DVD 外掛中文字幕檔觀看,調時間軸的方法 《發現》史上最強! 比 WinAVI 速度更快品質更好的轉檔軟體現身!(可加字幕,批次轉檔) 附圖比較!(追加原始檔圖片),MME轉RMVB不會無聲不能開檔的超簡單方法,MME轉RMVB不會影音不同步的方法,MME加字幕轉檔的方法 《VirtualDubMod + AviSynth 簡易教學》DVD 轉 XviD 公認最簡單,轉檔速度最快,品質最好,挑片率0的方法! (追加"教學用 AviSynth plugin 永久連結下載提供",和"疑難雜症基本解決方法"以及"AVI 內嵌字幕的方法") |
|
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Jul 2001 您的住址: 雲の向こう、約束の場所
文章: 496
|
[QUOTE]Originally posted by snic
~~恕刪~~ 感謝SNIC兄的回應 ![]() 您的方法我之前就有試過(在您第一次PO這個方法時) 不過我現在的重點還是在於AviUtl和avisynth的友情大合體........(XD) 因為最近想TEST新的decomb 5.0,所以還是得用avisynth才行.... anyway,多謝您的回應...... 如果方便的話,可以麻煩請shade兄回應一下嗎??
__________________
雖然我已被地獄的業障之火所玷汙 我的心還是憧憬天堂~ |
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Oct 2002 您的住址: El's room
文章: 1,046
|
引用:
抱歉最近很忙碌,以下是簡短的說明: 您上面所有問題的回答都是「是的,沒錯」 ![]() 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\"。 |
|
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Oct 2002 您的住址: El's room
文章: 1,046
|
OMAKE:
如果我想用全程 YUY2,但是又不喜歡 Avisynth 的 IVTC,AviUtl 又不能一張一張選,TMPGEnc 又是 RGB24,要怎麼讓 Avisynth 能使用 TMPGEnc 的 IVTC 呢? Avisynth 有一個 TPRIVTC.dll 的 plugin,這個 plugin 可以讀取做好 IVTC 的 TMPGEnc 專案檔 .tpr,使用裡面選取的 IVTC 設定,直接在 Avisynth 裡面輸出同樣的 IVTC 結果。 也就是說先如往常一樣用 TMPGEnc 做好 IVTC,然後用 Avisynth 讀取這個做好 IVTC 的專案檔 MPEG2VIDEO("sample.vob") LoadPlugin("c:\Program Files\AviSynth 2.5\plugins\TPRIVTC.dll") # 將 frame 用 DoubleWeave 展開,變成 60fps,如同 TMPGEnc 的 IVTC 視窗的每個小畫面,然後送進 TPRIVTC,依照 .tpr 的設定選取指定的正確畫面(TMPGEnc 中用紅框選取的畫面)輸出 DoubleWeave().TPRIVTC("sample.tpr") 這樣就可以用 TMPGEnc 做 IVTC,而且全程 YUY2 ![]() 不過 TPRIVTC.dll 有限制 1. 不支援 .tpr 中指定的 copy frame ![]() 2. 不支援 .tpr 中指定的自適應去交錯法(adaptive deinterlace) 不是所有的素材都可以完美地 IVTC,有時候使用 deinterlace 是必要的。 然而 TPRIVTC 不支援 TMPGEnc 的自適應去交錯法,只能用 odd/even/double,效果不好。 所以我們後面可以再接 Avisynth 的去交錯 filter 做去交錯。 但是用 Avisynth 做去交錯,例如用 Decomb,每張 frame 都要判斷,很花時間,而且有時候會誤判,將輕微地抖動當成 interlace,也對畫面做去交錯,影響清晰度,不完美。 所以如果所做影片很短,我們在 TMPGEnc 中做 IVTC 時已經知道哪幾個 frame 有交錯需要去交錯,可以在 Avisynth 中做"單張去交錯",指定選取範圍,所使用的 filter 只對這些畫面做處理。 這樣不但可以更加精確,只對需要處理的畫面做處理,而且處理速度亦會加快。 首先要寫一個選擇範圍,加上 filter 的 function 代碼:
function FilterRange(clip "clip", int "start", int "end", string "filter") { c1 = start < 2 ? clip.trim(0, -1) : clip.trim(0, start - 1) c2 = Eval("clip.trim(start, end)." + filter) c3 = clip.trim(end + 1, 0) c = start == 0 ? c2 : c1 + c2 c = end == 0 ? c : c + c3 return c } 這個 function 的意思是將 clip 分成三段,對中間要處理的畫面做完 filter 之後,再把頭尾接起來。 寫好之後存成 function.avs 保留起來。 在你目前要處理的 avs 開頭加上 Import("c:\Program Files\AviSynth 2.5\avs\function.avs") 然後就可以在這個 avs 中使用我們寫好的 FilterRange 函式,例如 FilterRange(1163, 1164, "AntiComb(48, 34)") # 對 1163, 1164 frame 單獨使用 AntiComb 這個 filter 像這種有用的函式很多,可以一一加入 function.avs,以後在 avs 檔的開頭 Import,就可以直接在那個 avs 檔中使用這些函式,不用每次都要重寫一次。 例如前面說的 VFAPI 載入函式,也可以通通寫成一個 VFAPI.avs,使用的時候 Import("c:\Program Files\AviSynth 2.5\avs\VFAPI.avs") 然後直接用就好了。 VFAPI.avs 中可能的內容為 代碼:
####################### # VFAPI Plugin # # Import("vfapi.avs") # ####################### ##################################################### # 下面請根據你使用的環境,置換檔案所在的正確路徑 # ##################################################### # AviUtl global aup_dir = "e:\WinApps\AviUtl" # TMPGEnc global tpr_dir = "e:\WinApps\TMPGEnc" # DVD2AVI global d2v_dir = "e:\WinApps\DVD2AVI" # MPEG2 VIDEO VFAPI Plugin global m2v_dir = "e:\WinApps\TMPGEnc" # QuickTime 4.0 VFPAPI Plugin global mov_dir = "e:\WinApps\TMPGEnc" # CSTR File Reader global str_dir = "e:\WinApps\TMPGEnc" ######################################## # VFAPISource function # # # # AviUtl (.aup) # # VFAPISource("AUP","path\foo.aup") # # DVD2AVI # # VFAPISource("D2V","path\foo.d2v") # # TMPGEnc # # VFAPISource("TPR","path\foo.tpr") # # MPEG2 VIDEO VFAPI Plugin # # VFAPISource("M2V","path\foo.vob") # # QuickTime 4.0 VFPAPI Plugin # # VFAPISource("MOV","path\foo.mov") # # CSTR File Reader # # VFAPISource("CSTR","path\foo.cstr") # ######################################## function VFAPISource(string "vf", string "fn") { default(vf,"D2V") vf = (vf=="D2V") ? d2v_dir + "\DVD2AVI.vfp" : \ (vf=="AUP") ? aup_dir + "\aviutl.vfp" : \ (vf=="TPR") ? tpr_dir + "\TMPGEnc.vfp" : \ (vf=="M2V") ? m2v_dir + "\m2v.vfp" : \ (vf=="MOV") ? mov_dir + "\QTReader.vfp" : \ (vf=="CSTR") ? str_dir + "\CSTR.VFP" : 0 LoadVFAPIPlugin(vf, "_VFAPISource") FlipVertical(_VFAPISource(fn)) } 使用的時候,例如 VFAPISource("AUP","sample.aup") 這樣就能在 Avisynth 中開啟 AviUtl 的專案檔 .aup。 諸如此類的範例 avs,日本很多 ![]() |
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Oct 2002 您的住址: El's room
文章: 1,046
|
OMAKE2:
假設我不喜歡 AntiComb 或 Decomb 的去交錯。 假設我比較喜歡 AviUtl 的 filter "交錯解除2",deint2.auf。 它的自適應去交錯,畫面比 blend 銳利。 或者是我想在 Avisynth 裡面用 AviUtl 的 wavelet3DNR2,時間軸小波轉換去雜訊的 filter,wavelet3DNR2.auf。 要怎麼做呢? 前面介紹的 warpsharp 內建了一個函式叫做 LoadAviUtlFilterPlugin,可以載入 AviUtl 的 filter,直接在 Avisynth 中使用。 例如我想在 Avisynth 中用 AviUtl 的 Lanczos3 Resize filter,lanczos3.auf 做 resize。 執行 ShowAUFInfo.exe lanczos3.auf >> aufilters.avs 就會印出 lanczos3 的函式 代碼:
############################################################# # This file provides convenient Avisynth interfaces to # # various AviUtl plugins. Load it in your script with: # # # # Import("aufilters.avs") # ############################################################# ######################################################## # Change AviUtl_plugin_directory below to point to # # the directory containing your AviUtl plugins. # ######################################################## # 下面兩行置換成你使用的路徑 global AviUtl_plugin_directory = "c:\Program Files\ken\AviUtl\98d\" LoadPlugin("c:\Program Files\AviSynth2\plugins\warpsharp.dll") #################################### # Lanczos 3-lobed Resize #################################### # i0 : X default(320) range(32,856) # i1 : Y default(240) range(32,576) function AU_lanczos3Resize( \ clip clip, \ int "i0", \ int "i1" \) { LoadAviUtlFilterPlugin(AviUtl_plugin_directory+"lanczos3.auf", "_AU_lanczos3Resize") return clip._AU_lanczos3Resize( \ default(i0,320), \ default(i1,240) \) } 使用的時候 # LoadAviUtlPlugin Lanczos3 Resize Import("c:\Program Files\AviSynth2\avs\aufilters.avs") AU_lanczos3Resize(640,480) warpsharp.dll 舊版的時候 LoadAviUtlPlugin 是獨立一個 LoadAviUtlPlugin.dll,更舊的版本使用前要先加上 ConvertYUY2ToAviUtlYC() AU_LANCZOS3(640,480) ConvertAviUtlYCToYUY2() 把 YUY2 轉成 AviUtl 的 48bit YUV 格式,現在好像不用了,程式自動轉換。 另外 loadaui.dll 好像也不見了,變成 warpsharp.dll 內建,function name 好像是 LoadAviUtlInputPlugin。 我很久沒使用了,最新的用法您需要自己研究看看,可以上日本的網站找資料 ![]() 又寫得太長,好像一點也不簡短 ^^; |
![]() |
![]() |