Вопрос

Мне нужно знать среднюю громкость mp3-файла, чтобы при конвертации его в mp3 (с другим битрейтом) я мог также масштабировать громкость, чтобы нормализовать ее...

Поэтому мне нужен инструмент командной строки/библиотека Ruby, которая дает мне среднюю громкость в дБ.

Это было полезно?

Решение

Вы можете использовать sox (аудиоинструмент с открытым исходным кодом для командной строки). http://sox.sourceforge.net/sox.html) для одновременной нормализации и перекодирования файлов.

РЕДАКТИРОВАТЬ

Похоже, у него нет настроек битрейта.В любом случае, sox, вероятно, будет излишним, если LAME выполнит нормализацию.

Другие советы

Вы можете использовать LAME для кодирования в mp3. У этого есть варианты для нормализации, масштабирования и битрейта. LAME также компилируется практически на любую платформу.

http://mp3gain.sourceforge.net/ - это хорошо продуманное решение для этого.

Я написал небольшой скрипт-обертку на основе приведенного выше ввода:

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

Для запуска воспроизведения файла требуется дополнительная секунда, и для регулировки громкости используется alsamixer, но он действительно отлично справляется с тем, чтобы вам не приходилось постоянно настраивать основной объем. И его не волнует, какой формат ввода, потому что если mplayer может его воспроизвести, он может извлечь аудио, поэтому он должен нормально работать с MP3, Ogg, AVI и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top