0. 前言
在H264 Extended Profile中就引入了B帧编码,一直以来同行都对B帧的意义存在争议:
- 正方:B帧能够大幅减少视频码率,并提高运动场景下的清晰度;
- 反方:B帧对码率和清晰度没多大帮助
笔者针对这个争议找了一个视频,用x264和Android MediaCodec测试验证B帧到底有没有优化效果。
1. 什么是B帧
1.1 什么是B帧?
B帧法(B frame)是双向预测的帧间压缩算法。当把一帧压缩成B帧时,它根据相邻的前一帧、本帧以及后一帧数据的不同点来压缩本帧,也即仅记录本帧与前后帧的差值。
1.2 B帧的优点
一般地,I帧压缩效率最低,P帧较高,B帧最高。
B帧能够提升运动场景清晰度。
PS:有些专家说对高速运动的场景收益是负向,但是本人没有验证过。
1.3 B帧的缺点
由于B帧参考了前后帧,带来更所以编码复杂度更高,也提高了解码复杂度。
2. B帧编码测试
2.1 软编码实验
2.1.1 测试方案
对同一个视频,通过ffmpeg/x264进行转码,在相同比特率等条件,选择开启/关闭B帧,对比PSNR。
2.1.2 测试视频
理论上B帧对运动场景编码,所以本次实验采用一个跳舞的视频,视频信息系如下:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘dance_test.mp4’:
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2018-08-06 13:08:32
genre : aweme_6585043390285482760
Duration: 00:00:13.60, start: 0.000000, bitrate: 5375 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt709/bt709), 540x960, 5244 kb/s, 30 fps, 30 tbr, 600 tbn, 1200 tbc (default