#!/bin/.sh # vim: set sw=4 ts=4 sts=4 et : clean() { echo "$1" | sed \ -e "s/’/'/g" \ -e 's/?//g' \ -e 's@ / @ _ @g' \ -e 's@/@-@g' \ -e 's/: / - /g' \ -e 's/:/-/g' \ -e 's/\.\+$//' } convert() { unset src dst cover src="${1}" dst="${2}" cover="${src%/*}/folder.jpg" mkdir -p "${dst%/*}" echo "${dst}" >> /tmp/modified.txt printf 'Converting %s to %s ...\n' "${src##*/}" "${dst##*/}" ffmpeg \ -loglevel warning \ -i "${src}" \ -vn \ -ar 44100 \ -ac 2 \ -b:a 256k \ "${dst}" \ < /dev/null \ || return $? if [ -f "${cover}" ]; then printf 'Embedding %s in %s ...\n' "${cover##*/}" "${dst##*/}" ffmpeg \ -loglevel warning \ -i "${dst}" \ -i "${cover}" \ -c copy \ -map 0:0 \ -map 1:0 \ -id3v2_version 3 \ -metadata:s:v title='Album Cover' \ -metadata:s:v comment='Cover (Front)' \ "${dst%.mp3}.new.mp3" \ < /dev/null \ || return $? mv "${dst%.mp3}.new.mp3" "${dst}" fi } rm -f /tmp/modified.txt cd ~/.homeshare find Music -name '*.flac' -printf '%T@%p\n' \ | sed -E 's/^([0-9]+)(\.[0-9]+)(.*)/\1\3/' \ | sort -t '' -k2 \ > /tmp/music.txt while IFS='' read timestamp filename; do album=$(metaflac --show-tag=album "${filename}" | sed 's/^album=//') albumartist=$(metaflac --show-tag=albumartist "${filename}" \ | sed 's/^albumartist=//' \ | head -n1) artist=$(metaflac --show-tag=artist "${filename}" \ | sed 's/^artist=//' \ | head -n1) discnumber=$(metaflac --show-tag=discnumber "${filename}" \ | sed 's/^discnumber=//') disctotal=$(metaflac --show-tag=disctotal "${filename}" \ | sed 's/^disctotal=//') tracknumber=$(metaflac --show-tag=tracknumber "${filename}" \ | sed 's/^tracknumber=//') title=$(metaflac --show-tag=title "${filename}" | sed 's/^title=//') if [ -n "${disctotal}" ] || [ "${discnumber:-0}" -gt 0 ]; then newfilename=$(printf \ '%s - %s Disc %d/%02d %s - %s.mp3' \ "$(clean "${albumartist:-${artist}}")" \ "$(clean "${album}")" \ "${discnumber:-1}" \ "${tracknumber:-0}" \ "$(clean "${artist}")" \ "$(clean "${title}")" ) else newfilename=$(printf \ '%s - %s/%02d %s - %s.mp3' \ "$(clean "${albumartist:-${artist}}")" \ "$(clean "${album}")" \ "${tracknumber:-0}" \ "$(clean "${artist}")" \ "$(clean "${title}")" ) fi if [ ! -f "TRUCKMUSIC/${newfilename}" ]; then convert "${filename}" "TRUCKMUSIC/${newfilename}" else newtimestamp=$(stat -c %Y "TRUCKMUSIC/${newfilename}") if [ "${timestamp}" -gt "${newtimestamp}" ]; then convert "${filename}" "TRUCKMUSIC/${newfilename}" fi fi done < /tmp/music.txt