从在线流中记录的损坏的 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 等 Adobe 应用程序以一种有趣的方式对待它们。例如,他们将它们导入为单声道,而它们应该是立体声,最糟糕的是,音频的前半部分在整个持续时间中以 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】:问题的核心似乎是 Adobe(AE、PP、ME)未能正确处理 ADTS 容器中的 HE-AACv2 格式,这显然是在线广播流的标准。 Wiki notesAdobe Flash Player 有问题,似乎所有其他 Adobe 产品都有问题。
Adobe 将此类文件视为 48000Hz 单声道,而它们实际上是 24000Hz 单声道,带有用于参数通道解码的附加参数通道(这是 HE-AACv2 的主要功能)。看起来 Adobe 对这个单声道拉伸做了一些不自然的事情,以制作具有相同持续时间的 48000Hz 文件。但这只是我的猜测,不知道 Adobe 到底是做什么的。
自然的解决方法是转换为另一种格式。例如,即使在 ADTS 中,AAC-LC 也可以与 Adobe 配合使用。
仅作记录:
声波是什么样子的。
【讨论】:
以上是关于从在线流中记录的损坏的 AAC 文件的主要内容,如果未能解决你的问题,请参考以下文章
Spark - 使用 JSON 文件的许可模式将所有记录移动到损坏的列
xlrd 读取 xls XLRDError:不支持的格式,或损坏的文件:预期的 BOF 记录;找到 '\r\n<html>'