H.264/AVC视频编解码技术详解
课时介绍
在这个工作目录下,有三个encoder.config文件,每个文件代表着三个不同的profile的配置。为了遵循从简单到复杂的原则,我们选择最简单的baseline.config,并将它复制一份,然后将文件名修改为encoder.cfg文件。我们打开这个文件,其中包含我们在编码过程中所需要的一些配置信息。第一条信息是我们要输入的带编码的yov序列,我们将其修改为我们自己的yov文件,包括头信息和startframe,帧的范围等。帧的范围表示我们在编码过程中需要编码几帧。三帧显然太少了,我们选择输入10帧来编码。视频的宽度和高度我们都保持不变,其余配置文件包括重建的yuv文件和输出的码流文件我们也都保持不变。
接下来是编码控制部分,包括profileidc和profileindex,表示我们选择了哪个profile,我们在这里选择了baseline profile,这个是为66。然后下面一部分是encode control部分,我们希望编码出来的码流全部是igen的码流,我们可以将参数introperior从0改为1,如果原来是0进行编码,只有第一帧会当做是igen帧。第二个参数idrintroenable表示是否强制所有的igen帧全部是idr关键帧,我们选择0表示不开启。其他参数都使用默认值,不进行修改。
然后我们编译这个工程,命令参数中没有填任何值,因为我们修改的文件名为encoder.config后,代码会默认选用这个文件作为它的配置文件,然后我们运行它,就开始编码过程。第一帧为idr关键帧,其余的编号为0的都为关键帧,其余的1到9表示都是igen帧,总共10帧。其他参数包括帧率、哈达码变换是否使用、图像格式为176x144,平均编码时间和结构等都表示采用熵编码的方法,Profile和Level的值等等。我们在工作目录中检查test.h264,这是生成的H.264码流文件,然后这个encode表示它的日志,因为现在是关闭的,所以里面没有任何内容,而test.reconstruct.yuv表示它在编码过程中重建的视频图像,我们将这个图像和原始的对比,可以看出编码过程中产生的失真。
接下来我们来看看如何使用GM中的解码器,对我们刚刚编码的过程进行解码。首先我们找到Decode的工程,然后生成它。我们进入工作目录,找到Decode.config这个文件,它指定了需要解码的码流文件以及解码之后的输出文件,Rec.yuv表示参考针。因为现在test.264与我们之前所生成的文件是一致的,所以我们直接将这个文件填写到debug的参数里面,然后就可以运行了。我们需要清理一下工程,然后选择Decode直接运行,已经完成解码。我们在工作目录下看到test.decode.yuv,它是解码之后的输出文件。我们将这个文件和编码时的重建YUV图像进行比对,只有这两个是完全一致的,才表示我们的编解码过程是匹配的,所以这个过程才是正确的。最后介绍从下集开始,我们将会进入到分析H.264码流的高层语法结构的学习。
课程介绍
H.264/AVC是目前业界应用为广泛的视频压缩编码标准,包含了先进而且较为成熟的视频编码技术。本课程将从原理、标准和实现等多个角度,详细讲述了H.264/AVC视频编码标准的整体架构与技术细节,不但讲解了H.264/AVC标准协议文档中的内容,还通过实际的H.264码流分析/解码程序的开发来帮助观众更深入地理解H.264编码标准的原理。
推荐课程
信息系统项目管理师自考笔记
李明 · 513人在学
python从0到1:期货量化交易系统(CTP实战,高频及合成K线数据
王先生 · 20610人在学
手把手搭建Java超市管理系统【附源码】(毕设)
汤小洋 · 4050人在学
Java毕设springboot外卖点餐系统 毕业设计毕设源码 使用教
黄菊华 · 732人在学
基于SSM酒店管理系统(毕设)
小尼老师 · 786人在学
java项目实战之购物商城(java毕业设计)
Long · 5073人在学
手把手搭建Java求职招聘系统【附源码】(毕设)
汤小洋 · 1459人在学
Python Django 深度学习 小程序
钟翔 · 2235人在学
城管局门前三包管理系统+微信小程序(vue+springboot)
赖国荣 · 497人在学
Vue+Uni-app(uniapp)入门与实战+赠送仿美团点餐小程序
李杰 · 3843人在学