H264學習筆記(2):H264編碼器
在上一節中簡要介紹了編碼器的原理,這節主要記錄了H264編碼器的相關內容。
H264為了提高預測精度,編碼器可以從一組前面或後面已編碼影象中選出一個或兩個與當前最匹配的影象作為幀間編碼間的引數影象,這樣一來複雜度大大增加,但多次比較結果使匹配後的預測精度顯著改進,H264最多可以從15個引數影象中進行選擇,選出最佳匹配的影象。
因此對於P幀可以從list0中選擇引數影象,B幀可以從list0和list1中選擇引數影象。
片中包含一個或多個巨集塊
片組包含一個或多個片
影象中包含一個或多個片組
影象序列號:POC
=========================================================================
幀內預測:幀內預測模式中,預測塊是基於已編碼重建塊和當前塊形成的。對亮度畫素而言,預測塊用4x4或16x16巨集塊的相關操作。4x4亮度子塊有9中可選預測模式,獨立預測每一個4x4亮度子塊,適用於帶有大量細節的影象編碼,16x16亮度塊有4中預測模式,預測整個16x16亮度塊,適用於平坦區域的編碼,色渡口也有4中預測模式,類似於16x16亮度塊預測模式,編碼器通常使用預測快和編碼塊之間最小的預測模式。
I_PCM編碼模式:該模式下,編碼器直接傳輸影象畫素值,而不經過預測和變換,在一些特殊情況下,特別是影象內容不規則或者量化引數非常低時改模式比起常規操作(幀內預測-變換-量化-熵編碼)效率更高。
I_PCM目的:允許編碼器精確的表示畫素值,提供表示不規則影象內容的準確值,而不引起重大的資料量增加,嚴格限制巨集塊解碼位元數,但不損害編碼效率。
在以往視訊壓縮編碼標準中,幀內編碼被引入變換域,H264幀內編碼則參考預測塊左上方的已編碼的臨近畫素點,被引入空間域,但是,如果參考預測塊是幀間編碼巨集塊,該預測會音參考塊的運動補償引起誤碼擴散。所以參考塊通常選擇幀內編碼的臨近塊。
4x4亮度預測模式:以上方和左方畫素為已編碼和重構畫素,根據預測畫素加權平均獲得。
16x16亮度預測模式:根據上方和左方畫素推匯出
訊號化幀內預測模式:每個4x4塊幀內預測模式必須轉成訊號傳給解碼器,該資訊可能需要大量位元表示,但臨近塊的幀內模式通常是相關的。例如,ABE分別為左邊,上邊和當前塊,如果A和B預測模式為模式1,E的最佳預測模式很可能也是模式1,所以通常利用這種關聯性訊號化4x4幀內模式。
對於每個當前塊E,編碼器和解碼器計算最可能預測模式和AB預測模式的叫囂著,如果這些相鄰塊不被提供,響應值A或B置2(DC預測模式)
幀內預測的所有預測都不能跨片邊界預測,每片必須獨立編解碼。
實際現象分析:在視訊編碼的時候,如果設定了關鍵幀產生間隔,並且位元速率相對較低的情況下會出現一種情況,每隔幾秒就會產生一次花屏,之後逐漸清晰,之後再產生一次花屏,之後逐漸又清晰,依次往復。目前分析,原因是:關鍵幀即IDR幀只使用幀內預測,而此時限制了位元速率,因此,關鍵幀的幀內預測粒度較大,所以產生花屏,之後的非關鍵幀多采用幀間預測變換編碼,所需的位元速率相對較低,因此逐漸清晰。因此可以得出結論,視訊的時間冗餘比空間冗餘高。
=========================================================================
B片用到了兩個已編碼影象列表:list0和list1.包括短期和長期影象,這兩個列表都包含了前向和後向的已編碼影象。例如影象序列如下:
123,125,126,127,128,129,130
假定當前幀為127,則
list0:126,125,123,128,129,130
list1:128,129,130,126,125,123
官方解釋兩個影象列表的定義如下:
list0:最近前向影象(基於POC)標為index0,接著是其餘前向影象(POC遞增順序),及後向影象(從當前影象POC遞增順序)
list1:從最近後向影象表位index0,接著是其餘後向影象(POC遞增順序),即前向影象(從當前影象POC遞增順序)
POC在上面有解釋:影象序列號
B片預測模式選擇:巨集塊分割,雙向選擇方式,參考列表選擇方式。B片中巨集塊分割可由多種預測方式中的一種,實現,如直接模式,利用list0的運動補償模式,利用list1的運動補償模式,利用list0和list1的雙向運動補償模式。每種分割可選擇各自不同的預測模式。如果8x8分割被使用,每個8x8分割鎖選擇的模式適合於分割中的所有亞分割。
B片的雙向預測:參考塊(與當前分割或亞分割相同尺寸)是由list0和list1的參考影象推出的,從list0和list1恩別得出兩個運動補償參考區域,需要兩個運動向量,而預測塊的畫素取list0和list1相應畫素的平均值。
B片直接預測:直接預測模式編碼的B片巨集塊或巨集塊分割不傳送運動向量,解碼器計算基於已編碼的運動向量的list0和list1,並計算出解碼殘差畫素的雙向預測運動補償,B片中的skip巨集塊便由解碼器用直接模式重建而得。在片頭會指明將用時間還是空間方式計算直接模式或其分割的向量。
B片直接預測的空間模式:如果第一幅list1參考影象的共同為之巨集塊或分割有一個運動向量幅度小於±1/2亮度畫素,其一個或兩個預測向量置為0,否則預測list0和list1向量用以計算雙向運動補償。
B片直接預測的時間模式:找出list1影象的共同位置巨集塊或分割響應的list0參考影象,該list0參考作為當前巨集塊或分割的list0參考。找出list1影象的共同位置巨集塊或分割相應的list0運動向量。計算當前影象和list1影象的POC的運動向量,作為新的list1運動向量。計算當前影象和list0影象的POC的運動向量作為新的list0運動向量。這些模式在預測參考巨集塊或分割不提供或幀內編碼等情況下需要作出調整。
加權預測:加權預測是一種用來修正P或B片中運動補償預測畫素的方法,H264提高3中加權預測類:P片巨集塊明確加權預測,B片巨集塊明確加權預測,B片巨集塊隱晦加權預測.每個預測畫素pred0和pred1在運動補償之前通過加權係數w0和w1修正,在明確的加權預測中,加權係數由編碼器決定並在片頭中傳輸,在隱晦型別中w0和w1由相應的list0和list1參考影象的時間位置推出,大的係數用於時間上接近當前影象的情況,小的則用於時間桑原理當前影象的情況.課件H264採用樹狀結構的運動補償技術,提高了預測能力,特別是,小塊預測提高了處理更好的運動能夠描述的能力,產生更好影象質量,H264運動向量的精度提高到1/4畫素(亮度),運動補償演算法的預測能力得到進一步提高,H264還提供多參考幀可選模式,這將產生更好的視訊質量和效率更高的視訊編碼.相對於1幀參考5個參考幀可以節約5-10%的位元率,且有助於位元流的恢復,也不是說參考幀越多越好,考慮到緩衝區的能力和編碼器的效率目前一般都選取3-5個參考幀.
相關推薦
H264學習筆記(2):H264編碼器
在上一節中簡要介紹了編碼器的原理,這節主要記錄了H264編碼器的相關內容。 H264為了提高預測精度,編碼器可以從一組前面或後面已編碼影象中選出一個或兩個與當前最匹配的影象作為幀間編碼間的引數影象,這樣一來複雜度大大增加,但多次比較結果使匹配後的
H264學習筆記(1):視訊壓縮編碼的基本原理
陸陸續續學習H264有一段時間了,曾經以為自己可以在這方面大有作為,但是越是學習越發現,根本不存在能夠大幅度提升H264效能的方案,對於我這種水平的人來講。初次學習,概念的理解仍然很困難。在這裡我只是簡單淺顯的講一講我最近的讀書學習感想。 首先
Node.js學習筆記(2):基本模塊
依次 常用模塊 nbsp 兩個 避免 ESS 第三方 text 編程 Node.js學習筆記(2):基本模塊 模塊 引入模塊 為了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,這樣,每個文件包含的代碼就相對較少,很多編程語言都采用這種組織代碼的方式。在No
開源容器openshift學習筆記(2):新增Registry元件
開篇之前如果沒有安裝openshift環境可以參考我的博文:centos7下安裝openshift 本系列部落格學習筆記參考《開源容器雲openshift》一書:下載連線:https://download.csdn.net/download/u012371097/10745382  
linux學習筆記(2):檔案管理
1. 建立 建立檔案 touch 檔名 舉例:touch file1 flie2 flie3… 新建目錄 mkdir 目錄名 舉例:mldir dir 建立遞迴目錄 mkdir -p 目錄名/目錄名/目錄名… 舉例:mkdir -p dir1/dir2/dir3 2. 刪除 刪除檔案
學習筆記(2):模擬登陸抽屜網(ajax)
import requests ''' 目的:模擬登陸抽屜網 工具:python3 所用模組:requests ----->模擬瀏覽器的請求,並且得到返回訊息 ''' # 1.登陸地址的獲取: # 抽屜網的登陸頁面並不是重新整理整個頁面,屬於ajax區域性請求,要首先
Xilinx-ZYNQ7000系列-學習筆記(2):用XADC測外部溫度值
Xilinx-ZYNQ7000系列-學習筆記(2):用XADC測外部溫度值 一、XADC簡介 Zynq器件XADC模組包括2個12位元1 MIPS的模數轉換器和相關的片上感測器,內建溫度感測器和功耗感測器,可實時監測片內結溫、各路電壓資料,並可輸出告警訊號。 XADC模擬輸入包括專用
《崔慶才Python3網路爬蟲開發實戰教程》學習筆記(2):常用庫函式的安裝與配置
python的一大優勢就是庫函式極其豐富,網路爬蟲工具的開發使用也是藉助於這一優勢來完成的。那麼要想用Python3做網路爬蟲的開發需要那些庫函式的支援呢? 與網路爬蟲開發相關的庫大約有6種,分別為: 請求庫:requests,selenium,ChromeDrive
WPF學習筆記(2):準確定位彈出窗
效果圖:使彈出的列表框緊隨在單元格的下邊緣。 第一次,嘗試在XAML中設定Popup的定位方式:Placement="Mouse"。基本能夠定位,但當在輸入前移動滑鼠,列表框就會隨滑鼠位置顯示,偏離了預定位置。 第二次,嘗試在XAML中設定Popup的定位目標:PlacementTarget="{Bi
Python學習筆記(2):生成隨機數
Python中的random模組提供了一些很有用的方法來幫我們生成隨機數。接下來我們來看一下random模組中都包括哪些方法。 randint randint方法接收兩個整型引數a和b,其中第一個引數必須小於第二個引數(可以等於,但是沒有意義)。然後返回
ROS學習筆記(2):在ROS中使用OpenCV進行簡單的影象處理---程式碼實現篇
再上一篇blog中,筆者總結了ROS系統中使用OpenCV庫的進行簡單影象處理的原理、系統相關的設定和程式包的下載。在這篇部落格中,筆者將從程式碼層面介紹如何實現在ROS系統中讀取圖片,並使用OpenCV進行影象處理,在返回結果。 例項:從ROS中讀取圖象,轉換後將彩色圖象
ros學習筆記(2):編寫publisher
三大步驟: 初始化 ROS 系統 在 ROS 網路內廣播我們將要在 chatter 話題上釋出 std_msgs/String 型別的訊息 以每秒 10 次的頻率在 chatter 上釋出訊息 查手冊http://docs.ros.org/jade/api/rosc
STM32學習筆記(2):儲存器對映和儲存器重對映(Memory Map and Memory Remap)
“對映”一詞首先是在數學中接觸到的,在認識儲存器對映或儲存器重對映前先回顧一下數學中對對映一詞的解釋。 對映的定義:如果集合A中的每個元素在對應法則f的作用下,在集合B中都有唯一的一個元素與它對應,那麼集合A,B及對應法則f稱為集合A到集合B的一個對映,
網易微專業——Java Web開發工程師學習筆記(2):Tomcat
目錄結構:bin:可執行檔案conf:配置檔案lib:Tomcat依賴庫temp:臨時資料夾webapps:預設的應用部署目錄work:供web應用使用bin:啟動指令碼通過改變環境變數JAVA_OPTS,常見啟動引數-server -Xms512m -Xmx512mserv
Golang內建庫學習筆記(2)-web服務器相關
c中 issue hook col err orm 服務器 srv per package main import ( "net/http" "fmt" "strings" "log" ) func sayHelloName(w htt
機器學習筆記(六):KNN分類器
1 KNN演算法 1.1 KNN演算法簡介 KNN(K-Nearest Neighbor)工作原理:存在一個樣本資料集合,也稱為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類對應的關係。輸入沒有標籤的資料後,將新資料中的每個特徵與樣本集中資料對應的特
STM32學習筆記(5):通用定時器PWM輸出
PWM的輸出管腳是確定好的,具體的引腳功能可以檢視《STM32參考手冊》的“8.3.7 定時器複用功能重對映”一節。在此需要強調的是,不同的TIMx有分配不同的引腳,但是考慮到管腳複用功能,STM32提出了一個重映像的概念,就是說通過設定某一些相關的暫存器,來使得在其他非原始指定的管腳上也能輸出PWM。但是這
ARM Cortex-A8 的學習筆記(2)——ARM暫存器
上一篇介紹了關於學習ARM的開發環境以及工程檔案編譯過程,今天,學習了關於ARM的CPU工作模式以及ARM暫存器部分,現整理一下筆記。 一、ARM指令集與Thumb指令集
5.27:cocos2d-x初探學習筆記(2)--重要概念及Test樣例結構(轉)
這樣的 發生 菜單 add css 基礎 dsm 人的 添加 1.幾個重要概念 在cocos2d引擎中,有幾個概念,各自是導演。場景,布景和人物角色。 導演(CCDirector):在cocos2d-x引擎中,導演類是遊戲的組織者和領導者。導演制定規則讓遊戲內的場
.net core 2.0學習筆記(四):遷移.net framework 工程到.net core
編譯 its evel hashtable ref 學習筆記 inline null 創建 在遷移.net core的過程中,第一步就是要把.net framework 工程的目標框架改為.net core2.0,但是官網卻沒有提供轉換工具,需要我們自己動手完成了