H264默认宏块划分16X16,其下还有子宏块
y:16x16
u,v:8x8
帧间预测,根据I帧运动矢量的补偿
DCT离散余弦变换
去除空间信号的相关性
将差值变成一组系数(标准奇函数的加权值)。可重建残差值
量化(有损压缩)
熵编码
量化后二次压缩(无损)
1.变长编码:哈夫曼编码,指数哥伦布编码,CAVLC
2.算数编码:CABAC (压缩率更高)
H.264原始码流NALU,分两层
。VCL: 包括核心压缩引擎和块,宏块和片的语法级别定义;
。NAL: 负责将VCL产生的比特字符串适配到各种各样的网络和多元环境中
VCL数据封装进NAL单元 (NALU)
序列参数集:sps
图像参数及:pps
pps和sps是特殊得NALU,一个mp4只有一个sps,有很多个pps
sps在所有NALU最开头
FFmpeg预设编码器
zerolatency:不能设置b帧
ABR平均比特率
bit_rate
CQP恒定质量
QP:量化因子,constant QP:CQP
H.264QP范围从0到51
x264默认23 (18效果较好)
x265默认28 (25效果较好)
QP越低,质量越好,但空间会增大,无法控制比特率
av_opt_set_int(c->priv_data,"qp",10,0);
CBR恒定比特率(NAL填充,不支持mp4)
av_opt_set_int(c->priv_data,"nal-hrd","cbr",0);
CRF恒定速率因子
提供恒定质量,参数复杂,QP会变
av_opt_set_int(c->priv_data,“crf","23",0);