AAC 数据包大小
AAC Packet Size
我正在处理具有以下元数据的 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 毫秒
我正在尝试使用以下公式计算帧数:
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 的差异。
知道我在这里做错了什么吗?如何准确计算帧数?
在AAC中,每1024个样本有一个数据包,但每个数据包影响 2048个样本,每个样本部分记录在两个 数据包。因此,如果你想正确地表示 N 个数据包的音频样本,你需要使用 N+1 个数据包。
如果我们将此视为每个数据包影响 corresponding 1024 个样本以及 next 个样本块,那么这意味着无法正确表示前 1024 个样本,因此通常的做法是在编码器中用零预填充信号。在播放时,这些将被丢弃,这就是为什么信号的持续时间比您通过计算数据包所期望的要短。
由于某些原因,通常的做法实际上是用2112个样本而不是1024个样本来填充。填充的长度实际上没有记录在AAC文件中,也没有在标准中指定,所以大家只是使用 2112 与其他人兼容。
2112 个样本正好是 2.0625 个数据包。
如果您想了解更多,神奇的 google 单词是 "AAC priming"
我正在处理具有以下元数据的 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 毫秒
我正在尝试使用以下公式计算帧数:
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 的差异。 知道我在这里做错了什么吗?如何准确计算帧数?
在AAC中,每1024个样本有一个数据包,但每个数据包影响 2048个样本,每个样本部分记录在两个 数据包。因此,如果你想正确地表示 N 个数据包的音频样本,你需要使用 N+1 个数据包。
如果我们将此视为每个数据包影响 corresponding 1024 个样本以及 next 个样本块,那么这意味着无法正确表示前 1024 个样本,因此通常的做法是在编码器中用零预填充信号。在播放时,这些将被丢弃,这就是为什么信号的持续时间比您通过计算数据包所期望的要短。
由于某些原因,通常的做法实际上是用2112个样本而不是1024个样本来填充。填充的长度实际上没有记录在AAC文件中,也没有在标准中指定,所以大家只是使用 2112 与其他人兼容。
2112 个样本正好是 2.0625 个数据包。
如果您想了解更多,神奇的 google 单词是 "AAC priming"