引用:
Originally posted by silentlain
感謝您熱心的回答~
請讓我整理一下重點(如有錯誤煩請指證):
|
呃,您大致上的意思是對的,不過更精細地講,不完全是這樣。
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)在source interlace(我這邊所指的source只是指DVD中存放的形式,和真正的source是否為lnterlace無關)時的chroma upsampling是錯誤的,而MPEG2Dec2(YUY2)是正確的,
|
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不是progressive時,我們應該使用MPEG2Dec2(YUY2),而不是MPEG2Dec3(YV12),這樣才能得到正確的chroma 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 方法通吃所有的情況,這時候只好