| /Scripts |
aac2mp3
Ok here is a little script that does all that in one step. THX to Nico for a good working one, and BIG thanks to Reto L. for a new improved version that comes with switches for program paths, bitrate and more useful options! see 'aac2mp3 -h' for a help text
#format bash
#!/bin/bash
#
# $Id: aac2mp3,v 1.2 2005/08/22 15:32:34 rali Exp $
#
#
# Convert one or more AAC/M4A files to MP3. Based on a script example
# I found at: http://gimpel.gi.funpic.de/Howtos/convert_aac/index.html
#
ME=`basename ${0}`
AAC2WAV="/usr/bin/mplayer"
WAV2MP3="/usr/bin/lame"
EXT="m4a"
BITRATE="192"
do_usage() { # explanatory text
echo "usage: ${ME} [-b nnn] [-e ext] [-f] [-c] [-r] [-v] [-h] [file list]"
echo " Convert music from AAC format to MP3"
echo " -l /path/app Specify the location of lame(1)"
echo " -m /path/app Specify the location of mplayer(1)"
echo " -b nnn bitrate for mp3 encoder to use"
echo " -e ext Use .ext rather than .m4a extension"
echo " -f Force overwrite of existing file"
echo " -c Delete original AAC|M4A file(s)"
echo " -s Keep intermediate .wav file(s)"
echo " -v Verbose output"
echo " -h This information"
exit 0
}
do_error() {
echo "$*"
exit 1
}
file_overwrite_check() {
if [ "$FORCE" != "yes" ]
then
test -f "${1}" && do_error "${1} already exists."
else
test -f "${1}" && echo " ${1} is being overwritten."
fi
}
create_wav() { # use mplayer(1) to convert from AAC to WAV
file_overwrite_check "${2}"
test $VERBOSE && echo -n "Creating intermediate WAV file"
${AAC2WAV} -really-quiet -ao pcm "${1}" -ao pcm:file="${2}"
if [ $? -ne 0 ]
then
echo ""
echo "Conversion to WAV (${AAC2WAV}) failed."
do_cleanup
do_error "Exiting"
fi
test $VERBOSE && echo ". OK"
}
create_mp3() { # use lame(1) to convert from WAV to MP3
file_overwrite_check "${2}"
test $VERBOSE && echo -n "Creating output MP3 file"
${WAV2MP3} -r -h -b ${BITRATE} -S "${1}" "${2}"
if [ $? -ne 0 ]
then
echo ""
echo "Conversion to MP3 (${WAV2MP3}) failed."
do_cleanup
do_error "Exiting"
fi
test $VERBOSE && echo ". OK"
}
do_cleanup() { # Delete intermediate and (optionally) original file(s)
test $VERBOSE && echo -n "Deleting intermediate file"
test ${SAVEWAV} || rm -f "${2}"
test ${RMM4A} && rm -f "${1}"
test $VERBOSE && echo ". OK"
}
do_set_bitrate() {
test $VERBOSE && echo -n "Setting output bitrate to: $1 kbps"
BITRATE=$1
test $VERBOSE && echo ". OK"
}
GETOPT=`getopt -o l:m:b:e:cfhrv -n ${ME} -- "$@"`
if [ $? -ne 0 ]
then
do_usage
fi
eval set -- "$GETOPT"
while true
do
case "$1" in
-l) LAME=$2 ; shift ; shift ;;
-m) MPLAYER=$2 ; shift ; shift ;;
-b) do_set_bitrate $2 ; shift ; shift ;;
-e) EXT=$2 ; shift ; shift ;;
-f) FORCE="yes" ; shift ;;
-c) RMM4A="yes" ; shift ;;
-s) SAVEWAV="yes" ; shift ;;
-v) VERBOSE="yes" ; shift ;;
-h) do_usage ;;
--) shift ; break ;;
*) do_usage ;;
esac
done
test -f $LAME || do_error "$LAME not found. Use \"-l\" switch."
test -f $MPLAYER || do_error "$MPLAYER not found. Use \"-m\" switch."
if [ $# -eq 0 ]
then # Convert all files in current directory
for IFILE in *.${EXT}
do
if [ "${IFILE}" == "*.${EXT}" ]
then
do_error "No files with extension ${EXT} in this directory."
fi
OUT=`echo "${IFILE}" | sed -e "s/\.${EXT}//g"`
create_wav "${IFILE}" "${OUT}.wav"
create_mp3 "${OUT}.wav" "${OUT}.mp3"
do_cleanup "${IFILE}" "${OUT}.wav"
done
else # Convert listed files
for IFILE in "$*"
do
test -f "${IFILE}" || do_error "${IFILE} not found."
OUT=`echo "${IFILE}" | sed -e "s/\.${EXT}//g"`
create_wav "${IFILE}" "${OUT}.wav"
create_mp3 "${OUT}.wav" "${OUT}.mp3"
do_cleanup "${IFILE}" "${OUT}.wav"
done
fi
exit 0
#!/bin/bash
#
# m4a2wav
#
for i in *.m4a; do
out=$(ls $i | sed -e 's/.m4a//g')
mplayer -ao pcm "$i" -ao pcm:file="$out.wav"
done
Note: the inputfiles shouldn't contain spaces (maybe we should sed those away too in the script?
2. wav to mp3 Now we can convert the wav's to mp3 or ogg or whatever we like. For example to convert to mp3 we can use this second script:
#!/bin/bash
#
# wav2mp3
#
for i in *.wav; do
out=$(ls $i | sed -e 's/.wav//g')
lame -h -b 192 "$i" "$out.mp3"
done
That's it
Linux/Musik/ForMate/aacm4a/Scripts (last modified 2008-11-04 07:00:06)