Оценить коэффициент сжатия 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).