1. 程式人生 > >位元速率、幀率和I B P幀

位元速率、幀率和I B P幀

      以前沒有接觸視訊這一塊,對視訊這一方面的知識不是很瞭解。現在瞭解一下位元速率和幀率的問題。
      位元速率就是資料傳輸時單位時間傳送的資料位數,一般我們用的單位是kbps即千位每秒。通俗一點的理解就是取樣率,單位時間內取樣率越大,精度就越高,處理出來的檔案就越接近原始檔案,但是檔案體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的位元速率達到最少的失真,圍繞這個核心衍生出來的cbr(固定位元速率)與vbr(可變位元速率),都是在這方面做的文章,不過事情總不是絕對的,從音訊方面來說,位元速率越高,被壓縮的比例越小,音質損失越小,與音源的音質越接近。“位元速率”就是失真度,位元速率越高越清晰,反之則畫面粗糙而多馬賽克。計算機中的資訊都是二進位制的0和1來表示,其中每一個0或1被稱作一個位,用小寫b表示,即bit(位);大寫B表示byte,即位元組,一個位元組=八個位,即1B=8b;前面的大寫K表示千的意思,即千個位(Kb)或千個位元組(KB)。表示檔案的大小單位,一般都使用位元組(KB)來表示檔案的大小。
    Kbps:首先要了解的是,ps指的是/s,即每秒。Kbps指的是網路速度,也就是每秒鐘傳送多少個千位的資訊(K表示千位,Kb表示的是多少千個位),為了在直觀上顯得網路的傳輸速度較快,一般公司都使用kb(千位)來表示,如果是KBps,則表示每秒傳送多少千位元組。1KBps=8Kbps。ADSL上網時的網速是512Kbps,如果轉換成位元組,就是512/8=64KBps(即64千位元組每秒)。

      幀數簡單地說,幀數就是在1秒鐘時間裡傳輸的圖片的幀數,也可以理解為圖形處理器每秒鐘能夠重新整理幾次,通常用fps(Frames Per Second)表示。每一幀都是靜止的圖象,快速連續地顯示幀便形成了運動的假象。高的幀率可以得到更流暢、更逼真的動畫。每秒鐘幀數 (fps) 愈多,所顯示的動作就會愈流暢。一般來說30fps是可以接受的,所以要避免動作不流暢的最低fps是30。除了30fps外,有些計算機視訊格式,例如AVI,每秒只能提供15幀。我們之所以能夠利用攝像頭來看到連續不斷的影像,是因為影像感測器不斷攝取畫面並傳輸到螢幕上來,當傳輸速度達到一定的水平時,人眼就無法辨別畫面之間的時間間隙,所以大家可以看到連續動態的畫面。
        每秒的幀數(fps)或者說幀率表示圖形處理器場景時每秒鐘能夠更新幾次。高的幀率可以得到更流暢、更逼真的動畫。一般來說30fps就是可以接受的,但是將效能提升至60fps則可以明顯提升互動感和逼真感,但是一般來說超過75fps一般就不容易察覺到有明顯的流暢度提升了。如果幀率超過螢幕重新整理率只會浪費圖形處理的能力,因為顯示器不能以這麼快的速度更新,這樣超過重新整理率的幀率就浪費掉了。
       一般用“FPS(frame per second,每秒鐘畫面更新的數量)”來表示該項指標。在欣賞電視、電影畫面時,只要畫面的重新整理率達到24幀/秒,就能滿足人們的需要。同樣的,在玩普通的遊戲時,如果重新整理率達到24幀/秒即可,但在一些高速遊戲中(例如射擊遊戲),如果畫面的重新整理率還是隻有24幀/秒,那麼就會感覺到畫面比較遲鈍,不夠流暢。

  雖然理論上畫面的重新整理率越快越好,但過高的重新整理率並沒有實際意義——當畫面的FPS達到60幀/秒時,已經能滿足絕大部分應用需求。一般情況下,如果能夠保證遊戲畫面的平均FPS能夠達到30幀/秒,那麼畫面已經基本流暢;能夠達到50幀/秒,就基本可以體會到行雲流水的感覺了。一般人很難分辨出60幀/秒與100幀/秒有什麼不同。

  (2)是什麼影響了FPS

  既然重新整理率越快越好,為什麼還要強調沒必要追求太高的重新整理率呢?其中原因是在顯示解析度不變的情況下,FPS越高,則對顯示卡的處理能力要求越高。

  電腦中所顯示的畫面,都是由顯示卡來進行輸出的,因此螢幕上每個畫素的填充都得由顯示卡來進行計算、輸出。當畫面的解析度是1024×768時,畫面的重新整理率要達到24幀/秒,那麼顯示卡在一秒鐘內需要處理的畫素量就達到了“1024×768×24=18874368”。如果要求畫面的重新整理率達到50幀/秒,則資料量一下子提升到了“1024×768×50=39321600”。

  FPS與解析度、顯示卡處理能力的關係如下:處理能力=解析度×重新整理率。這也就是為什麼在玩遊戲時,解析度設定得越大,畫面就越不流暢的原因了

MPEG-1壓縮的基本思想:幀內壓縮和幀間壓縮。
其次,時間相關性的統計分析:統計的結果表明,在間隔1~2幀的影象中,各畫素只有10%以下的點,其亮度差值變化超過2%,而色度差值的變化只有1%以下。

採用的壓縮方法: 分組:把幾幀影象分為一組(GOP),為防止運動變化,幀數不宜取多。
1.定義幀:將每組內各幀影象定義為三種類型,即I幀、B幀和P幀;
2.預測幀:以I幀做為基礎幀,以I幀預測P幀,再由I幀和P幀預測B幀;
3.資料傳輸:最後將I幀資料與預測的差值資訊進行儲存和傳輸。

I幀:幀內編碼幀
I幀特點:
1.它是一個全幀壓縮編碼幀。它將全幀影象資訊進行JPEG壓縮編碼及傳輸;
2.解碼時僅用I幀的資料就可重構完整影象;
3.I幀描述了影象背景和運動主體的詳情;
4.I幀不需要參考其他畫面而生成;
5.I幀是P幀和B幀的參考幀(其質量直接影響到同組中以後各幀的質量);
6.I幀是幀組GOP的基礎幀(第一幀),在一組中只有一個I幀;
7.I幀不需要考慮運動向量;
8.I幀所佔資料的資訊量比較大。

P幀:前向預測編碼幀。
P幀的預測與重構:P幀是以I幀為參考幀,在I幀中找出P幀“某點”的預測值和運動向量,取預測差值和運動向量一起傳送。在接收端根據運動向量從I幀中找出P幀“某點”的預測值並與差值相加以得到P幀“某點”樣值,從而可得到完整的P幀。
P幀特點:
1.P幀是I幀後面相隔1~2幀的編碼幀;
2.P幀採用運動補償的方法傳送它與前面的I或P幀的差值及運動向量(預測誤差);
3.解碼時必須將I幀中的預測值與預測誤差求和後才能重構完整的P幀影象;
4.P幀屬於前向預測的幀間編碼。它只參考前面最靠近它的I幀或P幀;
5.P幀可以是其後面P幀的參考幀,也可以是其前後的B幀的參考幀;
6.由於P幀是參考幀,它可能造成解碼錯誤的擴散;
7.由於是差值傳送,P幀的壓縮比較高。

B幀:雙向預測內插編碼幀。
B幀的預測與重構
B幀以前面的I或P幀和後面的P幀為參考幀,“找出”B幀“某點”的預測值和兩個運動向量,並取預測差值和運動向量傳送。接收端根據運動向量在兩個參考幀中“找出(算出)”預測值並與差值求和,得到B幀“某點”樣值,從而可得到完整的B幀。
B幀特點
1.B幀是由前面的I或P幀和後面的P幀來進行預測的;
2.B幀傳送的是它與前面的I或P幀和後面的P幀之間的預測誤差及運動向量;
3.B幀是雙向預測編碼幀;
4.B幀壓縮比最高,因為它只反映丙參考幀間運動主體的變化情況,預測比較準確;
5.B幀不是參考幀,不會造成解碼錯誤的擴散。

注:I、B、P各幀是根據壓縮演算法的需要,是人為定義的,它們都是實實在在的物理幀,至於影象中的哪一幀是I幀,是隨機的,一但確定了I幀,以後的各幀就嚴格按規定順序排列。