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

时间:2018-06-30 00:46:36

标签: python audio stream adobe aac

我正在以我所知道的最简单的方式记录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')

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

我很确定可以对原始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 个答案:

答案 0 :(得分:1)

问题的核心似乎是Adobe(AE,PP,ME)无法正确处理ADTS容器中的HE-AACv2格式,这显然是在线广播流的标准。 Wiki notes Adob​​e Flash Player遇到了问题,似乎其他所有Adobe产品也有问题。

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

自然的解决方法是转换为另一种格式。例如,即使在ADTS中,AAC-LC也可以在Adobe上正常工作。


仅作记录:

What sound waves look like

声波是什么样的