Размер пакета AAC

Я работаю над файлом M4a со следующими метаданными:

Metadata:
    major_brand     : M4A 
    minor_version   : 0
    compatible_brands: M4A mp42isom
    creation_time   : 2019-08-14T13:45:39.000000Z
    iTunSMPB        :  00000000 00000840 00000000 00000000000387C0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  Duration: 00:00:05.25, start: 0.047891, bitrate: 69 kb/s
    Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 65 kb/s (default)

Продолжительность звука = 5246,2585 мс

Я пытаюсь рассчитать количество кадров, используя следующую формулу:

duration * sampling rate / frame size = 5246.2585 * 44.1/1024 = 225.9375 frames

Я пробовал несколько файлов, и он всегда дает кадры xxx.9357.

Однако при использовании FFprobe:

ffprobe -i audio.m4a  -show_streams -hide_banner

Я получаю:

nb_frames=228

Между моими расчетами и выводом FFprobe всегда есть разница в 2,0625. Любые идеи, что я делаю неправильно здесь? Как я могу точно рассчитать количество кадров?


person Ahmed Hawary    schedule 04.12.2019    source источник


Ответы (1)


В AAC на каждые 1024 выборки приходится один пакет, но каждый пакет воздействует на 2048 выборок, и каждая выборка частично записывается в два пакета. Таким образом, если вы хотите правильно представить N пакетов звуковых сэмплов, вам нужно использовать пакеты N+1.

Если представить, что каждый пакет влияет на соответствующие 1024 выборки, а также на следующий блок выборок, то это означает, что первые 1024 выборки не могут быть правильно представлены, поэтому обычной практикой является предварительное дополнение сигнала нулями в энкодере. При воспроизведении они будут отброшены, и поэтому продолжительность сигнала меньше, чем можно было бы ожидать, подсчитывая пакеты.

По какой-то причине общепринятой практикой является заполнение 2112 сэмплами вместо 1024. Длина заполнения на самом деле не записывается в файле AAC и не указывается в стандарте, поэтому все просто используют 2112 для совместимы со всеми остальными.

2112 выборок — это ровно 2,0625 пакетов.

Если вы хотите узнать больше об этом, волшебные слова Google: «заполнение AAC».

person Matt Timmermans    schedule 14.12.2019
comment
Быстрый вопрос. Влияют ли продолжительность прайминга и остатка на продолжительность аудиофайла? - person Ahmed Hawary; 24.12.2019
comment
Нет. Плеер удаляет лишние сэмплы. - person Matt Timmermans; 24.12.2019