UPDATE 18-10-2019: Nieuwe versie van het script
Ik was vanavond gisteravond en vanavond een beetje aan het stoeien met het automatiseren van een klusje wat ik tot nu toe handmatig deed. Script krijgt wellicht komende tijd nog wel een update of wat ter verbetering, maar het resultaat van vanavond na twee avondjes stoeien vind je hieronder.
Wat het script concreet doet;
- Aflopen van alle bestanden in de folder /volume1/music (standaard folder om muziek op te staan op een Synology NAS).
- Controleren of van de FLAC bestanden die in deze folder staan er een MP3 versie aanwezig is in de folder /volume1/MP3s
- Als dit niet het geval is, dan wordt het FLAC-bestand geconverteerd naar een MP3-bestand en in de MP3-folder opgeslagen.
- Als alle bestanden zijn geconverteerd wordt er een eenvoudig rapportje weggeschreven in de folder waarin ook het script-bestand staat.
- Tot slot wordt een e-mail verstuurd ter notificatie met hierin het totaal aantal bestanden dat is geconverteerd en een verwijzing naar het rapport-bestand.
Code
# Script to convert FLAC-files in one folder to MP3 in another folder.
# Install FFMPEG on Synology NAS via package from https://synocommunity.com/package/ffmpeg
IFS="`printf '\n\t'`" # Remove 'space', so filenames with spaces work well.
FLAC_MAP="/volume1/music" # Folder with original FLAC-files
MP3S_MAP="/volume1/MP3s" # Folder to store the converted MP3-files
# Notification mail variables
MAIL_FROM="mail@provider.com"
MAIL_TO="mail@provider.com"
MAIL_SUBJECT="Synology NAS: MP3 conversie is voltooid"
MAIL_BODY="Beste gebruiker,\n\nDe conversie van FLAC-bestanden naar MP3-bestanden is voltooid."
MAIL_COUNTER="Totaal aantal geconverteerde bestanden: "
MAIL_REPORT="Bekijk de details in het conversie-rapport: "
MAIL_SIGNATURE="Met vriendelijke groeten,\nSynology DiskStation"
REPORT_FILE=$(cd -P -- "$(dirname -- "$0")" && pwd -P)"/convert_mp3_"$(date +%Y-%m-%d)."txt" # Define report filename
ECHO_OUT="Following MP3-files created:"
COUNTER=0
cd $FLAC_MAP
for a in `find . -name '*.flac' -print | sort`; do
if [ -e "$a" ] ; then # Check if string from find is a file (should be the case)
OUTF=${a%.flac}.mp3 # Generate name of MP3-file
OUTF="${OUTF:2}" # Remove trailing ./ from the path
if [[ ! -f "$MP3S_MAP/$OUTF" ]]; # Check if MP3-file does not already exists (if so, no conversion needed)
then
if [[ ${OUTF} != *"@eaDir"* ]]; then # Ignore @eaDir, this are folders with thumbnails & metadata.
path=$( echo ${OUTF%/*} )
file=$( echo ${OUTF##/*/} )
if [[ ! -e $MP3S_MAP/$path ]]; then
mkdir -p $MP3S_MAP/$path # Create folder if it does not yet exist in MP3-folder.
fi
echo "Converting $a" # Show which FLAC-file is being converted to MP3
ffmpeg -loglevel warning -i $a -acodec libmp3lame -q:a 1 "$MP3S_MAP/$file" # Convert to MP3-file with quality Q:A 1 setting
ECHO_OUT+=
En voor wie zich afvraagt waarom je deze conversie uberhaupt zou willen doen... binnenkort wat verdere uitleg ;)
\n'"- $MP3S_MAP/$file" # Add MP3-filename to logging
COUNTER=$((COUNTER+1))
fi
fi
fi
done
if test "$ECHO_OUT" != "Following MP3-files created:"; then
echo $(date +%Y-%m-%d_%H:%M) - $"$ECHO_OUT" >> $REPORT_FILE
/usr/bin/php -r 'mail("'$MAIL_TO'", "'$MAIL_SUBJECT'", "'$MAIL_BODY'\n\n'$MAIL_COUNTER$COUNTER'\n\n'$MAIL_REPORT$REPORT_FILE'\n\n'$MAIL_SIGNATURE'", "From: '$MAIL_FROM'");';
else
echo $"No FLAC-files needed to be converted."
fi