[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說

我還記得我裝第一台電腦時,為了看VCD的....好看影片(羞),還特別去買一張VCD加速卡來看一些夜市買來的片子,因為當時的爛電腦連放MPEG-1的影片都沒力。玩電腦夠久的人可能有買過這些VCD/DVD的影片加速卡,但顯示卡往3D快速發展之後,這種專門看影片的附加卡就銷聲匿跡了,除了VCD和DVD,也沒再看過HD高畫質影片加速卡了,因為現在出去買一張顯示卡,就有MPEG-1、MPEG-2(DVD)、WMV、VC-1、H.264加速,兩大藍光陣營Blu-Ray和HD DVD在還沒有普及前,新的顯示卡就已經100%支援了。

影片加速是近年顯示卡最熱門的附加功能,但為什麼顯示卡3D發展也順便帶動影片加速功能?一個3D一個2D感覺沒啥關連,其實除了廠商想要增加顯示卡的附加價值之外,顯示卡的3D運算其實和影片加速脫離不了關係,雖然乍看之下根本連不起來。

本篇要講的就是ATI和NVIDIA現在狂炒的AVIVO HD與PureVideo HD,他們到底是什麼?而最常被問的就是「要才樣啟動顯示卡的硬體加速?」,最大的混淆就是NVIDIA PureVideo技術與PureVideo Decoder的錯誤命名,以下我們將重頭詳細解說,讓大家徹底了解!


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
NVIDIA PureVideo HD與ATI AVIVO HD是目前兩大硬體加速技術。


影片壓縮

首先,影片是什麼?想都不用想,影片就是一連串的靜態圖片連續播放,一些影片格式會講24p、30p、60i,指的就是每秒有24、30、60張圖片。但影片至少都有好幾秒,電影甚至是以小時來計算,大家做點算術就知道一小時的影片就要十萬張的圖片,那是非常大的資料,因此所有的影片格式都必須透過破壞性壓縮,刪掉部分圖片的資訊讓檔案縮小,而影片播放就是一種「解壓縮」的動作,把檔案還原成一張一張的畫面,硬體加速就是加快解壓縮的動作,為了徹底了解,一定要來聊一下影片是如何壓縮的。

[註:我這裡就不提色彩空間轉換的步驟,有興趣的人自行查詢「RGB轉YUV」。]


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說

[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說


1.動態補償
大家都看過影片,讓我點出一個你早已知道的事實:在一小段時間內,影片的畫面大多是類似的。,比如上面兩張火車的圖片是從大約3秒鐘的影片段落中隨意截出來的,在這3秒內,攝影機就固定這個角度拍火車通過,而我們知道一般影片每秒都有24~60張,換句話說,這簡單的火車段落可能高達有100張的圖片,而每一張看起來都差不多。

當連續圖片的內容都差不多時,要怎麼壓縮?很簡單,就是取一張圖片做標準,之後類似的圖片就不存圖片內容了,而只存「跟原來那張標準圖片的差異點」。比如上面的火車圖,第一張做為標準圖,第二張就只存火車頭的位置往左下角移動了XX像素,反正畫面的其他部分幾乎都一樣。而這個參照的動作就叫「動態補償」(Motion Compensation),在影片壓縮的領域,它是把畫面切成一塊塊小區域(16x16~4x4的像素),然後每個區域去比對前後張畫面的相同位置,看有沒有改變,有的話就只紀錄畫面的變化,這樣連續的圖片就只剩下幾張標準畫面和一堆參照的資訊而已,這是第一步壓縮。


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
影片的連續畫面會分成I、B、P三種,I畫面就是原始參照畫面,也就是畫面出現大便....嗯,出現大變換、無法參照之前畫面的時候,就會被列為I畫面。P畫面則是參照前一張I畫面,紀錄相異點,B畫面則是雙向參照I或P畫面(最新的H.264是特例,它的B畫面可以參照別的B畫面)。所以P畫面是出現小變換時用的,而B畫面則是出現微小變換時用的。一般影片壓縮後就是像圖中這樣IBBBPBBI,事實上真正有圖片內容的只有I畫面,其他都是參照紀錄而已。


2.正餘弦轉換
正餘弦轉換(Discrete Cosine Transform,簡稱DCT),哇靠!聽起來超專業,多念幾次就覺得自己像數學家了。這裡不討論DCT的傅立葉轉換公式,反正Google一下就有,就算寫出來也沒幾個人看的懂,這篇是簡單教學,而不是幫助入睡的。

DCT是把空間的資訊轉換成頻率。一張畫面原本記錄X、Y軸上某一點是什麼顏色,XY軸就是一種空間資訊,對一張圖片做DCT轉換之後,會變成以頻率來紀錄。圖片的「頻率」是什麼鬼?你一定會這樣問,聲音的高頻是尖銳,圖片的高頻則是顏色快速轉換的地方,低頻就是...呃...顏色轉換不快速的地方,也就是較為柔和的漸層。


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
上面的黑白圖經過DCT轉換後,就只剩下座標軸上一個短暫的突起。


比如上面這張黑白圖,經過DCT轉換之後就變成座標軸剩一個突起(黑白轉換的交界),其餘就是平緩的低頻訊號(黑色和白色連續處),看到這裡大家應該知道DCT的用意了,它就是把後面的低頻去掉,只留下前面的高頻,以圖片的語言來說,就是讓畫面只留下重要的邊緣,而細微的漸層拿掉,這牽涉到人腦的感知方式,人腦只要有一個大約的輪廓就能辨識,一張懷舊而模糊的照片仍然可以看出是誰,再糊的RVMB日劇(主角五官都快看不清楚了)大家都看的下去。所以影片壓縮就照這個方式,把低頻訊號刪掉,保留大致的樣子,做成第二步壓縮。


3.Entropy Encoding
「熵」...哇塞!聽起來超厲害,多念幾次就覺得自己變物理學家了。物理上的Entropy跟電腦的Entropy有沒有關係我不確定,所以我通常不會翻成中文,保留原來的Entropy Encoding比較好。

影片壓縮到這一步已經不需要再刪東西了,Entropy Encoding是一種無失真壓縮的技術,資料可以完整的還原,這廣泛用在檔案壓縮上(Zip、RAR...你舉的出來的都有用到)。它是一種用機率來壓縮的技巧,出現機率越高的字串資料,就用越短的代碼來代取它。比如Mobile01裡最常出現的詞是「勸敗」,那就把「勸敗」用「0」來代替,這樣一句話就可以寫成「Nokia N95真讚,值得0」,是不是就縮短了?而當這個詞出現機率超高時,就會看到資料變成一堆0,這時再把一堆0寫成「幾個0」的資訊(000000 = 6,0),壓縮率就相當高了。

Entropy Encoding的演算法很多,比如VLC、CABAL、CAVLC,愈新的影片格式(比如H.264),Entropying Encoding的演算法就愈複雜,可以壓的更小,當然也需要愈操的壓縮/解壓縮運算。


影片播放與加速

呼!終於講完壓縮的部分了,接下來是兩萬字的影片播放步驟解說,哈!嚇大家的,其實影片播放就是上面三個步驟倒過來,先把Entropy Encoding的資料還原,再做iDCT(inverse DCT)把頻率資訊變回空間資訊,最後用動態補償加上參照的資訊,還原成每一張畫面,就是大家看到的影片了。原本這些解碼工作是CPU要做,硬體加速就是把這些工作轉到顯示卡上,降低CPU佔用率,或是讓更低階的CPU可以播放。

顯示卡最早加入硬體加速的步驟是「動態補償」,因為這跟3D運算的方式很像,事實上,目前最新的影片硬體加速都還有部分用到3D運算核心。「動態補償」是把畫面切割成小區域做比對,還原時就是用影片檔裡那些參照紀錄,對照標準畫面來算出每一張畫面,由於畫面是切成一塊塊區域,每個區域都是獨立的,正好可獨立送到顯示晶片裡多個平行化單元(也就是Shader)一起做運算,但並非所有解碼的步驟都能由Shader來處理,iDCT和Entropy Decoding就和顯示晶片的運作方式相反(這兩步無法平行化運算,用CPU比較快),GPU要支援這些,就得實實在在地內建一個解碼單元,專做iDCT和Entropy Decoding。


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
硬體加速的幾大步驟,兩家都有自己慣用的宣傳名詞,圖中Bitstream Processing就是Entropy Decoding,Inverse Transform就是iDCT,再來是動態補償,最後一個Deblocking是「去區塊」,因為動態補償是以區塊來還原畫面,如果沒有Deblocking的動作,整個影片畫面就會裂成像棋盤狀,這一步並不操,但是是必須的。


如何啟動硬體加速?
而顯示晶片是怎麼做硬體加速的?或更直接一點:「如何啟動硬體加速?」,其實對於顯示卡來說,「硬體加速」一直都在啟動狀態,只是有沒有去用而已。在3D遊戲裡,我們已經知道DirectX與OpenGL是遊戲和顯示卡之間溝通的語言,遊戲用DirectX寫,顯示卡支援DirectX,顯示卡就能運算遊戲裡的3D畫面。完全同樣的道理也能放在影片播放上,只是DirectX換成DXVA(DirectX Video Acceleration),而所謂的PureVideo和AVIVO,其實就是顯示卡執行這些DXVA指令的技術。


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
硬體加速的步驟,只要解碼器讀到正確的影片格式,解碼器本身也支援DXVA的話,就會把解碼的工作丟給顯示卡,解碼結束之後再把結果傳給解碼器,輸出最後的畫面。


前端的解碼器最重要,支援硬體加速的解碼器遇到特定影片格式時,就能把解碼的動作改用DXVA的指令來寫,送給顯示卡去加速運算,再把運算結果回傳變成畫面。很多人以為要啟動PureVideo就一定要裝NVIDIA PureVideo Decoder,事實上這是名稱上的誤解,NVIDIA PureVideo Decoder只是支援PureVideo技術的解碼器「之一」,許多著名的播放軟體都已經支援PureVideo或AVIVO,像台灣之光PowerDVD、WinDVD、Nero ShowTime、Windows Media Player等等。

而且那個NVIDIA PureVideo Decoder只是DVD播放軟體(MPEG-2解碼器),它不能...也永遠不可能播放其他新格式,比如H.264、WMV、VC-1等等,要硬體加速這些新格式,只有上述幾個市售的播放軟體有支援,裝NVIDIA PureVideo Decoder是完全無用的。

另外,其實DXVA只是一個泛稱,微軟所訂的DXVA 1.0只支援到MPEG-2,現在播放軟體支援VC-1或H.264硬體加速都是顯示晶片廠與播放軟體廠合作,用DXVA的延伸指令所做,兩家所用的專屬指令並不一樣。所以現在事情演變有點複雜,要真的確定有硬體加速,播放軟體得明確地說有支援PureVideo HD和AVIVO HD才行,而且NVIDIA和ATI的硬體加速一直在改,驅動程式和播放軟體也得一直升級才能支援最新的技術。

[註:新的DXVA 2.0支援所有新格式,但很不幸的,它跟DX10一樣是Vista Only,所以廠商可能還是會繼續用專屬指令,讓播放軟體可以同時支援XP和Vista。]


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
播放軟體通常只會簡短的寫「啟用硬體加速(NVIDIA PureVideo)」,但PureVideo和AVIVO改來改去,搞一堆專屬指令,為了避免麻煩,一律使用最新版的播放軟體最沒問題。


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
這是未開硬體加速前,播放「黃金羅盤」的1080p Quicktime預告片(H.264格式),CPU是C2D E4300,佔用率整個飆高。


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
開啟GeForce 8600GT的硬體加速後,CPU佔用瞬間掉到只剩不到10%。


總而言之,要使用這些顯示卡的硬體加速,必須要有:1.支援硬體加速的顯示卡、2.最新的驅動程式、3.特定的解碼器(PowerDVD或WinDVD)並勾選硬體加速選項、4.軟硬體都有支援加速的影片格式(如MPEG-2、WMV、VC-1、H.264),缺一不可。像XviD、DivX、RMVB這種非業界標準的格式是不太可能會有廠商支援的,因為他們首要著眼點是像DVD、Blu-Ray、HD-DVD這種光碟媒體所用的影片格式。


[註:有人會問硬體加速支不支援.avi影片檔,這是另一個常見的誤解,影片附檔名跟壓縮格式可以是完全無關的,所有的影片壓縮格式都能變成.avi檔,要真正看出它的壓縮格式,可以抓GSpot來看。]


PureVideo HD與AVIVO HD
現在PureVideo HD與AVIVO HD的發展已經到100%硬體加速了,ATI在Radeon HD 2000之後,幾乎全系列(除了2900XT)都可以對MPEG-2、VC-1、H.264、WMV做完整硬體加速,這包括動態補償、iDCT和Entropy Decoding三大步驟;NVIDIA目前仍然缺少VC-1的Entropy Decoding,其他則跟ATI相同,不過在新版8400GS(D9M/G98)推出之後NVIDIA會追上ATI的水準。其實,現在兩邊的硬體加速技術都遠超過一般人所需,因為大流量的H.264與VC-1影片並不常見,只有Blu-Ray和HD DVD會用到,不過總有一天這些新世代電影光碟一定會普及。


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
雖然NVIDIA一直號稱PureVideo HD只少了一步,差不了多少,但少的Entropy Decoding事實上是三大步驟裡最操的。


硬體加速除了減輕CPU的負擔之外,也能讓影片畫質提高,最常見的就是「去交錯」(De-interlace),由於種種我已經沒力再寫的歷史包袱,很多影片的畫面並非完整的,而是用一條條奇數或偶數掃瞄線交替組成,「去交錯」就是把它們重新運算成完整畫面。而這不只是前後兩張黏在一起而已,事實上,去交錯比單純降低播放時的CPU佔用率更複雜,因為去交錯很多是By case,同一種演算法不能套用在所有影片上,幸好交錯影片只有在DVD時代比較常見,現在新的影片大多是完整畫面了,謝天謝地!


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
硬體加速除了降低CPU使用率,也能提高影片畫質,圖中「Post-Processing」的部分都是加強畫質用的。


[小惡魔的電腦教室] 4-3.顯示卡影片播放硬體加速,作法原理完全解說
去交錯的效果,可以把影片中的邊緣鋸齒去除。


最終...還是要看片
網路影片播放+硬體加速可以搞到很複雜,因為商用解碼器通常只支援特定幾種常見檔案,有時候你明知道這檔案的影片壓縮格式是可以加速的,但卻可能由於解碼器的限制而無法啟動。比如mkv就是網路上專用的檔案包裝格式,它可以包進H.264的影片,但支援H.264硬體加速的PowerDVD沒辦法撥mkv,所以才有把一堆解碼器打包抽離,讓它與其他splitter(分離影音檔中的影片和音訊的軟體)連結合作,支援更多影片的特殊玩法,比如對岸的「終極解碼」,或是這篇
GF老大終於有新文章給偶這菜鳥了
上週參考"電腦伽利略"
去光華買了dell 22"&新主機
(只為了玩大富翁)
趕快來拜讀

雖然CPU章節從1-4以後就好難,完全看不太懂
但是有空還是會多看~
看久了它就認識偶了~哈哈
粉期待泥全部的巨作唷~!!

又有新的小惡魔電腦教室了
謝謝G.F大
感恩~~
好久沒看這種文章了
雖然跟裝機的關係不是很大
不過也算是增加背景知識
芭樂眉 wrote:
雖然CPU章節從1-4以後就好難,完全看不太懂
但是有空還是會多看~
看久了它就認識偶了~哈哈

多C多健康
多看多懂些
我以前也跟你一樣是個嘴砲咖 直到我的帳號中了一箭
非常謝謝你的說明!!
淺顯易懂,讓沒有背景的人也能了解.....
尤其是「Entropy Encoding」的部份.....一個簡單的例子,讓我馬上搞懂他的壓縮策略....

好個有營養的文章!!
完全跳過不看

請告訴我買那張 不玩game

只看影片 畫質佳 應付一般辦公室應用

那張硬解卡最划算實在 便宜大碗

消費者只需要知道這郭~
歪先生=真好玩=Arena speedo???
WiMAX wrote:
完全跳過不看請告訴我...(恕刪)


那你進來幹麼,如果要知道這個去超頻者天堂就好,一堆硬體魔人都在那,何必在G.F大很辛苦的完成這篇知識共享的文章上潑冷水;這篇文章真的很棒!以前不太清楚的觀念現在都了解了,真的很感謝G.F大,還有對上面這位仁兄發表這種沒營養的回覆感到莫名其妙
好文章!

而且樓主勾起了我當年的回憶
記得當時我那台Pentium電腦(好像沒有MMX)也是播不動VCD...

還好在Sega Saturn上加了一張硬體解壓縮卡
看好看的影片還可以放大縮小...
好讚的解說

果然Mobile 01是好物

看來網友來此網站是來對了

請容許我跪拜大大
這是篇好文章
讓我對顯示卡的工作原理了解許多
感謝GF大的詳細解說
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!