瀏覽單個文章
Shade
Senior Member
 
Shade的大頭照
 

加入日期: Oct 2002
您的住址: El's room
文章: 1,046
你要測試哪種影片格式的品質?

客觀測試法,可以用 Avisynth 測 PSNR 和 Deviation
譬如說我壓的訊源是
avisource("source_vfapi.avi").ConvertToYV12()

因為 VFAPI 一律使用 RGB 格式傳遞資料,為了後面比較的公正性,壓縮前統一由 Avisynth 先轉成 YV12 格式,然後用 VirtualDubMod 的 Fast recompress 模式壓縮。VirtualDubMod 會直接傳送 Avisynth downsampling 好的 YV12 的資料,給 codec 壓縮,一般的 DivX5/XviD/MS MPEG-4 codec 都可以接收 YV12 的資料直接進行壓縮。

壓好的檔案 target.avi 就可以用 compare 這個 filter 來比較
orig=avisource("source_vfapi.avi").ConvertToYV12()
encoded=avisource("target.avi", false, "YV12")
compare(encoded, orig, "YUV", "PSNR.LOG", false)

上面第二行我們強制 codec 輸出 "YV12" 格式,這樣就可以比較原始的 YUV 4:2:0 資料,排除 chroma upsampling 的干擾,影響計算的正確性。
但是不是所有 codec 都可以輸出 "YV12" 格式,例如 DivX5/XviD 可以,但是 MS MPEG-4(DivX3)就不行,MS MPEG-4 vfw codec 只能輸出 RGB 格式。這樣就很傷腦筋啦,為了求公正性,我們只好改用 MS MPEG-4 的 DirectShow Filter 來解碼。MS MPEG-4 的 DirectShow Filter 也不能輸出 "YV12",但是可以輸出 YUY2(YUV 4:2:2),我們再把它轉回 "YV12",這樣比較至少比用 vfw codec 輸出 RGB,再轉回 YV12(需要做 YUV -> RGB -> YUV)來得好。
如果是 MS MPEG-4,第二行改成
encoded=DirectShowSource("target.avi", fps=23.976).ConvertToYV12()

然後我們用 VD 開啟這個 avs,選 Preview 跑一遍再關閉,Avisynth 就會將計算結果輸出成一個 PSNR.LOG 檔。
上面我們是比較 YUV 總和的 PSNR,如果只想比較 Y channel 的 PSNR,第三行改為
compare(encoded, orig, "Y", "PSNR.LOG", false)

如果不想輸出 LOG 檔,想在 VD 的視窗中直接看每個畫面計算的結果,第三行改成
compare(encoded, orig, "YUV")


另一個可以直接開啟 AVI 檔計算 PSNR 的軟體
http://www.vsofts.com/codec/codec_psnr.html

PSNR4AVI <avifile1> <avifile2> >> PSNR.LOG
就可以輸出 LOG 檔。
網頁上也有計算 PSNR 的算式和說明。
不過我試用的結果,算出來的數值怪怪的。

CSP-FrameAnalyzer
http://www.circlestorm.org/programs.asp
Dead2 以前用來做 XviD 測試用的,現在好像不能下載了?

MPEG/VCEG 的專家對於 PSNR 的提升,以 0.5dB 為單位,因為他們相信 0.5dB 的差距就可以從視覺上看得出來。
PSNR 是最普遍,最廣泛使用的評鑑畫質的客觀量測法,不過許多實驗結果都顯示,PSNR 的分數無法和人眼看到的視覺品質完全一致,有可能 PSNR 較高者看起來反而比 PSNR 較低者差。這是因為人眼的視覺對於誤差的敏感度並不是絕對的,其感知結果會受到許多因素的影響而產生變化(例如人眼對空間頻率較低的「對比差異」敏感度較高,人眼對亮度「對比差異」的敏感度較色度高,人眼對一個區域的感知結果會受到其周圍鄰近區域的影響,這種作用稱為 Masking... 等等)。
許多新的客觀評鑑方法都引進了 HVS(Human Visual System)模型,會根據人眼的視覺特性計算畫質的分數,這種的評鑑結果會比較接近實際上看起來的品質。

做 HVS 評鑑的軟體... 是有的,例如 ITS 的 VQM,用的就是 ASNI 建議的 SI 和 PI 量測法。有興趣者自行搜尋

實際上我們也可以利用 Avisynth 的一些 filter 來做比較簡單的一些 HVS 測試,例如利用 sobel 微分做類似 ANSI Recommendation 的 Spatial Information 測試方法,這裡就不詳述了。
PSNR 雖然不夠準確的反映看起來的品質,不過它仍然是一個值得參考的評量方法,所有 encoder 的開發人員在測試自己的改良是否有助於畫質提升時,也都是用 PSNR 作為判斷的依據。
 
舊 2003-02-06, 05:53 PM #2
回應時引用此文章
Shade離線中