Silky |
2003-12-29 06:45 |
引用 最初由 skywalker 发布 第一个片段是使用的gundam seed的第一个op 使用的avs sript是: import("D:\aviutil\aviutilfilters.avs") mpeg2source("seed.d2v",idct=7) converttoyuy2() ConvertYUY2ToAviUtlYC() AU_wavelet3DNR2(2,0,20,0,20,20,20,20,20,20,5,0,0,0,0,10,false,true,true,false,false,false,false,false,false,false,false,false,true,true,false,false) ConvertAviUtlYCToYUY2() converttoyv12() warpsharp(bump=100,depth=96,blur=3,cubic=-0.6) undot()
抱歉和 skywalker 兄討論一個題外話,這個 script 裡面用到 Wavelet3DNR2,skywalker 兄有開啟橫 512 以上時 4:1:1->4:2:2 補間的選項,這個選項開啟之後,如果橫軸分辨率達到 512 以上,會做 4:1:1->4:2:2 補間,這樣會造成色彩的部分有很大的瑕疵。 您找一個紅色的球形物體來看,會發現原本平滑的紅色邊線會出現垂直一條一條,不平整的紅色細線,同時色塊的現象會更明顯。 如果不勾選這個選項,Wavelet3DNR2 會用 4:4:4->4:2:2,平均兩個 chroma sample,情況會好很多,不過對色彩部分的改變還是很大,尤其是紅色的部分,非常容易看出來。 您可以找有紅色圓形物體的影片做一個實驗,相信只要看過一次,注意到這個現象,您就會不想用 Wavelet3DNR2 了 :p 但是 Wavelet3DNR2 降噪的功能很強,不用好可惜,我想可以用下面的方法解決,就是只用 Wavelet 處理 Luma 的部分,Chroma 不要處理,或者交給其他 filter 處理。 wavelet=source.Greyscale() # <- 把 source 用 Greyscale() 處理,只留下 Y-channel wavelet=wavelet.ConvertYUY2ToAviUtlYC() wavelet=wavelet.AU_WAVELET3DNR2(2,0,10,10,0,0,0,0,0,0,5,0,0,0,0,10,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false) wavelet=wavelet.ConvertAviUtlYCToYUY2() source=MergeLuma(source, wavelet, 1.0) # <- 將 Wavelet3DNR2 處理之後的 Y-channel 覆蓋回原本 source 的 Y-channel,保留原本 source 的 Chroma 不變
這樣就可以避免 Wavelet3DNR2 造成的色彩瑕疵。 由於人眼對 Luma 亮度的噪訊比較敏感,所以保留 Chroma 不處理通常也可以接受,或者用其他 filter 對 Chroma 做處理,最後用 MergeChroma 合併回 source。 source=MergeLuma(source, wavelet, 1.0) source=MergeChroma(source, other_filter, 1.0)
或者,用另一個方法,把 UV copy 到 Y-channel,然後用 Wavelet3DNR2 對 Y-channel 做處理,處理完畢以後,再把 UV copy 回 U, V-channel。 u_chroma=UToY(source) # <- 把 U copy 到 Y-channel u_chroma=u_chroma.ConvertAviUtlYCToYUY2() u_chroma=u_chroma.AU_WAVELET3DNR2(2,0,10,10,0,0,0,0,0,0,5,0,0,0,0,10,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false) u_chroma=u_chroma.ConvertAviUtlYCToYUY2()
v_chroma=VToY(source) # <- 把 V copy 到 Y-channel v_chroma=v_chroma.ConvertAviUtlYCToYUY2() v_chroma=v_chroma.AU_WAVELET3DNR2(2,0,10,10,0,0,0,0,0,0,5,0,0,0,0,10,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false) v_chroma=v_chroma.ConvertAviUtlYCToYUY2()
filtered=YtoUV(u_chroma, v_chroma) # <- 把 U, V 從 Y-channel copy 回 U, V 各自的 channel source=MergeLuma(filtered, source, 1.0) # <- 將原本的 Y 和 filter 之後的 UV 合併
結合以上的方法,就可以用 Wavelet3DNR2 對 Y, U ,V 三個 channel 分開做處理,不過這個方法很慢,非常慢,不建議使用 ^^; |
|