从在线流中记录的损坏的 AAC 文件

Posted

技术标签:

【中文标题】从在线流中记录的损坏的 AAC 文件【英文标题】:Corrupted AAC files recorded from online stream 【发布时间】:2018-06-30 00:46:36 【问题描述】:

我正在以我所知道的最简单的方式从 AAC 无线电流中录制音频:

r = requests.get('http://someradio.net:someport/stream.aac', stream=True)
self.new_filename()

with open(self.filename, 'wb') as f:
  try:
    for block in r.iter_content(self.chunk_size): f.write(block)
  except KeyboardInterrupt:
    pass 

生成的音频文件未正确编码(我猜是这样),导致 Premiere Pro 等 Adob​​e 应用程序以一种有趣的方式对待它们。例如,他们将它们导入为单声道,而它们应该是立体声,最糟糕的是,音频的前半部分在整个持续时间中以 2 倍的速度拉伸,而后半部分则丢失了。

所以我使用 FFmpeg 和 Audiosegment(显然,它知道如何处理这些文件)将 AAC 转换为 MP3,这在 Premiere 中运行良好:

stream = AudioSegment.from_file('output.aac', 'aac')
stream.export('output.mp3', format='mp3')

录音很长,转换需要时间和资源。

我很确定可以对原始 AAC 做一些非常简单的事情,这样它们就可以被 Premiere 正确读取,我只是不知道它是什么。


添加 1:我认为这可能与我正在从中间录制正在进行的流的事实有关,因此 AAC 文件的标题或其他内容没有正确写入。也就是说,单声道/立体声属性似乎搞砸了。

添加 2:Adobe Premiere Pro、After Effects 和 Media Encoder 遇到的问题都是最新版本(CC 2018,4 月)。播放器(MPC、VLC、WMP)和 Vegas Pro 等所有其他应用程序都认为这些 AAC 很好。

添加 3:一个类似的问题(未回答),涉及从在线流录制、AAC 和 2 倍慢的音频损坏: AAC stream resampled incorrectly

【问题讨论】:

【参考方案1】:

问题的核心似乎是 Adob​​e(AE、PP、ME)未能正确处理 ADTS 容器中的 HE-AACv2 格式,这显然是在线广播流的标准。 Wiki notesAdobe Flash Player 有问题,似乎所有其他 Adob​​e 产品都有问题。

Adobe 将此类文件视为 48000Hz 单声道,而它们实际上是 24000Hz 单声道,带有用于参数通道解码的附加参数通道(这是 HE-AACv2 的主要功能)。看起来 Adob​​e 对这个单声道拉伸做了一些不自然的事情,以制作具有相同持续时间的 48000Hz 文件。但这只是我的猜测,不知道 Adob​​e 到底是做什么的。

自然的解决方法是转换为另一种格式。例如,即使在 ADTS 中,AAC-LC 也可以与 Adob​​e 配合使用。


仅作记录:

声波是什么样子的。

【讨论】:

以上是关于从在线流中记录的损坏的 AAC 文件的主要内容,如果未能解决你的问题,请参考以下文章

Spark - 使用 JSON 文件的许可模式将所有记录移动到损坏的列

错误:不支持的格式,或损坏的文件:预期的 BOF 记录

xlrd 读取 xls XLRDError:不支持的格式,或损坏的文件:预期的 BOF 记录;找到 '\r\n<html>'

不支持的格式或损坏的文件:预期的 BOF 记录;找到 b'\n\n\n\n\n\n<!'

master库损坏如何恢复

Android FFMpeg——使用FFMpeg解码h264aac