H.264实验
H.264實驗
- 一、H.264簡介
- 1、什么是H.264
- 2、H.264優勢
- 3、H.264特點
- 二、解碼.264文件,生成YUV文件
- 三、將YUV重新編碼為H.264文件
- 1、固定碼率,不同的GOP長度及形狀編碼
- 1)GOP=15,2B幀
- 2)GOP=12,2B幀
- 3)GOP=9,2B幀
- 4)GOP=4,1B幀
- 5)GOP=12,無B幀
- 6)GOP=1,全I幀
- 2、相同的GOP長度及形狀編碼,不同的碼率
- 1)40000kb/s
- 2)20000kb/s
- 3)10000kb/s
- 3)5000kb/s
- 4)4000kb/s
- 5)1000kb/s
- 6)600kb/s
- 7)200kb/s
- 三、分析碼流的各種編碼模式和運動矢量
- 四、用播放器查看所生成碼流的質量
- 1、1000kbps碼率,GOP長度15,GOP形狀2B的視頻
- 2、200kbps碼率,GOP長度15,GOP形狀2B的視頻
- 五、生成率失真曲線
- 六、分析H.264文件
- 1、SPS和PPS信息
- 1)sps——序列參數集 (Sequence parameter set)
- a)profile_idc
- b)level_idc
- c)seq_parameter_set_id
- d)log2_max_frame_num_minus4
- e)pic_order_cnt_type
- f)log2_max_pic_order_cnt_lsb_minus4
- g)num_ref_frames
- h)gaps_in_frame_num_value_allowed_flag
- i) pic_width_in_mbs_minus1
- j)pic_height_in_map_units_minus1
- k)frame_mbs_only_flag
- 2)PPS
- a)pic_parameter_set_id
- b)seq_parameter_set_id
- c) entropy_coding_mode_flag
- d)pic_order_present_flag
- e)num_slice_groups_minus1
- f) num_ref_idx_l0_default_active_minus1
- g)num_ref_idx_l1_default_active_minus1
- h) weighted_pred_flag
- i)weighted_bipred_idc
- j)pic_init_qp_minus26
- k)pic_init_qs_minus26
- l)chroma_qp_index_offset
- m)deblocking_filter_control_present_flag
- n) constrained_intra_pred_flag
- o) redundant_pic_cnt_present_flag
- p) transform_8x8_mode_flag
- q)pic_scaling_matrix_present_flag
- 2、以一個GOP為例分析
- 1)每個圖像幀的類型及所用的編碼比特數、QP值
- 2)圖像幀號為橫坐標、每幀所用比特數為縱坐標的曲線圖
- 3)圖像幀號為橫坐標、每幀所用QP為縱坐標的曲線圖
- 4)第一個I幀
- 5)第一個P幀
- 6)B幀
一、H.264簡介
1、什么是H.264
H.264是國際標準化組織(ISO)和國際電信聯盟(ITU)共同提出的繼MPEG4之后的新一代數字視頻壓縮格式。H.264是ITU-T以H.26x系列為名稱命名的視頻編解碼技術標準之一。該標準最早來自于ITU-T的稱之為H.26L的項目的開發。H.26L這個名稱雖然不太常見,但是一直被使用著。H.264是ITU-T以H.26x系列為名稱命名的標準之一,AVC是ISO/IEC MPEG一方的稱呼。
H.264,同時也是MPEG-4第十部分,是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態圖像專家組(MPEG)聯合組成的聯合視頻組(JVT,Joint Video Team)提出的高度壓縮數字視頻編解碼器標準。這個標準通常被稱之為H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明確的說明它兩方面的開發者。
H264標準各主要部分有Access Unit delimiter(訪問單元分割符),SEI(附加增強信息),primary coded picture(基本圖像編碼),Redundant Coded Picture(冗余圖像編碼)。還有Instantaneous Decoding Refresh(IDR,即時解碼刷新)、Hypothetical Reference Decoder(HRD,假想參考解碼)、Hypothetical Stream Scheduler(HSS,假想碼流調度器)。
2、H.264優勢
- 低碼率(Low Bit Rate):和MPEG2和MPEG4 ASP等壓縮技術相比,在同等圖像質量下,采用H.264技術壓縮后的數據量只有MPEG2的1/8,MPEG4的1/3。
- 高質量的圖像:H.264能提供連續、流暢的高質量圖像(DVD質量)。
- 容錯能力強:H.264提供了解決在不穩定網絡環境下容易發生的丟包等錯誤的必要工具。
- 網絡適應性強:H.264提供了網絡抽象層(Network Abstraction Layer),使得H.264的文件能容易地在不同網絡上傳輸(例如互聯網,CDMA,GPRS,WCDMA,CDMA2000等)。
H.264最大的優勢是具有很高的數據壓縮比率,在同等圖像質量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個例子,原始文件的大小如果為88GB,采用MPEG-2壓縮標準壓縮后變成3.5GB,壓縮比為25∶1,而采用H.264壓縮標準壓縮后變為879MB,從88GB到879MB,H.264的壓縮比達到驚人的102∶1。低碼率(Low Bit Rate)對H.264的高的壓縮比起到了重要的作用,和MPEG-2和MPEG-4 ASP等壓縮技術相比,H.264壓縮技術將大大節省用戶的下載時間和數據流量收費。尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的圖像,正因為如此,經過H.264壓縮的視頻數據,在網絡傳輸過程中所需要的帶寬更少,也更加經濟。
3、H.264特點
H264標準的主要特點如下:
- 更高的編碼效率:同H.263等標準的特率效率相比,能夠平均節省大于50%的碼率。
- 高質量的視頻畫面:H.264能夠在低碼率情況下提供高質量的視頻圖像,在較低帶寬上提供高質量的圖像傳輸是H.264的應用亮點。
- 提高網絡適應能力:H.264可以工作在實時通信應用(如視頻會議)低延時模式下,也可以工作在沒有延時的視頻存儲或視頻流服務器中。
- 采用混合編碼結構:同H.263相同,H.264也使用采用DCT變換編碼加DPCM的差分編碼的混合編碼結構,還增加了如多模式運動估計、幀內預測、多幀預測、基于內容的變長編碼、4x4二維整數變換等新的編碼方式,提高了編碼效率。
- H.264的編碼選項較少:在H.263中編碼時往往需要設置相當多選項,增加了編碼的難度,而H.264做到了力求簡潔的“回歸基本”,降低了編碼時復雜度。
- H.264可以應用在不同場合:H.264可以根據不同的環境使用不同的傳輸和播放速率,并且提供了豐富的錯誤處理工具,可以很好的控制或消除丟包和誤碼。
- 錯誤恢復功能:H.264提供了解決網絡傳輸包丟失的問題的工具,適用于在高誤碼率傳輸的無線網絡中傳輸視頻數據。
- 較高的復雜度:264性能的改進是以增加復雜性為代價而獲得的。據估計,H.264編碼的計算復雜度大約相當于H.263的3倍,解碼復雜度大約相當于H.263的2倍。
二、解碼.264文件,生成YUV文件
這里我們選用老師所給的兩個264文件進行試驗。
首先需要將兩個264文件進行解碼,得到相應的YUV文件。
在這里只需要修改配置文件如下即可得到YUV文件。
三、將YUV重新編碼為H.264文件
1、固定碼率,不同的GOP長度及形狀編碼
設定碼率都為45000kb/s,為了方便觀看,成功截圖只以第一個為例
1)GOP=15,2B幀
更改GOP長度
IntraPeriod = 15 # Period of I-pictures (0=only first)更改B幀數量
NumberBFrames = 2 # Number of B coded frames inserted (0=not used) RCUpdateMode = 3 # Rate Control type. Modes supported :# 0 = original JM rate control,# 1 = rate control that is applied to all frames regardless of the slice type,# 2 = original plus intelligent QP selection for I and B slices (including Hierarchical),# 3 = original + hybrid quadratic rate control for I and B slice using bit rate statistics2)GOP=12,2B幀
更改GOP長度
IntraPeriod = 12 # Period of I-pictures (0=only first)更改B幀數量
NumberBFrames = 2 # Number of B coded frames inserted (0=not used)3)GOP=9,2B幀
更改GOP長度
IntraPeriod = 9 # Period of I-pictures (0=only first)更改B幀數量
NumberBFrames = 2 # Number of B coded frames inserted (0=not used)4)GOP=4,1B幀
更改GOP長度
IntraPeriod = 4 # Period of I-pictures (0=only first)更改B幀數量
NumberBFrames = 1 # Number of B coded frames inserted (0=not used)5)GOP=12,無B幀
更改GOP長度
IntraPeriod = 12 # Period of I-pictures (0=only first)更改B幀數量
NumberBFrames = 0 # Number of B coded frames inserted (0=not used)6)GOP=1,全I幀
更改GOP長度
IntraPeriod = 1 # Period of I-pictures (0=only first)更改B幀數量
NumberBFrames = 0 # Number of B coded frames inserted (0=not used)2、相同的GOP長度及形狀編碼,不同的碼率
這里固定GOP長度為15幀,2B幀
1)40000kb/s
只需更改下面兩個參數即可,為了方便觀看,成功截圖只以第一個為例,剩下的給出PSNR值
RateControlEnable = 1 # 0 Disable, 1 Enable Bitrate = 40000 # Bitrate(bps)2)20000kb/s
RateControlEnable = 1 # 0 Disable, 1 Enable Bitrate = 20000 # Bitrate(bps)3)10000kb/s
RateControlEnable = 1 # 0 Disable, 1 Enable Bitrate = 10000 # Bitrate(bps)3)5000kb/s
RateControlEnable = 1 # 0 Disable, 1 Enable Bitrate = 5000 # Bitrate(bps)4)4000kb/s
RateControlEnable = 1 # 0 Disable, 1 Enable Bitrate = 1000 # Bitrate(bps)5)1000kb/s
RateControlEnable = 1 # 0 Disable, 1 Enable Bitrate = 800 # Bitrate(bps)6)600kb/s
RateControlEnable = 1 # 0 Disable, 1 Enable Bitrate = 600 # Bitrate(bps)7)200kb/s
RateControlEnable = 1 # 0 Disable, 1 Enable Bitrate = 400 # Bitrate(bps)三、分析碼流的各種編碼模式和運動矢量
以1000kbps碼率,GOP長度15,GOP形狀2B為例:
由圖中可看出,顯示順序為IBBPBBPBBPBBP,但由于進行了幀重排,編解碼順序為與顯示順序不同。
此處以第一組IPBB(編解碼)為例:
四、用播放器查看所生成碼流的質量
1、1000kbps碼率,GOP長度15,GOP形狀2B的視頻
2、200kbps碼率,GOP長度15,GOP形狀2B的視頻
可以看到,相比于1000kps碼率的,該圖像變得有些模糊。
五、生成率失真曲線
由生成的碼流數據可以得到以下表格
并由上表可以畫出下圖
六、分析H.264文件
1、SPS和PPS信息
用H264Visa.exe進行分析
1)sps——序列參數集 (Sequence parameter set)
當前文件profile_idc = 100,查表可知碼流檔次為High-profile。
a)profile_idc
當前文件level_idc=31,即碼流級別為3.1
b)level_idc
c)seq_parameter_set_id
當前文件seq_parameter_set_id=0
d)log2_max_frame_num_minus4
當前文件log2_max_frame_num_minus4 = 2,
計算MaxFrameNum = 2^(log2_max_frame_num_minus4 + 4)= 64
e)pic_order_cnt_type
當前序列pic_order_cnt_type=0,采用POC mode 0。
f)log2_max_pic_order_cnt_lsb_minus4
當前文件log2_max_pic_order_cnt_lsb_minus4 = 3,
計算 MaxPicOrderCntLsb
= 2^(log2_max_pic_order_cnt_lsb_minus4+4)=128。
g)num_ref_frames
當前文件max_num_ref_frames=16,所以參考幀最大數目為16。
h)gaps_in_frame_num_value_allowed_flag
當前文件gap_in_frame_num_value_allowed_flag=0。
i) pic_width_in_mbs_minus1
因此圖像的實際寬度為16 ×(pic_width_in_mbs_minus1+1) = 16×(39+1)= 640
j)pic_height_in_map_units_minus1
因此圖像的實際高度為16 ×(pic_height_in_map_units_minus1+1) = 16×(22+1)= 368
比對視頻信息,發現與結果一致:
k)frame_mbs_only_flag
在本文件中,frame_mbs_only_flag=1。
2)PPS
a)pic_parameter_set_id
當前文件pic_parameter_set_id=0。
b)seq_parameter_set_id
當前文件seq_parameter_set_id=0。
c) entropy_coding_mode_flag
當前文件中,entropy_coding_mode_flag=1,采用CABAC方法。
d)pic_order_present_flag
當前文件中,pic_order_present_flag=0,即條帶頭中不會出現與圖像順序有關的語法元素。
e)num_slice_groups_minus1
當前文件中,num_slice_groups_minus1=0。
f) num_ref_idx_l0_default_active_minus1
當前文件中,num_ref_idx_l0_default_active_minus1=15
g)num_ref_idx_l1_default_active_minus1
當前文件中,num_ref_idx_l0_default_active_minus1=0
h) weighted_pred_flag
當前文件中,weighted_pred_flag=1。
i)weighted_bipred_idc
當前文件中,weighted_bipred_idc=2。
j)pic_init_qp_minus26
當前文件中,pic_init_qp_minus26=0
k)pic_init_qs_minus26
當前文件中,pic_init_qs_minus26=0
l)chroma_qp_index_offset
當前文件中,chroma_qp_index_offset=-2。
m)deblocking_filter_control_present_flag
當前文件中,deblocking_filter_control_present_flag=1。
n) constrained_intra_pred_flag
當前文件中,constrained_intra_pred_flag =0。
o) redundant_pic_cnt_present_flag
當前文件中,redundant_pic_cnt_present_flag=0。
p) transform_8x8_mode_flag
當前文件中,transform_8x8_mode_flag =1。
q)pic_scaling_matrix_present_flag
當前文件中,pic_scaling_matrix_present_flag=0。
2、以一個GOP為例分析
1)每個圖像幀的類型及所用的編碼比特數、QP值
由上圖可知此文件為IPPPPP格式,只有I幀與P幀,第一個為I幀剩下全為P幀
由上圖可知I幀的編碼比特數為269928bits、QP值為26
第一個P幀比特數為5024bits、QP值為26,剩下的幀也可以這樣查看,在這里不再展示。
2)圖像幀號為橫坐標、每幀所用比特數為縱坐標的曲線圖
統計每個幀所用的bit數,可以得到下表
并由上表可以畫出下圖
3)圖像幀號為橫坐標、每幀所用QP為縱坐標的曲線圖
統計每個幀所用的QP值,可以得到下表
并由上表可以畫出下圖
4)第一個I幀
其中I幀,完全使用幀內編碼,編碼類型全部為16*16,并且其中分配bit數可看下圖,塊中格數少的分配bit數少,塊中小格多的分配bit數多
5)第一個P幀
可以看到運動矢量如下:綠色的點為運動矢量因為該例子幾乎沒有運動所以為點
如下圖所示,使用了幀內編碼和幀間編碼,綠色的格子為skip有1554個,紅色的格子為幀內編碼有57個,其中有44與1616格式,看紅色格子中小格子數量。
6)B幀
因為所提供的視頻沒有B幀,因此這里采用別的視頻對B幀講解
該幀完全使用幀間編碼。黃色為B_skip宏塊,占737/920=80.11%。
其余部分上課也與老師較完全的討論過,這里不在做截圖展示。
總結
- 上一篇: 实验6_MPEG音频编码实验
- 下一篇: 频率计设计——电路部分