Оценить коэффициент сжатия mp3 (NAudio.Lame)

Мне нужен способ выполнить оценку будущего размера файла на основе следующих параметров:

  • бит за образец
  • количество каналов
  • частота дискретизации
  • количество образцов
  • качество mp3 (LAMEPreset)

Я использую пакет NAudio.Lame. C#, .Net

int GetBytesAmountMp3(int framesAmount, WaveFormat format, LAMEPreset quality)
{
     var compressionFactor = 0.3;???
     return framesAmount * format.BlockAlign * ?;
}

Мне нужен способ грубой оценки CompressionFactor.

1 ответ

Решение

Прогноз выходного размера в лучшем случае приблизительный. Из различных режимов (ABR, CBR, VBR) только CBR (постоянная скорость передачи битов) имеет прогнозируемый размер вывода. ABR (Adaptive Bit Rate) подходит почти всегда, но в некоторых случаях может сильно отличаться от прогноза. VBR основан на качестве и его нельзя предсказать. Есть немного больше информации обо всем этом здесь.

Для LAMEPreset настройки (которые переводятся непосредственно из заголовков LAME) ABR_* Настройки просты. Каждый из них представляет собой метку для числа, которое относится к средним килобитам в секунду (кбит / с) в выходных данных. Выходной коэффициент для них тогда:

double ratio = ((double)quality * 128) / format.averageBytesPerSecond;

(где quality * 128 это среднее число байтов в секунду)

Остальные настройки производят VBR на разных уровнях. Таблица здесь показывает вам соотношение между числами (V0 в V9) и приблизительный выходной битрейт. LAMEPreset.V2 например, производит примерно 190 кбит / с. В таблице также показаны некоторые из названных пресетов - STANDARD такой же как V2 и т. д. Как отмечалось в исходных комментариях (см. источник), именованные пресеты в LAME устарели, я просто не удосужился отметить их как таковые.

Для получения полного списка настроек, которые использует каждый пресет, взгляните на источник LAME, а именно: apply_preset метод (строка 320).

Другие вопросы по тегам