Audio MP3文件中的前导结构是真实帧吗?

Audio MP3文件中的前导结构是真实帧吗?,audio,mp3,codec,file-format,mpeg,Audio,Mp3,Codec,File Format,Mpeg,我现在正在做一些解码MP3文件的工作,但只是对MP3文件有一些基本的了解。最近我为MP3实现了一个简单的解码器。当比较解码结果和解码器的结果时,我遇到了这个问题 我的解码器比Maaate解码器多提取一帧。在仔细检查一个示例MP3文件的结果后,我发现第一帧不正常。对于我的示例文件,第一个帧的长度为413字节,帧头为0xfffb9064,与所有其他帧的长度为100字节,帧头为0xfffb1064 我的问题是: 结果中的第一个“帧”是真实帧吗?是的,为什么它看起来和其他的不同呢?如果不是,此结构用于什

我现在正在做一些解码MP3文件的工作,但只是对MP3文件有一些基本的了解。最近我为MP3实现了一个简单的解码器。当比较解码结果和解码器的结果时,我遇到了这个问题

我的解码器比Maaate解码器多提取一帧。在仔细检查一个示例MP3文件的结果后,我发现第一帧不正常。对于我的示例文件,第一个帧的长度为413字节,帧头为
0xfffb9064
,与所有其他帧的长度为100字节,帧头为
0xfffb1064

我的问题是:
结果中的第一个“帧”是真实帧吗?是的,为什么它看起来和其他的不同呢?如果不是,此结构用于什么以及如何将其与其他结构区分开来,因为它们都共享帧同步代码
0xfff

MP3流没有文件头。听起来有点奇怪,一开始只有一帧比其他帧长,但这是完全合法的

标题中的位的快速描述如下:

在您的情况下,两种类型的头共享相同:

  • MPEG-1
  • 第三层
  • 不受保护
  • 44.1kHz
  • 没有填充物
  • 非私人
  • M/S关节立体声
  • 没有版权
  • 原始媒体
  • 不强调
第一帧与其他帧的不同之处在于:

  • 128kbit(导致417字节帧减去4字节头)
其余为:

  • 32kbit(导致104字节帧减去4字节头)
该页面中有一个公式可以根据标题计算帧大小:144*比特率/samplerate+填充


我怀疑128kbit的第一帧是用于生成样本的编码器的伪影(bug)。在第一帧之后,它仍然是一个32kbit的恒定比特率文件。考虑到MP3解码器只有几帧才能产生输出,并且不会在中途突然出现比特率波动,这不太可能打乱任何东西。

第一帧很可能是VBR帧。
检查并使用hexa编辑器。希望它能有所帮助

第一帧可以用作通常所说的“LAME标签”(尽管生成器的名称不一定是LAME)

当编码器还不知道未来的数据是什么时,已经有(并且可能仍然有)一种在ffmpeg中创建此标记的方法,因此ffmpeg将只使用一些默认值,例如128kbps,而不是MP3数据中定义的速度

因此,无论您是否有CBR或VBR数据,都不能基于该帧

要查看是否有这样的标记,请至少打印出前64个字节(或使用十六进制编辑器),您应该看到字母“Info”(CBR)或“Xing”(VBR)非常接近开始(通常在字节0x24左右)。
eyeD3
ffprobe
能够解码该标签


我有一页是关于格式的。

这不是正确的公式。正确的公式是:frame_samplerate/8*比特率/samplerate+填充为什么会被否决?从我看来,第一帧不正常的原因是合理的。