幀率演算法
Ⅰ 如何根據圖像的解析度和幀率算出圖像的需要的存儲空間有沒有什麼公式
像素的存儲空間取決於像素的深度。例如:一個像素佔用多少空間取決於什麼模式。例如,在灰度模式下,一個像素相當於一個位元組,在RGB模式下,一個像素相當於三個位元組,在CMYK模式下,一個像素相當於四個位元組。
像素深度是指用於存儲每個像素的比特數,也用於測量圖像的解析度。像素深度決定了彩色圖像中每個像素可能的顏色數量,或者決定了灰度圖像中每個像素可能的灰度級別。
例如,彩色圖像的每個像素是由三個組件:R,G,b.如果每個組件都是由八個比特,一個像素由24位,表示像素的深度是24,和每個像素可以是16,777、216(2^24)的顏色。
在這個意義上,像素深度通常被稱為圖像的深度。一個像素的位越多,它所能代表的顏色就越多,也就越深。
(1)幀率演算法擴展閱讀:
注意事項:
單位
當圖像大小以像素為單位時,應指定固定解析度將圖像大小轉換為實際大小。
例如:在大多數網頁中常用的圖像解析度是72,即每英寸72像素,1英寸等於2.54厘米,因此可以得出每厘米通過轉換等於28像素。一個15x15cm的圖像是420*420像素長。
Ⅱ 視頻幀數保持在多少以上才可以保持視頻畫面流暢
通常在二十四幀以上
原因一:人類肉眼的「視覺暫留」和「腦補」現象,前者是指人類視網膜在光信號消失後,「殘像」還會保留一定時間的現象;後者是大腦自行補足畫面中間幀的「腦補」功能。它們的混合作用,讓我們誤以為每秒24幀回放的照片是連續的。
原因二:電影規格本身也經歷了16到24幀的轉變,這個數字以後估計也會繼續增長。而PAL/NTSC/SECAM三種電視信號規格,把幀數定在每秒25幀和30幀的原因,其實只是因為不同地區的供電頻率不同(50Hz和60Hz)。
但當物體移去時,視神經對物體的印象不會立即消失,而要延續1/24秒左右的時間,人眼的這種性質被稱為「眼睛的視覺暫留」。
每一幀都是靜止的圖象,快速連續地顯示幀便形成了運動的假象,因此高的幀率可以得到更流暢、更逼真的動畫。
(2)幀率演算法擴展閱讀:
游戲的一秒幀數要高於電影、動畫等。
原因是動態模糊,動態模糊是指相機快門慢於物體運動而導致的運動軌跡拖影。3D游戲和電影的重要差別:電影是現實光影的記錄,而3D游戲是3D模型形狀/位置的實時渲染,前者會有動態模糊,而後者不會。
Ⅲ I幀,P幀,B幀,視頻碼率,幀率和解析度 區別和理解
視頻壓縮中,每幀代表一幅靜止的圖像。而在實際壓縮時,會採取各種演算法減少數據的容量,其中IPB就是最常見的。
簡單地說, I幀 是關鍵幀,屬於 幀內壓縮 。就是和AVI的壓縮是一樣的。 P是 向前搜索的意思 。B是 雙向搜索 。他們都是 基於I幀來壓縮數據 。
I幀表示關鍵幀 ,你可以理解為這一幀畫面的完整保留; 解碼時只需要本幀數據就可以完成(因為包含完整畫面)
P幀 表示的是 這一幀跟之前的一個關鍵幀(或P幀)的差別 , 解碼時 需要用 之前緩存的畫面疊加上本幀定義的差別,生成最終畫面 。(也就是 差別幀 , P幀沒有完整畫面數據 ,只有 與前一幀的畫面差別的數據 )
B幀是雙向差別幀 ,也就是 B幀記錄的是本幀與前後幀的差別 (具體比較復雜,有4種情況),換言之, 要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之後的畫面 ,通過 前後畫面的與本幀數據的疊加取得最終的畫面 。B幀 壓縮率高,但是解碼時CPU會比較累 ~。
從上面的解釋看,我們知道I和P的解碼演算法比較簡單,資源佔用也比較少,I只要自己完成就行了,P呢,也只需要解碼器把前一個畫面緩存一下,遇到P時就使用之前緩存的畫面就好了,如果視頻流只有I和P,解碼器可以不管後面的數據,邊讀邊解碼,線性前進。
但網路上的電影很多都採用了B幀,因為B幀記錄的是前後幀的差別 ,比P幀能節約更多的空間,但這樣一來,文件小了,解碼器就麻煩了,因為在解碼時,不僅要用之前緩存的畫面,還要知道下一個I或者P的畫面(也就是說要預讀預解碼),而且,B幀不能簡單地丟掉, 因為B幀其實也包含了畫面信息,如果簡單丟掉,並用之前的畫面簡單重復,就會造成畫面卡(其實就是丟幀了) ,並且由於網路上的電影為了節約空間,往往使用相當多的B幀, B幀用的多,對不支持B幀的播放器就造成更大的困擾,畫面也就越卡 。
一般平均來說, I的壓縮率是7(跟JPG差不多),P是20,B可以達到50 ,可見使用B幀能節省大量空間,節省出來的空間可以用來保存多一些I幀,這樣在相同碼率下,可以提供更好的畫質。
下面舉例說明:
在如上圖中,GOP (Group of Pictures)長度為13,S0~S7 表示 8個視點,T0~T12 為 GOP的 13個時刻。每個 GOP包含幀數為視點數 GOP 長度的乘積。在該圖中一個 GOP 中,包含94 個 B幀。B 幀佔一個 GOP 總幀數的 90.38%。GOP 越長,B 幀所佔比例更高,編碼的率失真性能越高。下圖測試序列 Race1 在不同 GOP 下的率失真性能對比。
總結 : I幀,P幀,B幀 理解看粗體字的標記,關鍵的點都標出了,一定要看重點。
解析度: 影響圖像大小,與圖像大小成正比:解析度越高,圖像越大;解析度越低,圖像越小。
視頻碼率:(1:傳輸碼率;2:編碼碼率)
碼率:影響體積,與體積成正比:碼率越大,體積越大;碼率越小,體積越小。
傳輸碼率: 碼率就是數據傳輸時單位時間傳送的數據位數,一般我們用的單位是kbps即千位每秒。也就是取樣率(並不等同與采樣率,采樣率的單位是Hz,表示每秒采樣的次數),單位時間內取樣率越大,精度就越高,處理出來的文件就越接近原始文件,但是文件體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達到最少的失真,圍繞這個核心衍生出來cbr(固定碼率)與vbr(可變碼率), 「碼率」就是失真度,碼率越高越清晰,反之則畫面粗糙而多馬賽克。
編碼碼率:單位時間的數據位數,(下面的結論是針對編碼碼率來說的跟傳輸碼率沒啥關系)
1:在碼率一定的情況下,解析度與清晰度成反比關系:解析度越高,圖像越不清晰,解析度越低,圖像越清晰。(一幀圖像就那麼多數據,解析度(面積大)越高,碼率一定,相對圖像越不清晰了)
2:在解析度一定的情況下,碼率與清晰度成正比關系,碼率越高,圖像越清晰;碼率越低,圖像越不清晰。
幀率: 影響畫面流暢度,與畫面流暢度成正比,幀率越大,畫面越流暢;幀率越小,畫面越有跳動感。如果碼率為變數,則幀率也會影響體積,幀率越高,每秒鍾經過的畫面越多,需要的碼率也越高,體積也越大。 幀率: 就是在1秒鍾時間里傳輸的圖片的幀數,也可以理解為圖形處理器每秒鍾能夠刷新幾次。
1. 音頻 碼率 計算公式:
音頻碼率=采樣率 x 位深度 x 聲道= 44.1Khz x 16位 x 2聲道 = 1411.2 Kbps
2.文件大小 = 碼率 x 時長(s) = 文件大小 = 碼率 x 時長(s) = (Kbps )= (Kbps )/ 1024 Kb = (MB)
2.視頻文件大小計算
文件大小 = 碼率 x 時長(s)/8 = (Kbps )= (Kbps )/ 1024 Kb = (MB)
問題編解碼的音視頻同步問題原理
帶來一個問題:在視頻流中,先到來的 B 幀無法立即解碼,需要等待它依賴的後面的 I、P 幀先解碼完成,這樣一來播放時間與解碼時間不一致了,順序打亂了,那這些幀該如何播放呢?這時就需要我們來了解另外兩個概念:DTS 和 PTS。
DTS、PTS 的概念
DTS、PTS 的概念如下所述:
DTS(Decoding Time Stamp):即解碼時間戳,這個時間戳的意義在於告訴播放器該在什麼時候解碼這一幀的數據。
PTS(Presentation Time Stamp):即顯示時間戳,這個時間戳用來告訴播放器該在什麼時候顯示這一幀的數據。
需要注意的是:雖然 DTS、PTS 是用於指導播放端的行為,但它們是在編碼的時候由編碼器生成的。
當視頻流中沒有 B 幀時,通常 DTS 和 PTS 的順序是一致的。但如果有 B 幀時,就回到了我們前面說的問題:解碼順序和播放順序不一致了。
比如一個視頻中,幀的顯示順序是:I B B P,現在我們需要在解碼 B 幀時知道 P 幀中信息,因此這幾幀在視頻流中的順序可能是:I P B B,這時候就體現出每幀都有 DTS 和 PTS 的作用了。DTS 告訴我們該按什麼順序解碼這幾幀圖像,PTS 告訴我們該按什麼順序顯示這幾幀圖像。順序大概如下:
PTS:1423
DTS:1234
Stream: I P B B
音視頻的同步
上面說了視頻幀、DTS、PTS 相關的概念。我們都知道在一個媒體流中,除了視頻以外,通常還包括音頻。音頻的播放,也有 DTS、PTS 的概念,但是音頻沒有類似視頻中 B 幀,不需要雙向預測,所以音頻幀的 DTS、PTS 順序是一致的。
音頻視頻混合在一起播放,就呈現了我們常常看到的廣義的視頻。在音視頻一起播放的時候,我們通常需要面臨一個問題:怎麼去同步它們,以免出現畫不對聲的情況。
要實現音視頻同步,通常需要選擇一個參考時鍾,參考時鍾上的時間是線性遞增的,編碼音視頻流時依據參考時鍾上的時間給每幀數據打上時間戳。在播放時,讀取數據幀上的時間戳,同時參考當前參考時鍾上的時間來安排播放。這里的說的時間戳就是我們前面說的 PTS。實踐中,我們可以選擇:同步視頻到音頻、同步音頻到視頻、同步音頻和視頻到外部時鍾。