当在谈论一个视频编码标准时,实际指是什么?相关论文,还是编解码器代码,或者其他东西?
比如H.264视频编码标准,当论文或书上看到它时,通常是H.264/AVC的形式,如下:
It was standardized by the ITU-T Video Coding Experts Group (VCEG) of Study Group 16 together with the ISO/IEC JTC1 Moving Picture Experts Group (MPEG). The project partnership effort is known as the Joint Video Team (JVT). The ITU-T H.264 standard and the ISO/IEC MPEG-4 AVC standard (formally, ISO/IEC 14496-10 – MPEG-4 Part 10, Advanced Video Coding) are jointly maintained so that they have identical technical content. The final drafting work on the first version of the standard was completed in May 2003.
ITU-T是把这个标准命名为H.264,ISO/IEC称为AVC,实际上是同一个标准的不同名称。那这个标准具体是指什么呢?
ITU-T官网上,可以免费下载这个标准,第一版发布是2003年5月,最新版2021年8月。下载页面如下所示:
下载的视频编码标准建议书所示如下:
封面如上,也叫它"白皮书",所谓H.264/AVC视频编码标准,指的是这个PDF建议书。
视频编码标准里面都规定了一些什么呢?如果大家之前研究过此标准,会知道里面只规定有关于码流语法元素和语义,以及具体解码过程,具体规定内容如下图箭头所示。
实际上,ITU-T和ISO/IEC制定的所有视频编码标准,都只对解码过程进行标准化规定。标准对视频源输入后进行预处理过程,及编码参数选择过程,码流解码以后后处理过程不会做统一规定。(注意这里指解码过程,不一定是解码器)
具体说,视频编码标准对码流和语法进行格式限制,统一规定语法元素的解码过程。从而保证任意一个符合此标准的解码器,对符合这个标准的压缩码流都能进行解码,且解码后都能得到相同的结果(语法值和YUV)。
不要觉得标准只规范解码过程,编码器可随意发挥。编码器输出的码流需要符合标准规定的形式和语法,其次编码器中获取参考帧的预测环路也有解码过程,如下图红色线。
从解码器和编码器实现维度说,编码器灵活度要比解码器好很多。解码器只能按照标准实现,而编码器的编码模式选择,运动估计MV搜索,码率控制QP计算,都可采用不同算法实现和优化,只需将模式类型,MV值,QP值写进码流里,符合标准要求即可。
思考一些:
1.假如实现支持此标准的编码器或解码器,要照着标准去写代码?
没必要,每代视频编码标准会相应提供开源代码参考软件(包括编码器和解码器),如H.264有C语言实现的JM,H.265有C++语言实现的HM,H.266有C++语言实现的VTM,按照参考软件重构或改写即可。但参考软件一般注重标准实现,若要满足产品化编解码器的实时性要求,需要自己优化。
2.一段压缩后的视频码流,怎么确定它是不是H.264标准?
使用参考软件JM解码器(H264参考软件JM19.0的编译和使用),解码码流,若解码过程不出错,解码后YUV画面正常,即为H.264标准的码流。
3.每代视频编码标准制定,需要历时数载,怎样的过程?
编解码标准委员会向大家征求提案和建议,并评估其方案可行性,组织撰写必要文档、进行测试和实验,确定编解码器工具和压缩性能,直到达到新一代视频标准的压缩目标。