H.264 / MPEG-4 AVC & 巨集塊數
一、IPCM巨集塊簡介
在H.264中,一個巨集塊包括16*16個畫素,I巨集塊有三種形式:
- 16個I4x4編碼方式組成的巨集塊(為了方便,簡稱I4x4方式的巨集塊);
- I16x16巨集塊;
- IPCM巨集塊(特殊)
分塊越細,就越準確,所以I4x4編碼方式適合編碼那些紋理比較複雜的巨集塊,而I16x16編碼方式就更加籠統,適合編碼那些比較平滑的區域。
最特別的是IPCM巨集塊,這種巨集塊的脾氣很古怪:不預測,沒殘差,不變換,無量化等操作,而是直接傳畫素值,直接將最原始的yuv資料寫入到碼流中,可見IPCM的資訊不會有任何損失,是完全無損的. 如果將視訊的所有巨集塊都編碼成IPCM巨集塊,那麼H.264就是一個無損編碼,當然,在現實中,很少有人這麼做。
視訊應用五類舉例:
1、news(新聞):變化和運動的區域比較小(比如人臉,一般佔視訊畫面的15%),背景是靜止的。
2、soccer(足球):包含大面積統一方向的運動。鏡頭通常會在一個統一顏色的背景下(綠色)跟蹤一個快速運動的物體(足球)。
3、cartoon(卡通):主題在運動,背景是絕對靜止的。
4、panorama(全景畫):包含大面積統一方向的運動,運動方向是一致的。
5、rest(其他):除以上幾種之外的視訊都屬於這一類。通常包含大量雜亂的運動,或者有很多鏡頭切換。
二、級別詳表
High Profile的最大位元率是Base / Extended / Main Profile的1.25倍,Hi10P是3倍,Hi422P / Hi444PP是4倍。
亮度取樣的數量是巨集塊數量的16×16 = 256倍(並且每秒亮度取樣的數量是每秒巨集塊數量的256倍)
針對表格的一些講解說明:
Level:級別。
Max macroblocks:最大巨集塊數。注:巨集塊尺寸是16x16的。
per second:每秒(的最大巨集塊數)。可用於約束幀率。
per frame:每幀(的最大巨集塊數)。可用於約束解析度。
Max video bit rate (kbit/s):最大視訊位元速率。不同檔次(Profile)下會有區別。
BP:Baseline Profile,基線檔次。
XP:Extended Profile,進階檔次。
MP:Main Profile,主要檔次。
HiP:High Profile,高階檔次。
Hi10P:High 10 Profile,高階10位檔次。
Hi422P:High 4:2:2 Profile,高階4:2:2檔次。
Hi444PP:High 4:4:4 Predictive Profile,高階4:4:4(實驗性?)檔次。
Examples for high resolution @ frame rate (max stored frames):範例:高解析度@幀率(最大儲存幀數)。
三、解析度和幀率的計算
解碼圖片緩衝
H.264 / AVC編碼器使用先前編碼的圖片來預測其他圖片中樣本的值。這使編碼器能夠有效地決定對給定影象進行編碼的最佳方式。在解碼器處,這樣的圖片被儲存在虛擬解碼圖片緩衝器(DPB)中。DPB的最大容量,以幀(或場對)為單位,如上表右列中的括號所示,可以計算如下:
capacity = min(floor(MaxDpbMbs /(PicWidthInMbs * FrameHeightInMbs)),16)
注1:floor(x)是向向下取整。
其中MaxDpbMbs是下表中作為級數的函式提供的常數值,並且PicWidthInMbs和FrameHeightInMbs是編碼視訊資料的圖片寬度和幀高度,以巨集塊為單位表示(四捨五入為整數值並考慮裁剪和巨集塊配對時適用)。
這裡以巨集塊數1616,480P(800480)作為例子舉例:
水平巨集塊數(PicWidthInMbs )= ceil(視訊寬度 / 16) = ceil(480 / 16) = 30
垂直巨集塊數(FrameHeightInMbs)= ceil(視訊高度 / 16) = ceil( 800 / 16 ) = 50
注:ceil(x)為向上取整函式
每幀巨集塊數 = 水平巨集塊數 * 垂直巨集塊數 = 50 * 30 = 1500
查上面的級別詳表,可知支援 每幀巨集塊數1500 的最低階別是2.2。
級別2.2所允許的 每秒最大巨集塊數(Max macroblocks per second) 是 20250。20250 / 1500 = 13.5。即最高支援每秒13.5幀。
相關文章
- H.264碼流結構 (H.264 Data Structure)Struct
- LOG巨集的引數問題
- H.264中的幀
- 巨集定義跟多個引數
- android AVC錯誤修改許可權方法Android
- OceanBase 儲存層程式碼解讀(三)巨集塊儲存格式
- 用一個巨集實現求兩個數中的最大數
- 巨集_變數_函式_指標_標頭檔案變數函式指標
- 數論——數論分塊
- H.264學習筆記——基本概念筆記
- SVC(Scalable Video Coding) for H.264資源整理IDE
- Android SELinux avc dennied許可權問題解決方法AndroidLinux
- 巨集定義
- HEVC 、H.264與AVS2 視訊壓縮
- OceanBase 原始碼解讀(九):儲存層程式碼解讀之「巨集塊儲存格式」原始碼
- h.264又out了,英偉達老黃用神經網路代替傳統的h.264影片編解碼器 - petapixel神經網路API
- 區間眾數(分塊)
- 數論分塊學習
- iOS標頭檔案中如何在巨集裡引用已有的巨集iOS
- 為什麼Web3亮點在於其資料庫? - AVCWeb資料庫
- NGINX巨集觀手記Nginx
- ABAP巨集的除錯除錯
- 區塊鏈數字版權,區塊鏈數字藏品交易系統開發區塊鏈
- 無人車與巨集觀交通:從微觀模型到巨集觀模型模型
- c 語言中巨集定義和定義全域性變數的區別變數
- 數論分塊擴充套件套件
- [除數函式+除法分塊]函式
- 區塊鏈100講:區塊鏈中的隨機數區塊鏈隨機
- AVC:預計2018年全球智慧手機出貨量全面屏佔40%
- confluence使用巨集時亂碼
- Visual Studio 2015 新新增巨集
- 2018,工作巨集觀總結
- c語言巨集的使用C語言
- offsetof與container_of巨集分析AI
- 侯巨集:數字化轉型的誤區與公司戰略的關鍵
- 關於C99可變引數巨集的例項程式碼講解
- C語言實現可變引數列表的system介面:巨集__VA_ARGS__C語言
- 第二章 編譯FFmpeg並開啟H.264編碼編譯