Problem :
I’ve got a folder called Music, that has subfolders of different artist, containing a whole lot of .flac files.
I’m trying to convert all of them into the .wav file format and then convert them to Apple alac, because the direct conversion is not working correctly, but the catch is that I have converted some of them before, but not all of them.
My folder looks basically like this:
Music/ArtistX/Song1.flac
Musik/ArtistX/Song1.m4a
Musik/ArtistX/Song2.flac
Musik/ArtistY/Song1.flac
Musik/ArtistY/Song1.m4a
Basically I want a command that lets me convert only the .flac files that haven’t got a corresponding .m4a file next to them.
In the past I simply converted all of them again by running this crude for loop:
for f in ./**/*.flac; do ffmpeg -i "$f" "${f%.*}.wav"; done && for f in ./**/*.wav; do ffmpeg -n -i "$f" -acodec alac "${f%.*}.m4a"; done && find . -type f -name '*.wav' -delete
But this is very inefficient for my current setup.
P.S.:
If it is at all possible I would prefer to use ffmpeg.
Solution :
Why not just searching for flac files, check for existing m4a files, and convert if no m4a file exists? Just a little example:
for i in $(find $PWD -name "*.flac")
do
# check if file was already converted and therefore a m4a file exists
if [ ! -e $(dirname ${i})/$(basename ${i} .flac).m4a ]
then
# convert your file... File including path is in ${i}
echo "Need to convert input file ${i} now..."
WAV=$(dirname ${i})/$(basename ${i} .flac).wav
M4A=$(dirname ${i})/$(basename ${i} .flac).m4a
ffmpeg -i ${i} ${WAV}
ffmpeg -n -i ${WAV} -acodec alac ${M4A}
rm ${WAV}
fi
done