Tagging, 755 mode
This commit is contained in:
parent
ddb619f1c0
commit
902b6414a5
4 changed files with 104 additions and 0 deletions
0
.convert_helper.sh
Normal file → Executable file
0
.convert_helper.sh
Normal file → Executable file
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
||||||
files/
|
files/
|
||||||
convert/
|
convert/
|
||||||
|
tagged/
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
81
.id3tag_helper.sh
Executable file
81
.id3tag_helper.sh
Executable file
|
@ -0,0 +1,81 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Should not be called manually
|
||||||
|
|
||||||
|
conv_title () {
|
||||||
|
echo "$1" | \
|
||||||
|
# remove directory name
|
||||||
|
sed -E 's#\./(convert|files)/##' | \
|
||||||
|
# remove video ID and ext
|
||||||
|
sed 's/---[A-Za-z0-9_-]*\.[A-Za-z0-9]*//' | \
|
||||||
|
# underscore -> space
|
||||||
|
sed 's/_/ /g' | \
|
||||||
|
# remove "(Official Audio)"
|
||||||
|
sed -E 's/\(.*\)//' | \
|
||||||
|
# trim spaces
|
||||||
|
xargs
|
||||||
|
}
|
||||||
|
|
||||||
|
rm_quotes () {
|
||||||
|
cat | sed 's/^"//' | sed 's/"$//'
|
||||||
|
}
|
||||||
|
|
||||||
|
title=$(conv_title "$2")
|
||||||
|
title_prev="$title"
|
||||||
|
|
||||||
|
echo 'Correct the song title if needed:'
|
||||||
|
read -e -r -i "$title" title
|
||||||
|
title=${title:-$title_prev}
|
||||||
|
|
||||||
|
echo 'Searching on Genius'
|
||||||
|
|
||||||
|
link="https://genius.com/api/search/multi?q=${title// /%20}"
|
||||||
|
echo "URL: $link"
|
||||||
|
|
||||||
|
song=$(curl -sL "$link" | jq '.response.sections[1].hits[0].result')
|
||||||
|
title=$(echo "$song" | jq '.title' | rm_quotes)
|
||||||
|
artist=$(echo "$song" | jq '.primary_artist.name' | rm_quotes)
|
||||||
|
year=$(echo "$song" | jq '.release_date_components.year')
|
||||||
|
page_url=$(echo "$song" | jq '.url' | rm_quotes)
|
||||||
|
|
||||||
|
echo "Title: $title"
|
||||||
|
echo "Artist: $artist"
|
||||||
|
echo "Lyrics: $page_url"
|
||||||
|
|
||||||
|
echo 'Parsing lyrics page'
|
||||||
|
|
||||||
|
page=$(curl -sL "$page_url")
|
||||||
|
album=$(echo "$page" | pup -p 'a[class^="PrimaryAlbum__Title"] text{}' | sed -E 's#\([0-9]+\)$##' | xargs)
|
||||||
|
tracknum=$(echo "$page" | pup -p 'div[class^="HeaderTracklist__AlbumWrapper"]' | grep -oE 'Track [0-9]+' | grep -oE '[0-9]+')
|
||||||
|
trackall=$(echo "$page" | pup -p 'ol[class^="AlbumTracklist__Container"] > li:last-child div[class^="AlbumTracklist__TrackNumber"] text{}' | grep -oE '[0-9]+')
|
||||||
|
lyrics=$(echo "$page" | pup -p 'div[data-lyrics-container="true"] text{}' | sed 's#^\[#\n[#')
|
||||||
|
|
||||||
|
# remove first blank line
|
||||||
|
if [[ $(echo "$lyrics" | sed -n '1p') == "" ]]; then
|
||||||
|
lyrics=$(echo "$lyrics" | sed '1d')
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Album: $album"
|
||||||
|
|
||||||
|
if [[ $1 == 1 ]]; then
|
||||||
|
newdir="./tagged/${artist}/${album}"
|
||||||
|
mkdir -p "$newdir"
|
||||||
|
newpath="${newdir}/${tracknum}. ${title}.mp3"
|
||||||
|
echo "Copying to $newpath"
|
||||||
|
cp -f "$2" "$newpath"
|
||||||
|
else
|
||||||
|
newpath="$2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "$lyrics"
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo 'Adding ID3v2 tags'
|
||||||
|
mid3v2 \
|
||||||
|
--artist "$artist" \
|
||||||
|
--album "$album" \
|
||||||
|
--song "$title" \
|
||||||
|
--year "$year" \
|
||||||
|
--track "${tracknum}/${trackall}" \
|
||||||
|
--USLT "$lyrics" \
|
||||||
|
"$newpath"
|
22
id3tag.sh
Executable file
22
id3tag.sh
Executable file
|
@ -0,0 +1,22 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
ask () {
|
||||||
|
read -r -p "[Y/n] " answer
|
||||||
|
if [[ $answer =~ [NnНн] ]]; then
|
||||||
|
echo 0
|
||||||
|
else
|
||||||
|
echo 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Enter directory where your music is located:"
|
||||||
|
read -e -r -i "./convert" directory
|
||||||
|
directory="${directory:-./convert}"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Copy files into ./tagged/artist/album directory?"
|
||||||
|
copy_arg=$(ask)
|
||||||
|
echo
|
||||||
|
|
||||||
|
find "$directory" -type f -name "*.mp3" -exec \
|
||||||
|
bash ./.id3tag_helper.sh "$copy_arg" {} \;
|
Reference in a new issue