#!/bin/sh # check flags for i in $@; do case "$i" in "-"*) unset GETARTIST GETALBUM GETTITLE esac [ -n "$GETURL" ] && URL="$i" && unset GETURL [ -n "$GETARTIST" ] && ARTIST="$ARTIST $i" [ -n "$GETALBUM" ] && ALBUM="$ALBUM $i" [ -n "$GETTITLE" ] && TITLE="$TITLE $i" [ -n "$GETTRACKNUM" ] && TRACKNUM="$i" && unset GETTRACKNUM [ -n "$GETYEAR" ] && YEAR="$i" && unset GETYEAR case "$i" in "-h") printf "Grabs music (either individual songs or albums) and formats it.\n" printf "\n" printf " -s | downloads and formats a single song.\n" printf " -l | downloads and formats a whole album.\n" printf " -p | downloads and formats an album (via a playlist).\n" printf " -u | the url to download.\n" printf " -a | the artist name (to tag every song with).\n" printf " -A | the album name (to tag every song with).\n" printf " -t | the title of the song (if downloading a single song).\n" printf " -T | the number of the track in its album (if downloading a single song).\n" printf " -y | the year of release.\n" exit 0 ;; "-s") SPLITTER_SELECTION="s" ;; "-l") SPLITTER_SELECTION="a" ;; "-p") SPLITTER_SELECTION="p" ;; "-u") GETURL="y" ;; "-a") GETARTIST="y" ;; "-A") GETALBUM="y" ;; "-t") GETTITLE="y" ;; "-T") GETTRACKNUM="y" ;; "-y") GETYEAR="y" ;; esac done ARTIST=`echo $ARTIST | sed 's/^ //'` ALBUM=`echo $ALBUM | sed 's/^ //'` TITLE=`echo $TITLE | sed 's/^ //'` printf "Received Tags: Artist: $ARTIST Album: $ALBUM Song: $TITLE Number: $TRACKNUM Year: $YEAR\n\n" notify-send "songgrab started" "Received Tags: Album: $ALBUM Song: $TITLE Number: $TRACKNUM Year: $YEAR\n\n" printf "\n" # prompt to determine later tagging if [ -z "$SPLITTER_SELECTION" ]; then printf "Will the link be for a [p]laylist, a[l]bum video, or [s]ong video? " read SPLITTER_SELECTION printf "\n" fi # prompt to get the URL if [ -z "$URL" ]; then printf "Enter the link: " read URL printf "\n" fi # if song, don't download playlist if [ "$SPLITTER_SELECTION" = "s" ]; then SPLITTER_FLAGS="--no-playlist" fi # download the video(s) notify-send "songgrab" "Starting download..." printf "Starting download..." ls | grep -q "$(echo $URL | cut -d'=' -f2 | cut -d'&' -f1)" && echo "Already downloaded" || yt-dlp $SPLITTER_FLAGS --format bestaudio --restrict-filenames "$URL" notify-send "songgrab" "Download stopped." printf "Download stopped." # while loop to remove files from list printf "Do you want to remove any tracks?\n\n" while true; do ls | nl echo -n "Enter the line number: " read WHILE_RESPONSE [ -z "$WHILE_RESPONSE" ] && break rm -rf `ls | head -n "$WHILE_RESPONSE" | tail -1` done # convert the downloaded files to mp3 printf "Starting to convert files..." notify-send "songgrab" "Starting to convert files..." for i in `ls *.m4a *.webm`; do imp3=`echo "$i" | sed 's/\.m4a$/.mp3/;s/\.webm$/.mp3/'` notify-send "songgrab" "Converting $i to $imp3" [ ! -f "$imp3" ] && ffmpeg -i "$i" -acodec mp3 "$imp3" || echo "File not converted" done printf "Finished converting files.\n\n" notify-send "songgrab" "Finished converting files." # fix names for suggestions vimv # determine tagmp3 flags FLAGS="" [ -n "$ARTIST" ] && FLAGS="$FLAGS -a $ARTIST" [ -n "$ALBUM" ] && FLAGS="$FLAGS -A $ALBUM" [ -n "$TITLE" ] && FLAGS="$FLAGS -t $TITLE" [ -n "$TRACKNUM" ] && FLAGS="$FLAGS -T $TRACKNUM" [ -n "$YEAR" ] && FLAGS="$FLAGS -y $YEAR" # tag songs with tagmp3 notify-send "songgrab" "Tagging songs..." printf "Tagging songs..." for i in `ls *.mp3`; do tagmp3 $FLAGS "$i" done notify-send "songgrab" "Done." printf "Done.\n\n"