문제

mp3 파일을 mp3로 변환할 때(다른 비트 전송률로) 볼륨을 조정하여 정규화할 수 있도록 mp3 파일의 평균 볼륨을 알아야 합니다.

따라서 평균 볼륨을 dB 단위로 제공하는 명령줄 도구/루비 라이브러리가 필요합니다.

도움이 되었습니까?

해결책

Sox (오픈 소스 명령 줄 오디오 도구 http://sox.sourceforge.net/sox.html) 파일을 동시에 정규화하고 트랜스 코딩하려면.

편집하다

비트 급 옵션이없는 것 같습니다. 어쨌든, 절름발이가 정상화를한다면 삭스는 아마도 과잉 일 것입니다.

다른 팁

당신이 사용할 수있는 절뚝거리는 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

파일 재생을 시작하는 데 1초가 더 걸리고 alsamixer를 사용하여 볼륨을 조정하지만 지속적으로 마스터 볼륨을 조정할 필요가 없도록 해주는 정말 훌륭한 작업입니다.그리고 입력 형식이 무엇인지는 별로 신경 쓰지 않습니다. mplayer가 재생할 수 있다면 오디오를 추출할 수 있으므로 MP3, Ogg, AVI 등 무엇과도 잘 작동할 것이기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top