I've write simple shell script for calculate ReplayGain and convert it into ID3v2 tag (mp3 file must already has ID3v2 tag). Maybe it will be usefull for someone.
Calculate ReplayGain for all .mp3 files into current directory as one album.
Tested only on my system.
Required executables id3v2, mp3gain and eyeD3.
CODE
#!/bin/sh
if ! which id3v2 >/dev/null; then
echo "id3v2 executable not found." >&2
exit 1
fi
if ! which mp3gain >/dev/null; then
echo "mp3gain executable not found." >&2
exit 1
fi
if ! which eyeD3 >/dev/null; then
echo "eyeD3 executable not found." >&2
exit 1
fi
if [[ $# > 1 || $# == 1 && $1 != "-f" ]]; then
echo "Usage: `basename $0` [-f]" >&2
echo " for ReplayGain'ing all mp3 file into current directory" >&2
echo " -f -- force re-ReplayGain'ing for already ReplayGain'ed files" >&2
exit 2
fi
if [[ $# == 0 ]]; then
if id3v2 -l *.mp3 | egrep -qi '^TXXX .*\(replaygain_album_gain\)';then
echo "Files already ReplayGain'ed." >&2
exit 1
fi
fi
mp3gain *.mp3
TMPFILE=`tempfile`
for n in *.mp3; do
mp3gain -s c "$n" > $TMPFILE
mp3gain -s d "$n"
TRACK_GAIN=`cat $TMPFILE|awk '/^Recommended "Track" dB / {printf("%+.2f dB", $5)}'`
TRACK_PEAK=`cat $TMPFILE|awk '/^Max PCM / {printf("%.6f", $7/32768)}'`
ALBUM_GAIN=`cat $TMPFILE|awk '/^Recommended "Album" dB / {printf("%+.2f dB", $5)}'`
ALBUM_PEAK=`cat $TMPFILE|awk '/^Max Album PCM / {printf("%.6f", $8/32768)}'`
eyeD3 \
--set-user-text-frame="replaygain_track_gain:$TRACK_GAIN" \
--set-user-text-frame="replaygain_track_peak:$TRACK_PEAK" \
--set-user-text-frame="replaygain_album_gain:$ALBUM_GAIN" \
--set-user-text-frame="replaygain_album_peak:$ALBUM_PEAK" \
"$n"
done
rm -f $TMPFILE
if ! which id3v2 >/dev/null; then
echo "id3v2 executable not found." >&2
exit 1
fi
if ! which mp3gain >/dev/null; then
echo "mp3gain executable not found." >&2
exit 1
fi
if ! which eyeD3 >/dev/null; then
echo "eyeD3 executable not found." >&2
exit 1
fi
if [[ $# > 1 || $# == 1 && $1 != "-f" ]]; then
echo "Usage: `basename $0` [-f]" >&2
echo " for ReplayGain'ing all mp3 file into current directory" >&2
echo " -f -- force re-ReplayGain'ing for already ReplayGain'ed files" >&2
exit 2
fi
if [[ $# == 0 ]]; then
if id3v2 -l *.mp3 | egrep -qi '^TXXX .*\(replaygain_album_gain\)';then
echo "Files already ReplayGain'ed." >&2
exit 1
fi
fi
mp3gain *.mp3
TMPFILE=`tempfile`
for n in *.mp3; do
mp3gain -s c "$n" > $TMPFILE
mp3gain -s d "$n"
TRACK_GAIN=`cat $TMPFILE|awk '/^Recommended "Track" dB / {printf("%+.2f dB", $5)}'`
TRACK_PEAK=`cat $TMPFILE|awk '/^Max PCM / {printf("%.6f", $7/32768)}'`
ALBUM_GAIN=`cat $TMPFILE|awk '/^Recommended "Album" dB / {printf("%+.2f dB", $5)}'`
ALBUM_PEAK=`cat $TMPFILE|awk '/^Max Album PCM / {printf("%.6f", $8/32768)}'`
eyeD3 \
--set-user-text-frame="replaygain_track_gain:$TRACK_GAIN" \
--set-user-text-frame="replaygain_track_peak:$TRACK_PEAK" \
--set-user-text-frame="replaygain_album_gain:$ALBUM_GAIN" \
--set-user-text-frame="replaygain_album_peak:$ALBUM_PEAK" \
"$n"
done
rm -f $TMPFILE
Edit: change code to codebox
