在AAC中转换后ffmpeg错误的音频文件

时间:2017-02-23 08:26:10

标签: audio ffmpeg aac

我在使用FFmpeg时遇到编码问题。 我有一个带有aac音频的au mp4文件。我试着用ffmpeg复制音频。 在源mp4文件中,第一个音频噪声出现在0.30秒。 使用ffmpeg -i inputfile.mp4 -c:a copy outputfile.aac进行转换后,生成的文件错误,第一个音频噪音出现在0.32秒。 文件的持续时间也不一样。

当我强制编码器到libfaac时,它可以工作,但文件太大了。

那么为什么在使用默认编码器时它不起作用(aac,libfdk_aac)? 请注意,当我从大胆转换时会出现相同的内容。

非常感谢

1 个答案:

答案 0 :(得分:4)

在音频流中存在填充帧,解码器需要该填充帧以解码第一帧。这是ACT等MDCT音频编解码器的技术要求。在像MP4 / MKV这样的定时样本容器中,第一帧具有负的呈现时间戳。在原始AAC比特流中,第一帧被天真地解码。每帧有1024个样本,因此持续时间为21-23 ms。您在时间上的差异是由于该偏移。重新包装到像M4A这样的容器中以避免这种情况。

背景,来自Apple

  

AAC需要超出源PCM音频样本的数据才能   由于其性质,正确编码和解码音频样本   编码算法。 AAC编码使用连续变换   每1024个音频样本应用2048个音频样本集   (重叠)。要正确解码音频,两者都要进行转换   需要1024个音频样本的周期。出于这个原因,编码器添加   在第一个“真实”音频样本之前至少有1024个静音样本,   并经常添加更多。这被称为各种“启动”,“启动   样本“,或”编码器延迟“。

  

缺少编码器延迟和余数的显式表示   样本不是AAC编码特有的问题。使用MPEG-4和   ADTS / MPEG-2比特流和文件容器,仍然没有   令人满意的,明确表示编码器延迟或   剩余样本。 MP3也有这些数据依赖和延迟   它的比特流,如AC-3等专有编解码器。