[AAC封包大小

问题描述 投票:1回答:1

我正在使用以下元数据处理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的差异。有什么想法我在这里做错了吗?如何准确计算帧数?

audio aac audio-processing ffprobe m4a
1个回答
0
投票
在AAC中,每1024个样本有一个数据包,但是每个数据包

影响 2048个样本,每个样本部分记录在two个数据包中。因此,如果您要正确表示价值音频样本的[[N个数据包,则需要使用N + 1个数据包。

如果我们认为这是每个影响相应 1024个样本以及

next

样本块的数据包,则意味着前1024个样本无法正确表示,因此通常的做法是在编码器中用零预填充信号。在播放时,这些将被丢弃,这就是为什么信号持续时间少于通过计数数据包所期望的原因。出于某种原因,通常的做法是填充2112个样本,而不是仅填充1024个。填充长度实际上未记录在AAC文件中,并且在标准中未指定,因此每个人都只使用2112个与其他人兼容。2112个样本正好是2.0625包。

如果您想了解更多有关此的信息,那么神奇的Google单词是“ AAC启动”

© www.soinside.com 2019 - 2024. All rights reserved.