mp3-library-tsv/mp3-library.sh

81 lines
2.6 KiB
Bash
Raw Permalink Normal View History

2024-05-21 20:47:59 +02:00
#!/bin/bash
## Remote Server Backup Script
## Author: Ze'ev Schurmann
## Reddit: u/thisiszeev
## License: MIT
## Dependancies:
## ffprobe (ffmpeg), jq
## Please consider making me small donation. Even though my scripts are open source and free to use, I still need to eat. And the
## occasional bottle of wine also goes down well.
## $5 buys me a cup of coffee
## $10 buys me a nice burger
## $20 buys me a bottle of wine
## Anything above that will be awesome as well.
## You can send me a donation via Paypal https://www.paypal.com/paypalme/thisiszeev
## Drop me a message on Reddit if you do make a donation.
## Support is only offered freely to those who donate $20 or more.
## Your donation contributes to further development.
## If you need a custom script, contact me on Reddit for pricing.
rm -f tmp.lst
if [[ ! -f paths.lst ]]; then
echo "Please create a text file called paths.lst and put /the/absolute/path to each library on a seperate line."
exit 1
fi
if [[ ! -f library.tsv ]]; then
echo -e "title\tartist\talbum\tgenre\tdate\ttrack_number\ttrack_total\tbitrate\tduration\tfilename\tfilesize\tpath" >> library.tsv
fi
added=0
while read -r path; do
find "$path" -type f -name "*.mp3" > tmp.lst
while read -r mp3; do
test=$(cat library.tsv | grep -F "$mp3")
if [[ -z $test ]]; then
((added++))
echo "Found new MP3 at $mp3"
json=$(ffprobe -print_format json -show_format "$mp3" 2> /dev/null | jq -c .)
title="$(echo "$json" | jq -r .format.tags.title)"
artist="$(echo "$json" | jq -r .format.tags.artist)"
album="$(echo "$json" | jq -r .format.tags.album)"
genre="$(echo "$json" | jq -r .format.tags.genre)"
date="$(echo "$json" | jq -r .format.tags.date)"
track_number="$(echo "$json" | jq -r .format.tags.track)"
track_total="$(echo "$json" | jq -r .format.tags.TRACKTOTAL)"
bitrate="$(($(echo "$json" | jq -r .format.bit_rate)/1000))"
runtime="$(echo "$json" | jq -r .format.duration)"
runtime="${runtime%%.*}"
min=$((runtime/60))
sec=$(printf %02d $((runtime%60)))
duration="$min:$sec"
filename="${mp3##*/}"
size="$(echo "$json" | jq -r .format.size)"
mb=$((size/1048576))
kb=$((size%1048576))
filesize="$mb.${kb:0:1} MB"
echo -e "$title\t$artist\t$album\t$genre\t$date\t$track_number\t$track_total\t$bitrate\t$duration\t$filename\t$filesize\t$mp3" >> library.tsv
fi
done < tmp.lst
rm -f tmp.lst
done < paths.lst
if [[ $added == 0 ]]; then
echo "Move along nothing to see here..."
else
echo "Added $added MP3s to library.tsv. Total of $(($(cat library.tsv | wc -l)-1)) MP3s in library.tsv."
fi