写在前面
Abdullah A. Muhit等人在2012年发表的论文[1],[2]。并发布了开源H.264 matlab版的代码。笔者会就着这套源码进行分解讲解。一方面为了加强自己的理解,另一方面也给学习这套源码的同学提供参考。笔者水平有限,难免会有一些错误,请各位读者批评指正。
注:这里的代码笔者进行了一些修改,剔除了一些与编码关系不大的代码。属于伪代码。
Main 函数总览
一、预操作
读入视频序列
obj=VideoReader('formancif.mov'); %obj 类中基本包含了一个视频的所有信息。


获取需要进行编码的视频序列mov
for k = 1 : nFrames %获取obj类的视频序列存入mov
mov(k).cdata = read(Obj, k);
end
设置需要编码的GOP组
// 设置需要编码的一个GOP(group of picture)组
%% Encoding Video Paramiters
Frame_start = 1; % I frame
Frame_end = 5; % Following P frames
NumberOfFrames=Frame_start+Frame_end;
由于进行压缩编码的部分通常为Y分量,所以对读入的视频序列,还要转YUV。
Resize(mov,Frame_start,Frame_end,Videow,Videoh)%1色彩空间的转换,2修改大小(不是必要的)
设置最终将会输出的比特流
bitstream = ''; % Initialize output bitstr

本文介绍了Abdullah A. Muhit等人2012年的H.264编码研究,并提供了开源MATLAB代码的解读。首先,详细阐述了预操作,包括视频读取、GOP设置及比特流初始化。接着,讲解了I帧和P帧的编码流程,特别是I帧编码的熵编码、残差块和预测步骤。然后,讨论了比特流的拼接和P帧编码的准备。最后,保存了编码后的比特流,并简要提及了解码过程。文章以整体框架为主,深入理解H.264编码的关键步骤。
最低0.47元/天 解锁文章
379





