-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstart.sh
216 lines (197 loc) · 8.9 KB
/
start.sh
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# sprinter skill issue
get_latest_release() {
RETVAL="$(curl --silent "https://api.github.com/repos/Sprinter05/ytdlp-handler/releases/latest" | # Get latest release from GitHub api
grep '"tag_name":' | # Get tag line
sed -E 's/.*"([^"]+)".*/\1/')" # Pluck JSON value
}
RETVAL=""
# do the art thing
echo -e "\e[1;31m __ _________ _____ _ _____ _ _ _ _ _____ _ ______ _____ \e[0m"
echo -e "\e[1;31m \ \ / /__ __| | __ \| | | __ \ | | | | /\ | \ | | __ \| | | ____| __ \ \e[0m"
echo -e "\e[1;31m \ \_/ / | | ______ | | | | | | |__) | | |__| | / \ | \| | | | | | | |__ | |__) | \e[0m"
echo -e "\e[1;31m \ / | | |______| | | | | | | ___/ | __ | / /\ \ | . \` | | | | | | __| | _ / \e[0m"
echo -e "\e[1;31m | | | | | |__| | |____| | | | | |/ ____ \| |\ | |__| | |____| |____| | \ \ \e[0m"
echo -e "\e[1;31m |_| |_| |_____/|______|_| |_| |_/_/ \_\_| \_|_____/|______|______|_| \_\ \e[0m"
echo -e "\e[1;31m \e[0m"
echo -e "\e[7mSH file by Tulip\e[0m"
echo -e "Using: \e[4mhttps://github.com/yt-dlp/yt-dlp\e[0m and \e[4mhttps://github.com/FFmpeg/FFmpeg\e[0m"
echo -e "\e[0m"
# Get values from settings..
## PROGRAM SETTINGS
eval $(grep LEGACY settings.ini)
eval $(grep VIDEODIR settings.ini)
eval $(grep MUSICDIR settings.ini)
eval $(grep EXPLORER settings.ini)
eval $(grep REOPEN settings.ini)
eval $(grep CHECKUPD settings.ini)
## YOUTUBE DOWNLOAD
eval $(grep RATELIMIT settings.ini)
eval $(grep SPEED settings.ini)
eval $(grep VIDEOQUALITY settings.ini)
eval $(grep THUMBNAIL settings.ini)
eval $(grep SUBTITLES settings.ini)
eval $(grep METADATA settings.ini)
eval $(grep CHAPTERS settings.ini)
## VIDEO PROCESSING
eval $(grep REMUX settings.ini)
eval $(grep POSTPROCESSING settings.ini)
eval $(grep PPARGS settings.ini)
eval $(grep DEBUG settings.ini)
## AUDIO PROCESSING
eval $(grep AUDIOQUALITY settings.ini)
# Check if settings.ini exists
if ! [ -f "settings.ini" ]; then
echo -e "Configuration file settings.ini not found!"
exit
fi
#Check if LEGACY is enabled
if [ $LEGACY -eq 1 ]; then
echo -e "\e[7mLEGACY MODE IS ENABLED\e[0m"
echo -e "\e[0m"
fi
# Setup CMDs
RLCMD=""
SPDCMD=""
if [ $RATELIMIT -eq 1 ]; then
RLCMD="--limit-rate" # Download speed limit
SPDCMD=$SPEED
fi
THMBCMD=""
if [ $THUMBNAIL -eq 1 ]; then
THMBCMD="--embed-thumbnail" # Thumbnails lets GOOOOOOO
fi
SUBTCMD=""
if [ $SUBTITLES -eq 1 ]; then # Subtitles
if [ $LEGACY -eq 1 ]; then
SUBTCMD="--embed-subs --all-subs --sub-lang all"
else
SUBTCMD="--embed-subs"
fi
fi
MTDCMD=""
if [ $METADATA -eq 1 ]; then # This goofs up on .ogg. I do love me 8 digit year
if [ $LEGACY -eq 1 ]; then
MTDCMD="--add-metadata"
else
MTDCMD="--embed-metadata"
fi
fi
CHPTCMD=""
if [ $CHAPTERS -eq 1 ]; then
CHPTCMD="--split-chapters" # Chapters. Who even wants this?
fi
PPCMD=""
PPCMDARGS=""
if [ $POSTPROCESSING -eq 1 ]; then
PPCMD="--postprocessor-args" # pleasedontsayit pleasedontsayit pleasedontsayit pleasedontsayit pleasedontsayit
PPCMDARGS=$PPARGS
fi
DBGCMD=""
if [ $DEBUG -eq 1 ]; then
DBGCMD="--verbose" # Make errors be helpful
fi
RMXCMD=""
if [ $REMUX -eq 1 ]; then
RMXCMD="--remux-video" # Speedy
else
RMXCMD="--recode-video" # Not speedy
fi
# Check if dependencies are installed
if [ $LEGACY -eq 1 ]; then
echo -n "Checking dependencies... "
for name in youtube-dl ffmpeg
do
[[ $(which $name 2>/dev/null) ]] || { echo -en "\n$name needs to be installed.";deps=1; }
done
[[ $deps -ne 1 ]] && echo "OK" || { echo -en "\nInstall the above and rerun this script\n"; exit 1; }
else
echo -n "Checking dependencies... "
for name in yt-dlp ffmpeg
do
[[ $(which $name 2>/dev/null) ]] || { echo -en "\n$name needs to be installed.";deps=1; }
done
[[ $deps -ne 1 ]] && echo "OK" || { echo -en "\nInstall the above and rerun this script\n"; exit 1; }
fi
echo $CHECKUPD
# Check and compare local and online versions through changelog.txt and github API
if [ "$CHECKUPD" == "1" ]; then
if [ -f "changelog.txt" ]; then
get_latest_release
VER=$(cat changelog.txt | grep -Eo '[+-]?[0-9]+([.][0-9]+)?' | head -n 1)
if awk "BEGIN {exit !($RETVAL > $VER)}" ; then
echo "There is a new ytdlp-handler update available."
fi
else
echo "Missing changelog.txt! Cannot check for updates."
fi
fi
# Get the link and format
echo -e "\e[1;4m# Enter Youtube Link:\e[0m"
read -p "Link: " LINK
echo -e "\e[0m"
echo -e "\e[1;4m# Choose format [1:mp3, 2:wav, 3:ogg, 4:mp4, 5:mkv] (default is mp3):\e[0m"
read -p "Format: " FORMAT
echo -e "\e[0m"
# Convenience :sparkles:
ALWAYSINCCMD="$RLCMD $SPDCMD $CHPTCMD $MTDCMD"
EXPLORERDIR=$MUSICDIR
# Ugly if elif else block
if [ "$FORMAT" == "" ]; then
if [ $LEGACY -eq 1 ]; then
youtube-dl --no-playlist $RLCMD $SPDCMD $MTDCMD $THMBCMD --console-title -i -f "m4a/bestaudio" -x --audio-format mp3 "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s"
else
yt-dlp --no-playlist $RLCMD $SPDCMD $CHPTCMD $MTDCMD $THMBCMD --console-title -i -f "m4a/bestaudio" -x --audio-format mp3 "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s" -o "chapter:$MUSICDIR/%(section_title)s - %(title)s.%(ext)s"
fi
elif [ $FORMAT -eq 1 ]; then
if [ $LEGACY -eq 1 ]; then
youtube-dl --no-playlist $RLCMD $SPDCMD $MTDCMD $THMBCMD --console-title -i -f "m4a/bestaudio" -x --audio-format mp3 "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s"
else
yt-dlp --no-playlist $RLCMD $SPDCMD $CHPTCMD $MTDCMD $THMBCMD --console-title -i -f "m4a/bestaudio" -x --audio-format mp3 "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s" -o "chapter:$MUSICDIR/%(section_title)s - %(title)s.%(ext)s"
fi
elif [ $FORMAT -eq 2 ]; then
if [ $LEGACY -eq 1 ]; then
youtube-dl --no-playlist $RLCMD $SPDCMD $MTDCMD --console-title -i -f "m4a/bestaudio" -x --audio-format wav "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s"
else
yt-dlp --no-playlist $RLCMD $SPDCMD $CHPTCMD $MTDCMD --console-title -i -f "m4a/bestaudio" -x --audio-format wav "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s" -o "chapter:$MUSICDIR/%(section_title)s - %(title)s.%(ext)s"
fi
elif [ $FORMAT -eq 3 ]; then
if [ $LEGACY -eq 1 ]; then
youtube-dl --no-playlist $RLCMD $SPDCMD $MTDCMD --console-title -i -f "m4a/bestaudio" -x --audio-format vorbis "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s"
else
yt-dlp --no-playlist $RLCMD $SPDCMD $CHPTCMD $MTDCMD $THMBCMD --console-title -i -f "m4a/bestaudio" -x --audio-format vorbis "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s" -o "chapter:$MUSICDIR/%(section_title)s - %(title)s.%(ext)s"
fi
elif [ $FORMAT -eq 4 ]; then
if [ $LEGACY -eq 1 ]; then
youtube-dl --no-playlist $RLCMD $SPDCMD $MTDCMD $SUBTCMD --console-title -i -f "bestvideo[ext=webm][height<=?$VIDEOQUALITY]+bestaudio[ext=m4a]" "$LINK" --recode-video "mp4" $DBGCMD $PPCMD $PPCMDARGS -o "$VIDEODIR/%(title)s.%(ext)s"
else
yt-dlp --no-playlist $RLCMD $SPDCMD $CHPTCMD $MTDCMD $THMBCMD $SUBTCMD --console-title -i -f "webm/bestvideo[height<=$VIDEOQUALITY]+m4a/bestaudio" "$LINK" $RMXCMD "mp4" $DBGCMD $PPCMD $PPCMDARGS -o "$VIDEODIR/%(title)s.%(ext)s" -o "chapter:$VIDEODIR/%(section_title)s - %(title)s.%(ext)s"
fi
EXPLORERDIR=$VIDEODIR
elif [ $FORMAT -eq 5 ]; then
if [ $LEGACY -eq 1 ]; then
youtube-dl --no-playlist $RLCMD $SPDCMD $MTDCMD $SUBTCMD --console-title -i -f "bestvideo[ext=webm][height<=?$VIDEOQUALITY]+bestaudio[ext=m4a]" "$LINK" $DBGCMD -o "$VIDEODIR/%(title)s.%(ext)s"
else
# Rip anyone who uses a 6 month old version of yt-dlp
yt-dlp --no-playlist $RLCMD $SPDCMD $CHPTCMD $MTDCMD $SUBTCMD --console-title -i -f "webm/bestvideo[height<=$VIDEOQUALITY]+m4a/bestaudio" "$LINK" $DBGCMD -o "$VIDEODIR/%(title)s.%(ext)s" -o "chapter:$VIDEODIR/%(section_title)s - %(title)s.%(ext)s"
fi
EXPLORERDIR=$VIDEODIR
else
if [ $LEGACY -eq 1 ]; then
youtube-dl --no-playlist $RLCMD $SPDCMD $MTDCMD $THMBCMD --console-title -i -f "m4a/bestaudio" -x --audio-format mp3 "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s"
else
yt-dlp --no-playlist $RLCMD $SPDCMD $CHPTCMD $MTDCMD $THMBCMD --console-title -i -f "m4a/bestaudio" -x --audio-format mp3 "$LINK" --audio-quality $AUDIOQUALITY $DBGCMD -o "$MUSICDIR/%(title)s.%(ext)s" -o "chapter:$MUSICDIR/%(section_title)s - %(title)s.%(ext)s"
fi
fi
if [ $EXPLORER -eq 1 ]; then
# If no xdg-utils, experience pain by the power of cd-skull
if [ -f "/usr/bin/xdg-open" ]; then
read -p "Opening file browser... "
xdg-open $EXPLORERDIR
else
cd $EXPLORERDIR
fi
fi
if [ $REOPEN -eq 1 ]; then
bash start.sh
fi
# Initial code by Sprinter05, SH port by Tulip