【问题标题】:AAC Packet SizeAAC 数据包大小
【发布时间】:2020-03-29 02:28:46
【问题描述】:

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

【问题讨论】:

    标签: audio aac audio-processing ffprobe m4a


    【解决方案1】:

    在 AAC 中,每 1024 个样本有一个数据包,但每个数据包影响 2048 个样本,每个样本部分记录在 两个 个数据包中。因此,如果要正确表示 N 个数据包的音频样本,则需要使用 N+1 个数据包。

    如果我们认为这是每个数据包影响对应 1024个样本以及下一个个样本块,那么这意味着前1024个样本不能正确表示,因此通常的做法是在编码器中预先用零填充信号。在播放时,这些将被丢弃,这就是为什么信号的持续时间比您通过计算数据包所期望的要短。

    由于某种原因,通常的做法实际上是用 2112 个样本而不是 1024 个样本填充。填充的长度实际上并没有记录在 AAC 文件中,也没有在标准中指定,所以每个人都只是使用2112 与其他人兼容。

    2112 个样本正好是 2.0625 个数据包。

    如果您想了解更多相关信息,神奇的谷歌词是“AAC 启动”

    【讨论】:

    • 一个简单的问题。启动和剩余持续时间会影响音频文件的持续时间吗?
    • 没有。播放器移除多余的样本。
    猜你喜欢
    • 2017-06-01
    • 1970-01-01
    • 2017-02-22
    • 2013-01-05
    • 2016-03-19
    • 2011-02-05
    • 2017-12-22
    • 2012-10-14
    • 1970-01-01
    相关资源
    最近更新 更多