几乎所有视频编码格式都可以简单的认为一帧就是编码后的一副图像。
而音频帧跟音频格式有关,由各个编码标准规定。
如果以PCM(未经编码的音频数据)来说,它根本就不需要帧的概念,根据采样率和采样精度就可以播放了。比如采样率为44.1kHZ,采样精度为16位的音频,你可以算出bps(比特率)是44100*16bps,每秒的音频数据是固定的44100*16/8= 88200 bytes
amr帧比较简单,它规定每20ms的音频是一帧,每一帧音频都是独立的,有可能采用不同的编码算法,以及不同的编码参数。
mp3帧较为复杂一点,包含采样率,比特率,等各种参数。具体如下:
说明一下,音频数据帧个数由文件大小和帧长决定,每个frame的长度可能不固定,也可能固定,由位率决定,每个frame又分为帧头和数据实体两部分,帧头记录了mp3的位率,采样率,版本等信息,帧与帧间相互独立。
有两个概念要区分
帧大小:每帧采样数,表示每一帧中采样点的个数,这是一个恒定值,由下表表示
MPEG1 | MPEG2 | MPEG2.5
Layer1 384 384 384
Layer2 1152 1152 1152
Layer3 1152 576 576
帧长度:是压缩时每一帧的长度,包括帧头。它将填充的空位也计算在内。LayerI的一个空位长4字节,LayerII和LayerIII的空位是1字节。当读取MPEG文件时必须计算该值以便找到相邻的帧。
因为有填充和比特率变换,帧长度可能变化。
从帧头中读出位率,采样率和填充
LyaerI使用公式:
帧长度(字节) = 每帧采样数 / 采样频率(HZ) * 比特率(bps)/ 8 +填充 * 4
LyerII和LyaerIII使用公式:
帧长度(字节)= 每帧采样数 / 采样频率(HZ) * 比特率(bps)/ 8 + 填充
例:LayerIII 比特率 128000,采样频率 44100HZ,填充0
=〉帧大小 417字节
所谓26ms一帧只是针对MPEG1 Layer III而且采样率为44.1KHz来说是对的,但mp3文件并不都是如此,其实这个时间也是可以通过计算来获得,下面给出计算公式
每帧播放持续时间 = 帧大小 / 采样率
转自:帧大小与帧长度_「已注销」的博客-****博客_数据帧长度怎么计算