Convert iTunes Music folder into a simple directory, preserving structure, and converting the ALAC files into MP3 (leaving the rest untouched). Requires: ffmpeg with LAME, mediainfo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
IN="/media/Music/iTunes Media/Music/" | |
OUT="/home/akasaka/Music/From_iTunes" | |
FILES=$(find "$IN/" -type f ! -name '.DS_Store') | |
IFS=$'\n' | |
mkdir -p "$OUT" | |
cd "$OUT" | |
for file in $FILES | |
do | |
localname=$(dirname "$file" | sed -e "s?$IN/??") | |
if [ ! -d "./$localname" ] | |
then | |
echo "NEW DIR: $localname" | |
mkdir -p "$localname" | |
fi | |
fname=$(basename "$file") | |
# Ignore zip files! | |
if echo "$fname" | grep "zip$\|m4v$">/dev/null | |
then | |
echo "SKIP: $fname" | |
else | |
no_need_convert=1 | |
if echo "$fname" | grep "wav$">/dev/null | |
then | |
# Always convert WAV | |
no_need_convert=0 | |
fi | |
if echo "$fname" | grep "m4a$">/dev/null | |
then | |
# M4A can be lossless or lossy, determine which one it is | |
mediainfo "$file" | grep ALAC>/dev/null | |
no_need_convert=$? | |
fi | |
if ((no_need_convert)) | |
then | |
# File is not lossless, copy direct | |
echo "COPY: $fname" | |
cp "$file" "$OUT/$localname/$fname" | |
else | |
echo -n "CONVERT: $fname ... " | |
outname="$OUT/$localname/${fname%.*}.mp3" | |
srcsz=$(stat --printf="%s" "$file") | |
echo -n "$srcsz" | |
ffmpeg -loglevel quiet -hide_banner -i "$file" -codec:a libmp3lame -qscale:a 0 "$outname" | |
dstsz=$(stat --printf="%s" "$outname") | |
echo " -> $dstsz" | |
fi | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment