引用:
Originally posted by snic
Shade 兄...
從您一連串測試(您真的很閒XD...小的甘拜下風^^; )後我覺得...
不管是 DIVX 還是 XVID...
是不是在不限制容量流量的情況下...
能不開 B-frame 功能就別開比較好
總覺得開 B-frame 只是提高壓縮比的一種手段
像 DivX 因為從頭到尾都要開...所以不適合的地方也要強迫使用
雖然 XviD 可以自動判斷是否加 B-frame...
可是就像自動 IVTC...還是會有判對錯的地方
那我覺得不開 B-frame 還比較好...總比你壓完發現有瑕疵來的好
又不像 TMPEGNC 的自動 IVTC 還可以手動檢查^^;
還是說 B-frame 還有其他用途?會提高畫質嗎?
|
說老實話我也很懷疑我是不是吃飽太閒了 :P
(可惜事實上我就是一點也不閒... >_<)
其實現在回文的動力,只剩下一些不吐不快的相關議題。
這些說明的目的,主要是想幫 XviD 平反一下。
有些人一直認為 XviD 是免費的,效果一定不如要錢的 DivX Pro。
XviD 還在開發中,有許多 bug,非常不穩定。
XviD 和 MPEG-4 標準有相容性的問題,壓出來的東西可能不相容 MPEG-4。
例如那個 VHQ 功能,是 MPEG-4 相容的嗎?
(雖然開發者會認為,這個問題很笨... 而且常常被這樣問,會有點不爽 :P)
所以他們堅持,除非 XviD 推出 1.0 版,否則他們是不會用 XviD 的。
(1.0?那只不過是個數字而已。要的話,我可以自行把版號改成 127 都沒問題

)
然而實際上 DivX Pro 也有 bug,而且和 MPEG-4 不相容的問題更嚴重。
(5.0.2 版的 Qpel 錯誤,大家已經用了一整年了。就是到現在的 5.0.5,Qpel + B-frame 仍然是錯的。DivX 5 解 B-frame + 4MV 從來沒解對過。符合 MPEG-4 標準?不要作夢了 :P )
但是因為它是要錢的,它的名氣大,所以使用者也認為,相信它的標準性、相容性是沒有問題的。
然而這些都不是事實。
所以我才會不厭其煩地,一直在這些議題上,說明這些技術的原理,說明實際的情形。
以上的測試,我也盡量保持在中立的立場,說明兩種 Encoder 的優點和缺點的地方。
這一切的目的,只是想幫 XviD 說說話,讓大家多了解一下這個 Encoder,平衡一下和 DivX 的報導。
算算從開始到現在,我好像也已經在各地寫了好幾萬字了吧 ^^;
真的是吃飽太閒了 ^^;;
有時候寫這些東西真的是有一種無力感... 最近 Doom9 上的 XviD 討論區,管理員 Nic 決定"不玩了",我有點能體會他的心情...
他的網站已經關閉了 XviD 區,不知道以後還會不會有 Nic 版的 XviD 編譯版本。
http://nic.dnsalias.com/
引用:
NEWS
3.05.03
The XviD Section is now closed, this may mean the closing of this site, but I hope not 
|
好好休息吧 Nic,辛苦了
不過我還是要鞭屍一下

前面的測試中有提到,Nic 寫的 MPEGDecoder,chroma upsampling 是錯的,我建議大家不要使用。現在我把這個錯誤的圖片貼出來,再次提醒大家注意。
錯誤的 chroma upsampling,MPEGDecoder YUY2 版本解碼,或者是 MPEGDecoder/MPEG2Dec3 YV12 版本解碼,輸出 YV12,然後 ConvertToYUY2(interlace=false),模擬播放時的情況,注意人物臉部和頭髮交錯(拉絲)的部分,衣服紅色的部分,這樣的顏色是錯的

正確的 chroma upsampling,MPEG2Dec YV12 版本解碼,會自動輸出 YUY2,其他 DVD2AVI/MPEG2Dec.dll/MPEG2Dec2.dll/MPEG2Dec3.dll YUY2 版本解碼也都一樣,注意人物臉部和頭髮交錯(拉絲)的部分,衣服紅色的部分,這樣的解碼顏色才是正確的

MPEGDeocder 的解碼畫質並沒有比較好(MPEGDecoder 是用 libmpeg2 解碼,color space 的程式碼還是用 XviD 的程式碼,XviD 的 color space 品質並不好),用 DVD2AVI/MPEG2Dec.dll/MPEG2Dec2.dll/MPEG2Dec3.dll 解碼是一樣的,而且這幾個解碼又正確,所以建議不要再用 MPEGDecoder 了。
真正解碼(upsampling)品質有比較好的,是 m2v,不過 m2v 只支援到 YUY2(要用密技,否則一般情況下走 VFAPI 還是 RGB24),不支援 YV12。
不過全程 YV12 的做法,只有在訊源完全是 Progressive Frame 的時候才可以使用,如果用 DVD2AVI 預覽,發現所有的 Frame Type 都是 Interlaced 或者是部分 Progressive 部分 Interlaced,這種訊源就不可以使用全程 YV12 的製程。
為什麼?前面有提過了,再說一次:
Interlaced Frame 是由奇偶兩個 Field 組成的,兩個 Field 是各自獨立的畫面,所以 Interlaced chroma 解出來,要分給隔行的 chroma1 和 chroma 3,因為位於 line1 的 chroma1 和位於 line3 的 chroma3 才是屬於同一個畫面。而一般的 Progressive Frame,chroma 解出來是分給 chroma1 和 chroma2 使用。
不同 Frame Type 要用不同的 upsampling 算式。
如果訊源存的是 Interlaced Frame,用全程 YV12 製程
DVD(interlaced chroma) -> YV12(interlaced chroma) -> MPEG-4(interlaced chroma)
MPEG-4 AVI 檔案內並沒有一個旗標,會註明這是 Interlaced Frame,MPEG-4 Decoder 解碼的時候,會假設儲存的都是 Progressive Frame,用 Progressive Frame 的方式做 upsampling,chroma 就會被分配錯位置,造成 chroma upsampling 錯誤。
所以遇到完全 Interlaced Frame 的訊源,不可用全程 YV12 製程,需將原本儲存的 Interlaced chroma,轉成 Progressive chroma,才可以壓成 MPEG-4 AVI
DVD(interlaced chroma) -> YV12(interlaced chroma) -> ConvertToYUY2(interlace=true) -> YUY2 -> ConvertToYV12(interlace=false) -> YV12(progressive chroma) -> MPEG-4 AVI
部分 Progressive 部分 Interlaced 的訊源,要用 YUY2 版本的 MPEG2Dec1/2/3 做解碼,MPEG2Dec1/2/3 會根據 MPEG-2 檔案內的 progressive_frame 旗標,做正確的 upsampling 動作。