我正在使用以下元数据处理M4a文件:
Metadata:
major_brand : M4A
minor_version : 0
compatible_brands: M4A mp42isom
creation_time : 2019-08-14T13:45:39.000000Z
iTunSMPB : 00000000 00000840 00000000 00000000000387C0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Duration: 00:00:05.25, start: 0.047891, bitrate: 69 kb/s
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 65 kb/s (default)
音频持续时间= 5246.2585 ms
我正在尝试使用以下公式计算帧数:
duration * sampling rate / frame size = 5246.2585 * 44.1/1024 = 225.9375 frames
我尝试了多个文件,并且始终提供xxx.9357帧。
但是,使用FFprobe:
ffprobe -i audio.m4a -show_streams -hide_banner
我正在:
nb_frames=228
我的计算与FFprobe输出之间始终存在2.0625的差异。有什么想法我在这里做错了吗?如何准确计算帧数?
影响 2048个样本,每个样本部分记录在two个数据包中。因此,如果您要正确表示价值音频样本的[[N个数据包,则需要使用N + 1个数据包。
如果我们认为这是每个影响相应 1024个样本以及next
样本块的数据包,则意味着前1024个样本无法正确表示,因此通常的做法是在编码器中用零预填充信号。在播放时,这些将被丢弃,这就是为什么信号持续时间少于通过计数数据包所期望的原因。出于某种原因,通常的做法是填充2112个样本,而不是仅填充1024个。填充长度实际上未记录在AAC文件中,并且在标准中未指定,因此每个人都只使用2112个与其他人兼容。2112个样本正好是2.0625包。如果您想了解更多有关此的信息,那么神奇的Google单词是“ AAC启动”