Pregunta

Necesito saber el volumen promedio de un archivo mp3 para que cuando lo convierta a mp3 (a una tasa de bits diferente) también pueda escalar el volumen para normalizarlo ...

Por lo tanto, necesito una herramienta de línea de comandos / biblioteca Ruby que me dé el volumen promedio en dB.

¿Fue útil?

Solución

Puede usar sox (una herramienta de audio de línea de comandos de código abierto http://sox.sourceforge.net /sox.html ) para normalizar y transcodificar sus archivos al mismo tiempo.

EDITAR

Parece que no tiene opciones para la velocidad de bits. De todos modos, sox probablemente sea excesivo si LAME realiza la normalización.

Otros consejos

Puedes usar LAME para codificar en mp3. Tiene opciones de normalización, escalado y velocidad de bits. LAME también se compila en prácticamente cualquier plataforma.

http://mp3gain.sourceforge.net/ es una solución bien pensada para esto.

Escribí un pequeño script de contenedor, basado en la entrada anterior:

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

Se tarda un segundo más en comenzar a reproducir el archivo, y se basa en alsamixer para ajustar el volumen, pero hace un trabajo realmente agradable al evitar que tengas que ajustar constantemente el volumen maestro. Y realmente no le importa cuál sea el formato de entrada, ya que si mplayer puede reproducirlo, puede extraer el audio, por lo que debería funcionar bien con MP3, Ogg, AVI, lo que sea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top