Как определить битовую глубину AAC

6413
Steven Penny

С wavфайлом, например, вы можете легко различать глубину в битах

24-битный

Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 44100 Hz, stereo,  s32, 2116 kb/s 

16-битный

Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s 

Однако AAC кажется непостижимым

Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 151 kb/s 
1

2 ответа на вопрос

9
Karan

AAC - это формат с потерями (например, MP3), и, как объясняет Википедия (действительно, та же статья, на которую вы ссылались):

Глубина в битах имеет смысл только в отношении цифрового сигнала ИКМ. Форматы, отличные от PCM, такие как форматы сжатия с потерями, не имеют связанных битовых глубин. Например, в MP3 квантование выполняется на выборках ИКМ, которые были преобразованы в частотную область.

3
Mr. Kennedy

ffprobe сообщает правильную битовую глубину, но только когда есть битовая глубина для отчета, иначе он правильно сообщает, что «битовая глубина» не применима (N / A).

В отчете FFmpeg о поле данных «bits_per_raw_sample» и в ответе Каранса «битовая глубина» является неправильным для аудио, закодированного AAC.

Если вы пытаетесь исследовать файл данных, вам может grep -eпотребоваться, чтобы «codec_name» различало, какие потоки (видео, аудио, текст) сообщает «bits_per_raw_sample». Это позволяет легко узнать, относится ли сообщаемый статус битовой глубины к видеокодеку или аудиокодеку:

$ ffprobe -show_streams <input_file.mp4> | grep -e codec_name -e bits_per_raw_sample 

... пример итогового отчета о видео и аудио файлах данных:

codec_name=h264 <----- video bits_per_raw_sample=8 <----- 8-bit depth video codec_name=aac <----- AAC audio bits_per_raw_sample=N/A <----- bit depth is "Not Applicable" to AAC audio 

Вам может понравиться эта статья " Аудиокодирование демистифицировано "

Бит глубина

Наряду с частотой дискретизации необходимо учитывать и битовую глубину. Глубина в битах - это количество цифровых битов информации, используемых для кодирования каждой выборки. Проще говоря, битовая глубина измеряет «точность». Чем выше битовая глубина, тем точнее сигнал может передавать амплитуду фактического аналогового источника звука. При минимальной глубине в битах у нас есть только два варианта измерения точности звука: 0 для полной тишины и 1 для полной громкости. Чем выше битовая глубина, тем выше точность по сравнению с закодированным звуком. В качестве примера: звук с качеством CD является стандартным 16-битным, что дает на выбор 216 (или 65 536) томов.

Глубина в битах фиксирована для кодирования PCM, но для кодеков сжатия с потерями (таких как MP3 и AAC) она рассчитывается во время кодирования и может варьироваться от образца к образцу.

... так, чтобы ответить на вопрос "Как определить битовую глубину AAC?" Я полагаю, вам придется делать это на основе каждого образца.

Полный и хорошо подробный ответ. dark_st3alth 7 лет назад 1
* для кодеков со сжатием с потерями (таких как MP3 и AAC) он рассчитывается во время кодирования и может варьироваться от семпла к семплу * -> все еще будет ограничение на битовую глубину. Если MP3 кодируется из 16-битного источника PCM, то при декодировании не следует ожидать 24-битной точности. Gyan 7 лет назад 0
@Mulvya, ffmpeg находится в стадии разработки. Если вы хотите, вы можете написать функцию для ffmpeg, которая проанализировала глубину в битах каждого сэмпла и сообщила, что диапазон, однако «bits_per_raw_sample» не является постоянным целым числом с AAC, и авторы ffmpeg сочли нужным обратиться к этому стандарту цифрового аудио сообщая, что термин «битовая глубина» «неприменим» (N / A) к файлам AAC. Mr. Kennedy 7 лет назад 0
Я не жалуюсь :) Просто указываю на то, что есть одна действительная (фиксированная) мера, о которой можно сообщить -> битовая глубина выборок, подаваемых в кодировщик. Gyan 7 лет назад 0
@Mulvya, аналогично, было бы полезно узнать диапазон, но я действительно не вижу, как, кроме как в крайних случаях, и что можно было бы получить, вычисляя весь диапазон как часть распечатки метаданных? FFmpeg построен для скорости. Как я уже сказал, эта опция может быть добавлена ​​в качестве функции, если и когда вы хотите, чтобы ffmpeg сообщал об этом, однако, для отраслевых стандартов «битовая глубина» неправильно для описания файлов AAC. Mr. Kennedy 7 лет назад 0
@Mulvya, чтобы быть ясным, вы делаете правильный и здравый смысл. Если вы считаете вопрос или ответ полезным, пожалуйста, проголосуйте соответственно. Спасибо! Mr. Kennedy 7 лет назад 0

Похожие вопросы