2016-01-20 3 views
0

je besoin d'un moyen d'effectuer des estimations de la taille future du fichier sur la base des paramètres suivants:Estimation mp3 facteur de compression (NAudio.Lame)

  • bit par échantillon
  • canaux comptent
  • taux d'échantillonnage
  • comptent
  • échantillons
  • qualité mp3 (LAMEPreset)

J'utilise le paquet NAudio.Lame. C#, .Net

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

J'ai besoin d'un moyen d'estimer grossièrement le facteur de compression.

Répondre

1

La prédiction de la taille de sortie est au mieux approximative. Parmi les différents modes (ABR, CBR, VBR) seul CBR (Constant Bit Rate) a une taille de sortie prédictive. ABR (Adaptive Bit Rate) se rapproche la plupart du temps, mais peut être très différent de la prédiction dans certains cas. VBR est basé sur la qualité et ne peut pas vraiment être prédit. Il y a un peu plus d'informations sur tout cela here.

Pour les paramètres LAMEPreset (qui sont traduits directement à partir des en-têtes LAME), les paramètres ABR_* sont simples. Chacun est une étiquette pour un nombre qui se rapporte à la moyenne kilobits par seconde (Kbps) dans la sortie. Le ratio de sortie de ceux-ci est alors:

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

(où quality * 128 est octets moyenne par seconde)

Le reste des paramètres produisent VBR à différents niveaux. Le tableau here vous montre la relation entre les nombres (V0 à V9) et le débit binaire de sortie approximatif. Par exemple, LAMEPreset.V2 produit une sortie d'environ 190 Kbps. Comme indiqué dans les commentaires de la source (voir le source), les préréglages nommés sont obsolètes dans LAME, je n'ai pas eu l'occasion de les marquer comme tels .

Pour une liste complète des paramètres utilisés par chaque préréglage, consultez le LAME Source, en particulier la méthode apply_preset (ligne 320).