Question

J'ai besoin de connaître le volume moyen d'un fichier mp3 pour pouvoir le réduire aussi lorsque je le convertis au format mp3 (à un débit différent), afin de le normaliser ...

J'ai donc besoin d'un outil de ligne de commande / bibliothèque de ruby ??qui me donne le volume moyen en dB.

Était-ce utile?

La solution

Vous pouvez utiliser sox (outil audio de ligne de commande open source http://sox.sourceforge.net /sox.html ) pour normaliser et transcoder vos fichiers en même temps.

EDIT

On dirait qu'il n'a pas d'options pour le débit binaire. Quoi qu'il en soit, sox est probablement excessif si LAME effectue la normalisation.

Autres conseils

Vous pouvez utiliser LAME pour encoder au format mp3. Il a des options pour la normalisation, la mise à l'échelle et le débit. LAME compile également sur pratiquement toutes les plateformes.

http://mp3gain.sourceforge.net/ est une solution bien pensée pour cela.

J'ai écrit un petit script wrapper, basé sur l'entrée ci-dessus:

#!/bin/sh

# Get the current volume (will reset to this later).
current=`amixer -c 0 get Master 2>&1 |\
    awk '/%/ {
              p=substr($4,2,length($4)-2);
              if( substr(p,length(p)) == "%" )
                 {
                 p = substr(p,1,length(p)-1)
                 }
             print p
             }'`

# Figure out how loud the track is.  The normal amplitude for a track is 0.1. 
#   Ludicrously low values are 0.05, high is 0.37 (!!?)
rm -f /tmp/$.out
/usr/bin/mplayer -vo null -ao pcm:file=/tmp/$.out $1 >/dev/null 2>&1
if [ $? = 0 ] ; then
    amplitude=`/usr/bin/sox /tmp/$.out -n stat 2>&1 | awk '/RMS.+amplitude/ {print $NF}'`
fi
rm -f /tmp/$.out

# Set an appropriate volume for the track.
to=`echo $current $amplitude | awk '{printf( "%.0f%%", $1 * 0.1/$2 );}'`
echo $current $amplitude | awk '{print "Amplitude:", $2, "  Setting volume to:", 10/$2 "%,  mixer volume:", $1 * 0.1/$2}'
amixer -c 0 set Master $to  >/dev/null 2>&1

mplayer -quiet -cache 2500 $1

# Reset the volume for next time.
amixer -c 0 set Master "$current%"  >/dev/null 2>&1

Il faut une seconde supplémentaire pour commencer à lire le fichier et compte sur alsamixer pour régler le volume, mais permet de ne pas avoir à ajuster constamment le volume principal. Et quel que soit le format d'entrée, peu importe le format d'entrée, car si mplayer peut le lire, il peut extraire l'audio, il devrait donc fonctionner correctement avec les formats MP3, Ogg, AVI, peu importe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top