Domanda

Devo conoscere il volume medio di un file mp3 in modo che quando lo converto in mp3 (con un bitrate diverso) posso ridimensionare anche il volume, per normalizzarlo ...

Pertanto ho bisogno di uno strumento da riga di comando / libreria ruby ??che mi dia il volume medio in dB.

È stato utile?

Soluzione

Puoi usare sox (uno strumento audio da riga di comando open source http://sox.sourceforge.net /sox.html ) per normalizzare e transcodificare i tuoi file contemporaneamente.

Modifica

Sembra che non abbia opzioni per il bit rate. Ad ogni modo, sox è probabilmente eccessivo se LAME esegue la normalizzazione.

Altri suggerimenti

Puoi utilizzare LAME per codificare in mp3. Ha opzioni per la normalizzazione, il ridimensionamento e il bitrate. LAME si compila anche praticamente su qualsiasi piattaforma.

http://mp3gain.sourceforge.net/ è una soluzione ben pensata per questo.

Ho scritto un piccolo script wrapper, basato sull'input precedente:

#!/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

Ci vuole un secondo in più per avviare la riproduzione del file e si affida ad alsamixer per regolare il volume, ma fa davvero un buon lavoro per impedirti di modificare costantemente il volume principale. E non importa davvero quale sia il formato di input, poiché se mplayer può riprodurlo, può estrarre l'audio, quindi dovrebbe funzionare bene con MP3, Ogg, AVI, qualunque cosa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top