Как я могу программно определить, является ли MP3-файл CBR или VBR? (предпочтительно использовать c#)

#c# #mp3

Вопрос:

Я знаю множество утилит, которые могут сообщить мне скорость передачи MP3 — файла, но я никогда не видел ни одной, которая могла бы сказать мне, является ли MP3 — файл VBR (переменная скорость передачи-скорость передачи данных колеблется в файле) или CBR (постоянная скорость передачи-скорость передачи данных остается неизменной в файле). Я предполагаю, что большинство программ не заинтересованы в выяснении этого, так как это включает в себя некоторый анализ файла, чтобы увидеть, изменяется ли битрейт, что снижает скорость.

Итак, вместо того, чтобы искать утилиту, я хотел бы написать ее — так как же я могу программно определить, является ли MP3-файл VBR или CBR? Мне нужно просмотреть около 15 000 файлов, чтобы выяснить это, поэтому мне нужно автоматизировать процесс.

Ответ №1:

MP3-файлы, по сути, состоят из так называемых кадров. Каждый кадр имеет небольшой заголовок, в котором хранится информация о кадре. В заголовке также хранится, какой битрейт был использован для кадра. В файлах CBR все кадры используют один и тот же битрейт, и поэтому каждый заголовок содержит одинаковую информацию о битрейте.

Чтобы определить, использует ли файл VBR, вам нужно просмотреть каждый кадр файла, посмотреть заголовок и проверить, изменяется ли поле битрейта. Если это так, то это VBR MP3.

Полное описание формата MP3 находится здесь: http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm

Ответ №2:

Проверьте этот класс MP3Header, в нем есть метод, который сообщает вам, является ли файл mp3 VBR, и всю информацию о заголовке mp3…

 ...
boolVBitRate = LoadVBRHeader(bytVBitRate);
...
 

Комментарии:

1. Метод, используемый этим классом для определения того, является ли его файл VBR довольно ограниченным. Он просто проверяет, находит ли он строку «Xing» после (необязательного) заголовка ID3v2 файла, но это не описано никаким стандартом, и существуют кодеры, которые не вставляют «Xing», даже если это файл VBR.