| 导语 整理了一些音视频编解码中常用的几个参数知识。
一. 码率
1. 定义
码率又叫比特率/码流,是编码器(视频/音频)每秒输出的数据大小,单位是bps(Bit Per Second),一般取kbps/Mbps,是编解码中最重要的参数。
2. 影响码率因素
视频:分辨率,帧率,图像压缩程度,色彩空间(RGB)等
音频:声道数量,采样率,采样精度(8Bit/16Bit)
例子:
一个视频(720*480, 30p, 24位真彩色)
最大码率(不考虑图像压缩):720*480*24*30=248Mkps
一般视频的码率在5Mbps~10Mbps,音频码率在100kbps~500kbps
3. 码率的影响
清晰度:码率越大,压缩越小,图像还原更好,更清晰
文件大小:码率越大,文件越大
网络带宽:码率越大,单位时间传输的数据量越大,占用带宽越大
cpu/内存/缓存等:码率越大,需要越大的硬件资源
可见清晰度和其他点是相矛盾的,所以设置码率需要根据场景来权衡分析。
4. 编码模式
VBR(Variable Bitrate)
动态比特率 也就是没有固定的比特率,压缩软件在压缩时根据音视频数据即时确定使用什么比特率,这是以质量为前提兼顾文件大小的方式,推荐编码模式;
CBR(Constant Bitrate)
常数比特率 指文件从头到尾都是一种位速率。相对于VBR和ABR来讲,它压缩出来的文件体积很大,而且音质相对于VBR和ABR不会有明显的提高。
ABR(Average Bitrate)
平均比特率 是VBR的一种插值参数。LAME针对CBR不佳的文件体积比和VBR生成文件大小不定的特点独创了这种编码模式。ABR在指定的文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,可以做为VBR和CBR的一种折衷选择。
例子:
Elecard StreamEye可以用来查看视频帧的信息,下面看看VBR和CBR的差别。
VBR
CBR
VBR vs CBR
优点 | 缺点 | 适合场景 | |
---|---|---|---|
VBR | 整体压缩率高,占用空间小,质量高 | 码率波动起伏大 | 媒体存储 |
CBR | 码率稳定,压缩快 | 占用空间大,质量不稳定 | 流式播放(直播) |
5. 码率设置
H.264(也叫AVC或X.264)的文档中,视频的建议码率如下:
Android Mediacodec设置码率模式(默认VBR):
BITRATE_MODE_CBR //CBR
BITRATE_MODE_VBR //VBR
BITRATE_MODE_CQ //Constant quality mode
注意的是,不同系统平台的codec对码率模式的支持可能不一样,一般用默认模式即可,如果需要根据场景做更加精细化的设置,需要对兼容性做测试。
二. Profile & Level
1. Profile
定义:画质级别(或规格),不同级别的压缩效率和性能不同。
H264有4种基本Profile:baseline, extended, main, high
1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;
2、Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;
3、Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced), 也支持CAVLC 和CABAC 的支持;
4、High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式;
根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。
AAC:9种Profile
- MPEG-2 AAC LC低复杂度规格(Low Complexity)
- MPEG-2 AAC Main主规格
- MPEG-2 AAC SSR可变采样率规格(Scaleable Sample Rate)
- MPEG-4 AAC LC低复杂度规格(Low Complexity),现在的手机比较常见的MP4文件中的音频部分就包括了该规格音频档案,,最常用,通用性好
- MPEG-4 AAC Main主规格
- MPEG-4 AAC SSR可变采样率规格(Scaleable Sample Rate)
- MPEG-4 AAC LTP长时期预测规格(Long Term Predicition)
- MPEG-4 AAC LD低延迟规格(Low Delay)
- MPEG-4 AAC HE高效率规格(High Efficiency)
Android官方文档说明:https://developer.android.com/guide/topics/media/media-formats?hl=zh-cn
视频:
音频:
可见,Android官方文档也没有列出所有Profile参数,且不同系统版本支持程度也不一样,一般用默认值即可,需要精细化设置的话需要做兼容性测试。
看看iOS的支持程度:
2. Level
定义:即档次,每一个档次设置不同的参数(如取样速率、图像尺寸、编码比特率等),得到对应的编解码器性能的不同level。
关于Level的资料比较少,引用网上的一张表来说明不同Level的区别:
实际使用过程中,Level一般需要和Profile配合起来使用,两种结合起来会决定最终的码率,相比之下,比较简单的做法是根据实际场景的带宽程度,设置合适的码率即可,如果需要更加精细化的设置,可以通过Profile和Level来控制码率。