估计mp3压缩因子(NAudio.Lame)

时间:2016-01-20 11:28:05

标签: c# mp3 naudio lamemp3

我需要一种方法来根据以下参数执行文件未来大小的估计:

    每个样本
  • 频道数
  • 采样率
  • 样本计数
  • mp3质量(LAMEPreset)

我使用NAudio.Lame包。 C#,。Net

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

我需要一种粗略估计compressionFactor的方法。

1 个答案:

答案 0 :(得分:1)

输出大小预测最好是近似值。在各种模式(ABR,CBR,VBR)中,仅CBR(恒定比特率)具有预测输出大小。 ABR(自适应比特率)在大多数时间都接近,但在某些情况下可能与预测完全不同。 VBR是基于质量的,无法真正预测。关于所有这些here,还有更多信息。

对于LAMEPreset设置(直接从LAME标头翻译),ABR_*设置很简单。每个都是一个数字的标签,与输出中的平均千比特每秒(Kbps)相关。那么这些的输出比是:

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

(其中quality * 128是每秒平均字节数)

其余设置会在各个级别生成VBR。表here显示了数字(V0V9)与近似输出比特率之间的关系。例如LAMEPreset.V2产生大约190 Kbps的输出。该表还显示了一些命名预设 - STANDARDV2相同,等等。如源注释中所述(请参阅source),在LAME中不推荐使用命名预设,我只是没有开始标记它们。

有关每个预设使用的设置的完整列表,请查看LAME Source,特别是apply_preset方法(第320行)。