Got program into working order, still need to clean up.

This commit is contained in:
Hyperling 2024-06-07 09:32:40 -07:00
parent 1d85f3fd84
commit 6a0a12ad7a

106
rename_music_files.sh Normal file → Executable file
View File

@ -1,7 +1,7 @@
#!/bin/bash
# 2024-06-07 C.Greenwood
# Rename all files in a music library based on metadata.
# Uses the format "[Track] [Title].mp3"
# Uses the format "[Track]. [Title].mp3"
# TBD Remove all the stuff from AddTrackToTitle.
@ -41,7 +41,6 @@ function usage {
Parameters:
-h : Help, display the usage and exit succesfully.
-u : Undo, attempt to un-fix files which have had the normal script run against them.
Place this file at the root of your music destined for a flash drive and run it without any parameters.
It will dive through all folders and convert your MP3's to have the Track# in the Title.
@ -71,12 +70,10 @@ function error {
## Validations ##
# Check for parameters.
while getopts ":hu" opt; do
while getopts ":h" opt; do
case "$opt" in
h) usage 0
;;
u) UNDO="$TRUE"
;;
*) error "Operator $OPTARG not recognized." 6
;;
esac
@ -86,42 +83,6 @@ done
if [[ ! `which exiftool` ]]; then
error "exiftool not found" 2
fi
if [[ ! `which ffmpeg` ]]; then
error "exiftool not found" 2
fi
if [[ ! `which bc` ]]; then
error "bc not found" 2
fi
if [[ ! `ls /usr/bin/time` ]]; then
error "/usr/bin/time not found" 2
fi
# Make sure the user understands they're going to change their music's title.
typeset -l change
read -p "Please acknowledge you are OK with irreversibly modifying your music's metadata. [y/N] " change
if [[ $change != "y" ]]; then
echo -e "\nThank you for your honesty. Come back when you feel more confident. :)\n"
usage 0
fi
# Make sure the user has a backup of the music different than the folder they're running this in.
typeset -l backup
read -p 'Please ensure you have a backup. There is no warranty for this program! [y/N] ' backup
if [[ $backup != "y" ]]; then
echo -e "\nThank you for your honesty. Please backup your music and come back soon. :)\n"
usage 0
fi
printf 'User has provided permission to alter data.\nMoving forward in 5... '
sleep 1
printf '4... '
sleep 1
printf '3... '
sleep 1
printf '2... '
sleep 1
printf '1... \n'
sleep 1
## Main ##
@ -138,15 +99,6 @@ time find $DIR -name "*${EXT}" | while read file; do
echo -e "\n$file"
# Skip file if it's already correct.
if [[ "$UNDO" == "$FALSE" && "$file" == *"$ADD"* ]]; then
echo "Already fixed, skipping."
continue
elif [[ "$UNDO" == "$TRUE" && "$file" != *"$ADD"* ]]; then
echo "Already unfixed, skipping."
continue
fi
# Retrieve and clean the Track#
track=""
# Get raw value
@ -170,40 +122,11 @@ time find $DIR -name "*${EXT}" | while read file; do
title="`echo $title`"
echo "Title=$title"
# Skip file if title is already changed.
if [[ "$UNDO" == "$FALSE" && "$title" == "$track"* ]]; then
echo "Title already contains Track, skipping."
continue
elif [[ "$UNDO" == "$TRUE" && "$title" != "$track"* ]]; then
echo "Title already missing Track, skipping."
continue
fi
# Create the new file with the correct Title
new_title=""
new_file=""
if [[ "$UNDO" == "$FALSE" ]]; then
new_title="${track}. ${title}"
new_file="${file//$EXT/$ADD$EXT}"
else
new_title="${title/${track}. }"
new_file="${file//$ADD/}"
fi
# Create the new file with the correct filename.
new_filename="$track. $title$EXT"
if [[ ! -z "$track" && ! -z "$title" ]]; then
echo "Creating '`basename "$new_file"`' with Title '$new_title'."
AV_LOG_FORCE_NOCOLOR=1
/usr/bin/time -f '%e' -o time.txt ffmpeg -nostdin -hide_banner -loglevel quiet -i "$file" -metadata "Title=$new_title" "$new_file"
time=`cat time.txt`
#rm time.txt
ffstatus="$?"
if [[ $ffstatus ]]; then
echo "Success! Completed in $time seconds."
time_count=$(( time_count + 1 ))
total_time=$(echo "$total_time + $time" | bc -l)
avg_time=$(echo "$total_time / $time_count" | bc -l)
else
error "Did something bad happen? ffmpeg returned $ffstatus." 4
fi
echo "Creating '`basename "$new_filename"`'."
mv -v "$file" "$new_filename"
elif [[ -z "$track" && ! -z "$title" ]]; then
echo "No Track# found, leaving Title alone."
continue
@ -212,22 +135,11 @@ time find $DIR -name "*${EXT}" | while read file; do
fi
# Confirm the new file exists and remove the old file if so
if [[ -e "$new_file" ]]; then
echo "Removing file..."
rm -v "$file"
if [[ -e "$new_filename" ]]; then
echo "Success!"
else
error "$new_file was not created successfully." 5
error "$new_filename was not created successfully." 5
fi
# Give an estimate for time remaining. The magic number is to account for non-ffmpeg time.
magic="1.2"
est_guess_total="$( echo "est=(($total - $count) * $avg_time) * $magic; scale=0; est/1" | bc )"
est_guess_secs="$( echo "est=$est_guess_total % 60; scale=0; est/1" | bc )"
est_guess_mins="$( echo "est=($est_guess_total/60) % 60; scale=0; est/1" | bc )"
est_guess_hours="$( echo "est=($est_guess_total/(60*60)); scale=0; est/1" | bc )"
est_guess="$est_guess_hours hour(s) $est_guess_mins minute(s) $est_guess_secs second(s)"
echo -e "\nFinished $count of $total. Estimated time remaining is $est_guess."
done
echo -e "\nProcess has completed. Enjoy having your songs in album-order!"