-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathget-song
executable file
·91 lines (80 loc) · 2.31 KB
/
get-song
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/bin/bash
# SPDX-FileCopyrightText: 2018 - 2024 sudorook <[email protected]>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <https://www.gnu.org/licenses/>.
set -eu
ROOT="$(dirname "${0}")"
source "${ROOT}"/globals
YTDL=yt-dlp
! check_command "${YTDL}" mid3v2 && exit 3
function print_usage {
show_header "Usage: get-song"
show_listitem "\
-t|--title <song title>
-a|--artist <name of band / recording artist / etc>
-u|--url <url for download>
-f|--format <audio format (e.g. mp3, opus)>
-h|--help print (this) help message"
}
OPTIONS=t:a:u:f:h
LONGOPTIONS=title:,artist:,url:,format,help
PARSED=$(getopt -o "${OPTIONS}" --long "${LONGOPTIONS}" -n "${0}" -- "${@}")
eval set -- "${PARSED}"
while [ ${#} -ge 1 ]; do
case "${1}" in
-t | --title)
TITLE="${2}"
shift 2
;;
-a | --artist)
ARTIST="${2}"
shift 2
;;
-u | --url)
URL="${2}"
shift 2
;;
-f | --format)
FORMAT="${2}"
shift 2
;;
-h | --help)
print_usage
exit
;;
--)
shift
break
;;
*)
show_error "ERROR: unknown command line option ${2@Q}."
exit 3
;;
esac
done
# Prompt for inputs if they were not already specified on the command line.
TITLE="${TITLE:-"$(ask_question "What is the title?")"}"
ARTIST="${ARTIST:-"$(ask_question "Who is the artist?")"}"
URL="${URL:-"$(ask_question "What is the URL?")"}"
FORMAT="${FORMAT:-mp3}"
# Download the file, extract audio, and set the ID3v2 tags.
"${YTDL}" "${URL//\"/}" \
--extract-audio \
--prefer-ffmpeg \
--audio-format "${FORMAT}" \
--ignore-config \
-o "${TITLE} - ${ARTIST}.%(ext)s"
mid3v2 "${TITLE} - ${ARTIST}.${FORMAT}" -a "${ARTIST}" -t "${TITLE}"