Tuesday, May 27, 2014

Program Listing – m4atomp3

#!/bin/bash
# convert .m4a to .mp3 recursively
# be sure to run this only on a backup
# copy of your music
#
# cd to the directory which is above
# the artist names
#
# Author: Dan Srebnick
# All rights retained
# Free to use for personal use
######################################

shopt -s nullglob
for ARTIST in *; do
  if [ -d "$ARTIST" ] ; then
    cd "$ARTIST"
    for ALBUM in *; do
      if [ -d "$ALBUM" ] ; then
        cd "$ALBUM"
        DISC1=0; DISC2=0; MULTI=0  
        DISC1=`find . -name "1-[0-9][0-9]*.m4a" | wc -l`
      DISC2=`find . -name "2-[0-9][0-9]*.m4a" | wc -l`
      if [ $DISC1 -ge 1 ]; then
          DISC1=1
        fi
      if [ $DISC2 -ge 1 ]; then
          DISC2=1
        fi
      let MULTI=$DISC1+$DISC2
      echo "Multi is $MULTI"

        for i in *.m4a; do

        TMPFILE="/tmp/ffmpeg$RANDOM.txt"
        ffmpeg -i "$i" 2>$TMPFILE

        line="`grep ' artist ' $TMPFILE`"
        if [ -n "$line" ] ; then
          ARTIST="`echo $line | awk -F':' '{print $2}' | cut -c2-`"
        fi

        line="`grep ' track ' $TMPFILE`"
        if [ -n "$line" ] ; then
            TRACK="`echo $line  | cut -d ":" -f2 | cut -d "/" -f1 | tr -d " "`"
        fi

        line="`grep ' disc ' $TMPFILE`"
        if [ -n "$line" ] ; then
          DISC="`echo $line | cut -d ":" -f2 | cut -d "/" -f1 | tr -d " "`"
        fi

        line="`grep ' title ' $TMPFILE`"
        if [ -n "$line" ] ; then
          TITLE="`echo $line | awk -F':' '{print $2}' | cut -c2-`"
        fi

        line="`grep ' album_artist ' $TMPFILE`"
        if [ -n "$line" ] ; then
          ALBUM_ARTIST="`echo $line | awk -F':' '{print $2}' | cut -c2-`"
        fi
         
        echo "Artist: $ARTIST"
        echo "AlbArt: $ALBUM_ARTIST"
        echo "  Disc: $DISC"
        echo " Track: $TRACK"
        echo " Title: $TITLE"
        echo
        rm "$TMPFILE"

        if [ -z "$ARTIST" ] ; then
          ARTIST="$ALBUM_ARTIST"
        fi

        if [ $MULTI -eq 2 ]; then
          if [ $DISC -eq 2 ]; then
            let TRACK=$TRACK+25
          elif [ $DISC -eq 3 ]; then
            let TRACK=$TRACK+50
          elif [ $DISC -eq  4 ]; then
            let TRACK=$TRACK+75
          fi
        fi

        if [ $TRACK -lt 10 ]; then
           TRACK="0$TRACK"
        fi

        TITLE="`echo $i | cut -d " " -f2- | rev | cut -c 5- | rev`"
          MP3SONG="$TRACK-$ARTIST - $TITLE.mp3"
        echo -e "$MP3SONG\n"
          ffmpeg -i "$i" -vsync 2 -acodec libmp3lame -ac 2 -aq 0 -ar 44100 -write_id3v1 1 "$MP3SONG"
        done
        cd ..
      fi
    done
    cd ..
  fi
done