Покадровое декодирование MPEG-2 AAC - PullRequest
0 голосов
/ 03 мая 2018

У меня есть отдельные аудиокадры, закодированные в формате MPEG-2 AAC. Каждый кадр состоит из 1024 16-битных выборок PCM.

Я заметил, что каждый кадр AAC имеет свой размер. Я предполагаю, что это является результатом алгоритма сжатия MPEG-2 AAC и совершенно нормально.

Мне нужен способ декодировать один кадр и вернуть исходные сэмплы 1024 PCM (с ошибкой из-за сжатия с потерями, это нормально).

Я не смог найти информацию об алгоритме MPEG-2 AAC ВСЕГДА онлайн. Это своего рода орехи.

Я пытался приблизиться к работе, используя библиотеку под названием pydub, которая содержит несколько методов, использующих декодер AAC FFMPEG. Попытка загрузить аудиокадр как аудиосегмент с использованием кодировки AAC:

audioData = BytesIO(frame)
sound = AudioSegment.from_file(audioData, format="aac")

выдает следующую ошибку:

[aac @ 000002d444c1aa00] Estimating duration from bitrate, this may be inaccurate\r\n
Input #0, aac, from 'C:\\Users\\jmk_m\\AppData\\Local\\Temp\\tmpjl3x0xao':\r\n
  Duration: 00:00:00.19, bitrate: 23 kb/s\r\n
Stream #0:0: Audio: aac (LC), 22050 Hz, mono, fltp, 23 kb/s\r\nStream mapping:\r\n
Stream #0:0 -> #0:0 (aac (native) -> pcm_s16le (native))\r\n
Press [q] to stop, [?] for help\r\n
Output #0, wav, to 'C:\\Users\\jmk_m\\AppData\\Local\\Temp\\tmpxmp942e4':\r\n
Metadata:\r\n
ISFT            : Lavf58.10.100\r\n
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, mono, s16, 352 kb/s\r\n
Metadata:\r\n      encoder         : Lavc58.13.100 pcm_s16le\r\n
[aac @ 000002d444cc7480] Reserved bit set.\r\n
[aac @ 000002d444cc7480] Prediction is not allowed in AAC-LC.\r\n
Error while decoding stream #0:0: Invalid data found when processing input\r\n
[aac @ 000002d444cc7480] Reserved bit set.\r\n
[aac @ 000002d444cc7480] Prediction is not allowed in AAC-LC.\r\n
Error while decoding stream #0:0: Invalid data found when processing input\r\n
[aac @ 000002d444cc7480] Prediction is not allowed in AAC-LC.\r\n
Error while decoding stream #0:0: Invalid data found when processing input\r\n
size=       2kB time=00:00:00.04 bitrate= 366.2kbits/s speed=5.45x    \r\n
video:0kB audio:2kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 3.808594%\r\n
Conversion failed!\r\n"

Если у кого-то есть понимание того, что может быть причиной ошибки, или каких-либо альтернативных подходов, это будет очень цениться!

...