實驗原理
實驗流程
将不同的視訊序列編碼為.264檔案
固定碼率,以不同的GOP長度及形狀編碼
GOP=15,2B幀;GOP=12,2B幀,GOP=9,2B幀
GOP=4,1B幀;GOP=12,無B幀;GOP=1,全I幀
相同的GOP長度及形狀,不同的碼率
例:300kb/s, 200kb/s,100kb/s,…
用碼流分析軟體檢查所生成的碼流中各種編碼模式和運動矢量等資訊
用播放器觀看所生成碼流的品質
生成率失真曲線
調試過程
需改動的參數:
encoder.cfg
LINE194: HierarchicalCoding = 0 關閉B幀Hierarchy編碼模式
LINE13/16/30/31/33/34/57/58/59: 一些基本輸入輸出參數
LINE73: IDRPeriod IDR(Instantaneous Decoding Refresh)幀間隔,标志着GOP的開始,是以IDRPeriod也是GOP長度。這裡需要和LINE72的IntraPeriod區分,IntraPeriod是I幀間隔,而一個GOP内可以有多個I幀,但隻有一個IDR幀。參考http://blog.sina.com.cn/s/blog_520811730101jlsa.html#cmt_2512661
180NumberBFrames: B幀數,指的是I幀/P幀之間的B幀數。如GOP=12,B=2時幀結構為:IBBPBBPBBPBB
LINE444/445: 調整可變輸出碼率
編碼幀數FramesToBeEncoded的選擇:要想對比不同GOP類型和不同碼率下編碼後的失真程度和一些參數,每次的編碼幀數應相同。如果在GOP為4時隻編碼4幀,則無法壓到比較小的輸出碼率,比如要求輸出100kbps,在這種情況下隻能輸出229kbps。
實驗結果
不同輸出碼率下每一幀編碼結果及參數(GOP15B2)
設定碼率(kbps) | 實際碼率(kbps) | 結果 |
---|---|---|
50 | 119.81 | |
100 | 119.81 | |
200 | 192.62 | |
300 | 290.03 | |
400 | 395.44 | |
500 | 489.10 | |
600 | 591.46 |
對比發現每組前4幀的比特數都相等,随後每幀的比特數都根據設定的輸出碼率,有不同程度的增加。分析這是由H.264某些自适應機制決定的(?)
率失真曲線
由于輸出碼率設定為50k時,實際輸出碼率和設定為100k時的實際碼率相等,猜測可能100k時已經達到碼率最低底線,是以輸出碼率僅以100k作為起始。當輸出全I幀時,實際輸出碼率固定在6000k,是以沒有畫全I幀的圖像。
在相同碼率下,沒有B幀時的視訊客觀品質(Y-PSNR)最高。GOP越短,低碼率的視訊客觀品質越高。碼率和視訊客觀品質呈非線性關系,低碼率段100-250的斜率大于高碼率段250-400,在低碼率段提升碼率,視訊客觀品質提升更顯著。
用碼流分析軟體檢查所生成的碼流中各種編碼模式和運動矢量等資訊
幀類型 | 幀 |
---|---|
I幀 | |
P幀 | |
B幀 | |
B幀 |
以上幾幅圖檔分别是用碼流分析軟體H264Visa,對生成的.264檔案進行檢視的結果。圖像中的标記的是每個塊的運動矢量,一個塊的大小不定,從16x16~4X4。I幀為幀内編碼沒有運動矢量,P幀為前向預測編碼,運動矢量為綠色,B幀為雙向預測編碼,運動矢量有紅綠兩種顔色。
參考:http://www.cnblogs.com/xkfz007/archive/2012/07/27/2612038.html
碼流分析軟體H264Visa可以檢視.264檔案的資料和編碼資訊,比如:幀資訊、宏塊資訊、像素資訊。可以檢視幀序号、圖檔尺寸、編碼方式、塊類型、YUV通道等等資訊。
用播放器觀看所生成碼流的品質
GOP長度/類型 \ 設定輸出碼率(kbps) | 100 | 200 | 300 | 400 |
---|---|---|---|---|
15 / 2B幀 | ||||
12 / 2B幀 | ||||
9 / 2B幀 | ||||
4 / 1B幀 | ||||
12 / 0B幀 | ||||
1 / 全I幀 |
主觀上看,長GOP、無B幀的視訊品質不好。比較推薦GOP長12,2B幀的方案。
另:GOP長4,1B幀碼率最低隻能到300k,全I幀碼率為6000k,是以這兩個方案在此表中沒有參考價值(設定的輸出碼率和實際的輸出碼率不一緻)