在視頻解碼方面,為什麼硬體解碼跟軟體解碼比起來,前者的畫面質量總是肉眼可見地略遜一籌?
01-13
話說 解碼和輸出關係大么?
測試了下用 POTPLAYER ffmpeg關DXVA和開的對比,渲染器用的普通視頻渲染而沒用madVR之類。視頻取自憨豆特工115555幀關閉嗯PC上 貌似解碼不影響渲染輸出。
視頻信息:Johnny English (CHD)
文件格式 : AVC文件格式/信息 : Advanced Video Codec幀率 : 23.976 fps色彩空間 : YUV色度抽樣 : 4:2:0位深度 : 8位
編碼函數庫 : x264 core 118 r2085 8a62835額 這個MPEG2 用VMR9無渲染
AMD Video Decoder對FFdshowffdshowAMD Video Decoder色彩空間 : YUV
色度抽樣 : 4:2:0位深度 : 8位解碼的本質就是將一個個原來被編碼的數據變成一個個像素點對應的像素值(YUV或者RGB)。會造成兩者差異性的地方通常在下面三個方面:
1. 變化和量化精度的不同:解碼過程中,硬體和軟體可能造成區別的地方是反量化和DCT變換或者小波變換或者其他變換,可能存在一些硬體為了設計上的簡便對精度進行了一些調整,因此會造成最後像素值的差異。但是,這些差異在現在硬體解碼上,肉眼是基本看不出來的。2. 像素插值:常用的編碼採用的是YUV420的色彩採樣,對每個像素採樣的時候,對亮度逐個採樣,但是色差是4個像素採樣一個,如下圖4個像素: A(採樣Y,U,V) B(Only Y) C(Only Y) D(Only Y) BCD點的UV值採用的是與A相同的UV值(也有其他的,比如取ABCD 4點UV的均值)。 但是,在解碼後播放的時候,硬體和軟體對於ABCD的UV值可能會採取不同的策略(這種差異同樣也會出現在兩個不同的解碼方案上),以保證每個顯示的像素都有各自的UV值,這個策略可能是直接使用A點UV值,或者與相鄰的4個像素進行濾波處理,達到像素間平滑,例如雙線性的插值。在早期的硬體解碼時,顯卡中沒有專門的用於解碼的模塊,因此在這些處理上往往會用更加快速而不是精度的方法去實現,因此會造成畫質上的差異。3. 顯示輸出:在解碼結束的時候,需要將結果在屏幕上輸出,硬體解碼結果往往可以直接用於顯示,但是軟體解碼的結果需要從內存傳遞到顯存後進行輸出。這當中需要進行一次轉換,假設顯示的時候使用的api要求使用RGB的輸出,但是解碼的結果是YUV的,那麼需要進行一次轉換,這是一個線性的轉換,但是由於像素的精度只有8bit,因此會有一些差值(1/255之內),當然,這個肉眼幾乎看不出來的。
綜上,造成軟解和硬解畫質上區別的原因主要是在解碼和顯示過程中一些計算精度上的區別,造成了兩者的區別。通常來說,軟解在這些計算精度上會比硬解更高。如果使用更高的碼率(更小的量化單位),更高的bit色的時候,這些差異會減小,但是會增加加酸量。同時,隨著硬體的不斷發展,現在的顯卡或者soc都會有獨立的解碼模塊,計算的精度也越來越高了,這種差異正在逐步減小。謝邀,來晚了。理論上來說是合乎標準的硬體解碼器和軟體解碼器的輸出應該是一樣的。 實際實現上,硬體解碼可能比較容易出一些異常,處理得不好有可能影響畫質吧。贊同樓上的回答。
是這個原因,圖像質量和硬體軟體解碼毫無關係,只是一個假象而已。視頻編解碼演算法既可以軟體實現也可以硬體實現,軟體實現成本低,硬體實現成本高,軟體實現演算法效率低,硬體實現演算法效率高。
依據摩爾定律,隨著硬體的高速發展,軟體實現越來越簡單。一般播放器發現目標視頻無法硬解,於是採用軟解,而一般無法硬解的視頻解析度較高或者編碼配置較高,相比較於通常軟解的視頻質量較高,所以產生了肉眼可以分辨質量的假象。
專業上關於視頻質量的定義也和軟體硬體沒有關係。目前有好的標準了,都在搞HEVC,所以優化264的硬體晶元的少了,加劇了產生假象的機會。推薦閱讀:
※對於內存大小和CPU頻率同樣的台式機與筆記本,性能為什麼有差異?
※為什麼2014年PC端就有微軟發布的14nm制式的CPU,而現在手機端還在大量生產28nm的CPU?
※圍繞GTX 1070配一台主機?
※CPU 的指令集存放在什麼地方?