视频编码
编码视界
fangliangsong@foxmail.com
https://zhuanlan.zhihu.com/c_157245427
展开
-
讲座”视频编解码技术简介:过去、现在及将来“
2016年7月,大疆公司视频编码技术专家郑萧桢博士在电子科大“EE论坛”做了题为“视频编解码技术简介:过去、现在及将来”的讲座。听过很多视频编码领域的学术讲座,第一次听到这么细致的讲座,受益匪浅。郑萧桢博士对H.264、HEVC、AVS2标准中的技术如数家珍。还对已经开始制定的下一代视频编码标准H.266进行了介绍。讲座后要到了PPT,后面的学习中经常打开来查阅。原创 2016-11-16 21:56:13 · 3765 阅读 · 27 评论 -
JEM software ticket45:Console output error of nQP when LCU level rate control is enabled
上星期提交了一处HM和JEM都有的bug,维护HM的人没给我回复,维护JEM的人已经采纳了我的建议。 bug报告的网址:https://hevc.hhi.fraunhofer.de/trac/jem/ticket/45#no1 bug报告的内容:原创 2017-03-15 15:14:45 · 1250 阅读 · 4 评论 -
HRD释疑
码率控制生成的码流须符合HRD(Hypothetical Reference Decoder )的要求。H.265/HEVC Recommendation的Annex C部分规定HEVC的HRD,HRD是视频编码标准的一部分。 HDR有三个关键的参数:R、B、F。R是信道传输速率,B是解码缓冲区的容量,F是初始解码缓冲区充盈度(initial decoder buffer fullness)。F在原创 2017-04-09 22:16:16 · 2935 阅读 · 1 评论 -
H.266:帧内角度预测
本文译自提案JVET-D1001的2.2.1节内容,对应的软件版本为最新的JEM4.0。为了更好地捕获展现在自然视频中的边缘方向,方向性的帧内角度模式从HEVC的33种拓展到65种。新的角度模式如下图中的红色虚线箭头所示,Planar和DC模式保持不变。这些更加密集的角度预测模式适用于任何的块大小以及亮度和色度的帧内预测。 67中帧内预测模式 为了与数量翻译 2016-11-21 22:52:43 · 4935 阅读 · 3 评论 -
H.266:模板匹配的运动矢量生成(FRUC)
模板匹配的运动矢量生成(PMMVD)模式是一种特殊的基于FRUC技术的模式。在这种模式下,块的运动信息无须标记,而是在解码端生成。当CU的merge模式flag为真时,会标记FRUC的flag。当FRUC的flag为假时,会标记merge索引,且使用常规merge模式。当FRUC的flag为真时,会标记一个额外的FRUC模式flag来表明使用哪一种方法(双边匹配或模板匹配)来产生块的运动信息。翻译 2017-01-09 12:17:47 · 2443 阅读 · 0 评论 -
H.266:更高的运动矢量存储精度
本文译自提案JVET-D1001 2.3.3小节在HEVC中,运动矢量采用1/4像素精度(420视频格式中,1/4亮度样点和1/8色度样点)。在JEM中,内部运动矢量和merge模式候选运动矢量存储的精度提高到1/16。对于编码为skip/merge模式的CU,在运动补偿帧间预测时使用更高的运动矢量精度(1/16像素)。对于编码为常规AMVP模式的CU,使用整像素或1/4像素运动,如2.3.2翻译 2016-11-29 16:26:04 · 1757 阅读 · 0 评论 -
H.266:仿射运动补偿预测
本文译自提案JVET-D1001的2.3.6小节的内容。在HEVC中,运动补偿预测(MCP)仅仅使用平移运动模型。然而在真实世界中,有各种各样的运动,例如:淡入/淡出、旋转、视角运动、不规则运动。在JEM中,使用一种简化的仿射变换来提高编码性能。如下图所示,块的运动矢量域由两个控制点运动矢量描述。 简化的仿射运动模型块的运动矢量域(MVF)由下面的方程描述:翻译 2016-11-23 11:32:21 · 2755 阅读 · 1 评论 -
评率控论文“A New Rate Control Scheme Using Quadratic Rate Distortion Model”
今晚重读了论文“A New Rate Control Scheme Using Quadratic Rate Distortion Model”,该文的作者是二次率失真模型的提出者蒋迪豪和张亚勤。 优点: 1、数学推导清晰,原创性强; 2、用统计量RMSE和F检验有力地验证了自己的模型; 3、说明了模型失效(方程无解)时的处理办法,算法严密; 4、实验结果丰富,能用实验结果中的细节点明了所原创 2017-04-17 20:49:00 · 953 阅读 · 0 评论 -
JEM software ticket42: CTU bits/distortion calculation mistake for I slice when QTBT is enabled
年前提交了H.266参考软件JEM的bug报告ticket42: CTU bits/distortion calculation mistake for I slice when QTBT is enabled 报告的地址:https://hevc.hhi.fraunhofer.de/trac/jem/ticket/42#no2 报告的主要内容: ticket42的修复代码已经集成在/tags原创 2017-02-08 11:33:28 · 984 阅读 · 0 评论 -
HEVC码率控制: Unified R-Q Model
这几天在看HM-6.2的Unified R-Q Model码率控制算法的代码,对应的提案是JCTVC-H0213,对应的文章是“Pixel-Wise Unified Rate-Quantization Model for Multi-Level Rate Control”。该模型使用二次模型计算QP。本文主要阐述其中两点:编码缓冲区、QP计算。 经典算法JVT-GO12只有一个编码缓冲区,本文要描原创 2017-04-05 22:10:23 · 2271 阅读 · 0 评论 -
失真度量与评价指标
在视频编码领域,视频质量的客观评价指标是PSNR。为了与这个客观评价指标相一致,在编码时率失真优化的过程中,编码器基本上使用SSE作为失真度量。也就是说,失真度量和评价指标是想相互联系的。原创 2017-06-14 21:04:16 · 2150 阅读 · 0 评论 -
Comparison of the Coding Efficiency of Video Coding Standards—Including High Efficiency Video Coding
该文比较了HEVC、H.264/MPEG-4 AVC、H.263、MPEG-4和H.262/MPEG-2的编码性能。 比较不同编码标准的编码器的性能,一个比较麻烦的问题是:编码配置和优化技术难以统一。编码配置包括参考帧个数、GOP结构、QP偏置等等。还有各个编码器的优化技术可能各有不同,包括运动估计算法、失真度量、lambda的计算,也会影响最终的实验结果。这两方面的问题都是比较棘手的,要想在这两原创 2017-06-13 15:57:41 · 872 阅读 · 0 评论 -
SATD的计算及代码实现
如果你去看H.264的参考软件JM、H.265的参考软件HM、AVS2的参考软件RD中哈达玛变换的实现,你会发现它们的实现代码几乎完全相同,连变量名都差不多。 值得注意的是,该变换不是归一化的哈达码变换。不使用归一化的哈达码变换的原因,没有在相关文献中找到。原创 2017-05-23 20:14:39 · 2779 阅读 · 0 评论 -
评率控论文“Lambda Domain Optimal Bit Allocation Algorithm for High Efficiency Video Coding“
该文章出自李斌博士和他师弟,原率控提案是JCTVC-M0036。该文章推导了最优比特分配时的两个结论,由于两个目标方程有问题,导致第二个结论明显错误。应该说他们的推导基于一个文章中已说明的近似,以及两个文章中未说明的近似,并不是optimal。 这篇文章给简单的方法找理论依据的方法,很有借鉴意义,类似地推导optimal hierarchical Bit allocation可参考哈工大的文章“R原创 2017-04-14 16:59:14 · 1409 阅读 · 0 评论 -
HM中AMP模式的快速算法
从HM4.0开始,有AMP模式的快速算法的标签:#define AMP_ENC_SPEEDUP 1 ///< encoder only speed-up by AMP mode skipping#if AMP_ENC_SPEEDUP#define AMP_MRG原创 2017-04-20 14:54:34 · 2331 阅读 · 0 评论 -
HM TEncCu相关说明
class TComYuv的注释是:general YUV buffer class。该注释不清楚,其实TComYuv就是用于存放一个CU的相关数据。例如,在class TEncCu中的各个depth的CU的数据:/// CU encoder classclass TEncCu{private: TComDataCU** m_ppcBestCU; ///< B原创 2017-04-12 17:33:10 · 1145 阅读 · 0 评论 -
H.265 Recommendation 7.4.2.3 在RBSP中封装SODB(非标准部分)
这个条款不属于这份文档的标准部分。本条款描述在RBSP中SODB的封装形式和在一个NAL单元中封装一个RBSP emulation_prevention_three_byte的使用,其目的如下: —为了防止NAL单元的起始码出现竞争,同时允许在一个NAL单元中出现任意的SODB。 —支持在一个NAL单元中通过在RBSP尾部搜索rbsp_stop_one_bit鉴别出SODB尾。 —使得在相同的翻译 2017-02-01 22:12:23 · 642 阅读 · 0 评论 -
HM Deblocking代码阅读
Deblocking的相关代码在TComLoopFilter.h和TComLoopFilter.cpp中。让我比较惊讶的是,TComLoopFilter.h中只声明了一个类TComLoopFilter,用一个类搞定deblocking。 还有一个与deblocking有关的一个类放在TypeDef.h中,代码如下:/// parameters for deblocking filtertyped原创 2017-04-10 22:45:19 · 1003 阅读 · 0 评论 -
H.266:自适应运动矢量精度(AMVR)
本文译自提案JVET-D1001的2.3.3小节的内容。亮度分量的BD Rate为-0.8%。 在Advanced Motion Vector Resolution (AMVR) 模式下,运动矢量差分(MVD)可以编码为1/4像素或整像素精度。MVD精度在CU层控制,含有至少一个非零MVD分量的CU使用一个整数MVD精度标记位。 当CU的整数MVD精度标志位为0,或者没有被编码,使用默认的1/4翻译 2016-11-23 22:13:18 · 3794 阅读 · 0 评论 -
H.266:请求对JEM的复杂度采取行动
本文译自提案JVET-C0105。摘要:这篇文档展示了几个机构关于JEM软件复杂度的增加情况的看法,尤其是提出创立一个新的Ad-hoc组,研究降低软件一般性复杂度的可能方法。1、最近JEM复杂度的增加情况2016年五月的日内瓦会议一开始,JEM2.0软件在RA配置的平均编码时间据说是HM软件的5.3倍。尽管相对于JEM1.0软件这个数字有所改善,但仍然足够高到阻碍很翻译 2016-11-30 21:35:07 · 1807 阅读 · 0 评论 -
H.266:信号依赖的变换(SDT)
本文译自提案JVET-D1001的2.4.3小节的内容。考虑到相邻帧之间有很多相似的块,信号依赖的变换(SDT)通过K-L变换(Karhunen-Loéve transform)挖掘这个相关性,以增强编码性能。这种训练出来的K-L变换起到更高效地压缩能量的作用。 图 24: 挖掘非局部相关性的K-L变换的流程图上面的流程图描述了这个想法。对于当前编码块C,首先,获取一个参考块,该参考块包含重建翻译 2017-02-09 22:22:42 · 1225 阅读 · 0 评论 -
HM/JEM CTU级码率控制相关代码
CTU级码率控制相关的代码主要在以下几个函数: Double getLCUTargetBpp(SliceType eSliceType); Double getLCUEstLambdaAndQP(Double bpp, Int clipPicQP, Int *estQP); Double getLCUEstLambda( Double bpp ); Int get原创 2016-12-02 14:49:04 · 1795 阅读 · 0 评论 -
JEM七种预测模式对应的主要函数
Void xCheckRDCostMerge2Nx2N( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU DEBUG_STRING_FN_DECLARE(sDebug), Bool *earlyDetectionSkipMode );#if VCEG_AZ07_FRUC_MERGE Void xCheckRDCostMerge2Nx2NFRUC原创 2016-12-08 10:53:32 · 1689 阅读 · 0 评论 -
JEM亮度QP和lambda的计算
1、默认配置: 使用JCTVC_X0038_LAMBDA_FROM_QP_CAPABILITY中的方法计算:This approach derives lambda from QP+QPoffset+QPoffset2. QPoffset2 is derived from QP+QPoffset using a linear model that is clipped between 0 and原创 2016-11-29 20:48:10 · 1787 阅读 · 0 评论 -
HM/JEM划分模式的率失真代价的计算
TEncCu用于编码一个CTU,通过成员TComRdCost* m_pcRdCost进行率失真判决。计算模式划分的率失真代价的函数如下:Double TComRdCost::calcRdCost( UInt uiBits, Distortion uiDistortion, Bool bFlag, DFunc eDFunc ){ Double dRdCost = 0.0;原创 2016-11-29 11:26:51 · 2492 阅读 · 0 评论 -
HM/JEM检查当前CU的模式是否是最优模式
如果当前模式的CU的代价小于之前的最优模式,则做处理。/** check whether current try is the best with identifying the depth of current try * \param rpcBestCU * \param rpcTempCU * \param uiDepth */#if JVET_C0024_QTBT原创 2016-11-29 11:31:45 · 1265 阅读 · 0 评论 -
JEM代码分析(一)CommonDef.h
JEM是H.266的参考软件模型,在H.265的参考软件HM16.6的基础上开发而来。截止2016年11月11日,JEM的最新版本是JEM3.2。JEM的下载网址:https://hevc.hhi.fraunhofer.de/trac/jem/browser头文件CommonDef.h里定义了一些编码时的一些常量值。如果不是很新的HM版本(例如HM16.0版本及以前),这个头文件里面是一些宏定义。在原创 2016-11-11 15:58:07 · 2445 阅读 · 0 评论 -
帧内预测二维线性插值滤波器的实现分析(不含乘除法)
在PC平台下,乘除法的运算时间远高于加减法;在FPGA平台下,做乘除法需要专门的乘法器和除法器。线性滤波器中,滤波器系数乘以信号,存在乘法。本文以HM中的TComPrediction::xPredIntraPlanar函数为例,介绍如何实现没有乘除法的线性滤波器。TComPrediction::xPredIntraPlanar实现的是帧内预测中的planar模式,planar模式使用水平和垂直原创 2016-11-21 14:45:46 · 1083 阅读 · 0 评论 -
JEM Inter/Merge/Affine的MVP candidates的建立
inter/merge/affine的MVP candidates的建立分别用以下几个函数:/** Constructs a list of candidates for AMVP * \param uiPartIdx * \param uiPartAddr * \param eRefPicList * \param iRefIdx * \param pInfo */Void TCom原创 2016-12-07 17:19:26 · 1207 阅读 · 0 评论 -
HM码率统计
HM编码完所有帧后,输出到stdout的数据格式: SUMMARY ——————————————————– Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR 500 a 1722.4448 40.8944 43.4868 42.9115 41原创 2016-12-14 22:39:37 · 1775 阅读 · 5 评论 -
关于HM/JEM Merge Candidates
TComDataCU::getInterMergeCandidates函数用于得到Merge模式的候选列表。Merge模式的候选列表最多为5个,且默认为5个: software-manual可以设置参数:MaxNumMergeCand 5 Specifies the maximum number of merge candidates to use. CommonDef.h中的最大值:stati原创 2016-12-08 16:47:56 · 857 阅读 · 0 评论 -
H.266 QTBT(Quadtree plus Binary Tree)块结构介绍
联发科提出的QTBT块结构被H.266采纳,集成在JEM-2.0及其后的版本中,取代了原来HEVC的四叉树(QT)块结构。QTBT与四叉树划分的主要区别: 1、QTBT在四叉树的叶结点,继续往下做二叉树递归遍历,其中二叉树可以水平划分和垂直划分。 2、在QTBT块结构中,CB=PB=TB,也就是说取消了PU/TU/PB/TB的概念,预测块即是变换块。 3、I slice的亮度分量的CTB和色度原创 2016-11-21 15:43:12 · 3788 阅读 · 2 评论 -
参与制定H.266标准的公司
1、Microsoft。JEVT的主席之一Gary J. Sullivan就职于微软,还有微软亚研的李斌(Bin Li)博士。 2、Qualcomm。高通的提案最多。 3、Samsung。三星是H.264的赢家,提案很多。 4、MediaTek。联发科提出来的QTBT编码结构做的很好。 5、Intel。Intel的H.265硬编码器是世界上最好的硬编码器。 6、Hisilicon。原创 2016-11-18 00:29:09 · 9478 阅读 · 0 评论 -
HM中语法元素二进制化的相关代码分析
H.265语法元素二进制化的相关代码分析H.265的语法元素的二进制化的编码主要有:截断莱斯编码(TR)、k-阶指数哥伦布编码、定长编码(FL)。值得注意的是,除了这三种编码方案外,H.265标准给part_mode、intra_chroma_pred_mode、inter_pred_idc、cu_qp_delta_abs、coeff_abs_level_remaining这五个语法元素提供了专门的原创 2017-01-26 23:21:55 · 932 阅读 · 0 评论 -
JEM使用的第三方库
HM-16.6-JEM-2.0的文件夹下,相比于HM-16.6-JEM-1.0多出了一个文件夹extlib。这个文件夹的介绍在该文件夹内的每一个文件开头用注释解释了:// This file is part of Eigen, a lightweight C++ template library// for linear algebra.//// Copyright (C) 2008-2011原创 2017-02-09 22:07:53 · 1154 阅读 · 0 评论 -
提案JCTVC-F386介绍
在函数HM的Void TEncSlice::setUpLambda(TComSlice* slice, const Double dLambda, Int iQP)中实现原创 2016-12-06 15:48:23 · 1460 阅读 · 0 评论 -
HEVC部分通测序列特点
原创 2017-01-12 22:26:27 · 665 阅读 · 0 评论 -
HM Inter/Merge模式的TMVP的计算
HM16.9支持的预测类型有两种:MODE_INTER和MODE_INTRA。 /// supported prediction type enum PredMode { MODE_INTER = 0, ///< inter-prediction mode MODE_INTRA = 1, ///< in原创 2016-12-07 16:34:15 · 1797 阅读 · 0 评论