Sometimes, I need to convert files I bought from iTunes to MP3 format. Well, actually not all songs we buy convertable to MP3. Only non-DRM format (with m4a extension) can be converted. The protected format with m4p extension still cannot be converted, theoritically at least (there is a hack to remove the DRM. But that's not easy and won't be covered here).
The following script converts an MP4 file to MP3 format.
It copies all the tags stored in the original file into the target file.
Make sure you have ffmpeg, mp4info, awk, and bc installed.
#!/bin/bash
#!/bin/bash
FULLPATH=$1
file=${FULLPATH##*/}
FILENAME=${file%.*}
EXT=${file##*.}
#echo "FILENAME=$FILENAME"
#echo "EXTension=$EXT"
shift
OPTS=$@
if [ `echo $EXT | tr [:upper:] [:lower:]` = "m4a" ]
then
bitratekbps=`mp4info "$FULLPATH" | awk '$1 ~ /([0-9]+) kbps/g {print $8}'`
bitratebps=`echo "scale=10; $bitratekbps*1000" | bc -l`
hz=`mp4info "$FULLPATH" | awk '$1 ~ /([0-9]+) kbps/g {print $10}'`
ffmpeg -i "$FILENAME.m4a" -aq 1 -ab $bitratebps -ar $hz -f mp3 \
-metadata major_brand="MP3" \
-metadata compatible_brands="MP3 libmp3lame" \
"$FILENAME.mp3" $OPTS
fi
Save the file, say, to m4a2mp3 and make it executable.
To convert a song:
m4a2mp3 song.m4a
The target file name is the same, except the extension now is MP3. Also, some tags/metadata are replaced to reflect the new format. If you want to add other options, you can put that after file name. For example:
m4a2mp3 song.m4a -metadata mymeta="converted from m4a"