]> Arthur Taft Gitweb - yt-dlp-wrapper.git/blob - linux/yt-dlp-wrapper.sh
4c9caad55fdf03f4c871be2ae1176cc985545008
[yt-dlp-wrapper.git] / linux / yt-dlp-wrapper.sh
1 #!/bin/bash
2
3 # Cross-distro package checker and installer
4 check_or_install() {
5     local pkg="$1"
6     local pm=""
7
8     if command -v pacman &>/dev/null; then
9         pm="pacman"
10         pacman -Q "$pkg" &>/dev/null
11
12     elif command -v dpkg &>/dev/null && command -v apt &>/dev/null; then
13         pm="apt"
14         dpkg -s "$pkg" &>/dev/null
15
16     elif command -v rpm &>/dev/null && command -v dnf &>/dev/null; then
17         pm="dnf"
18         rpm -q "$pkg" &>/dev/null
19
20     elif command -v rpm &>/dev/null && command -v yum &>/dev/null; then
21         pm="yum"
22         rpm -q "$pkg" &>/dev/null
23
24     elif command -v qlist &>/dev/null; then
25         pm="emerge"
26         qlist -I "$pkg" &>/dev/null
27
28     elif command -v zypper &>/dev/null; then
29         pm="zypper"
30         zypper se --installed-only "$pkg" | grep -q "$pkg"
31
32     else
33         echo "Unsupported package manager" >&2
34         return 2
35     fi
36
37     if [[ $? -eq 0 ]]; then
38         echo "$pkg is already installed."
39         return 0
40     fi
41
42     echo "Installing missing package: $pkg via $pm..."
43     case "$pm" in
44         pacman) sudo pacman -Sy --noconfirm "$pkg" ;;
45         apt) sudo apt update && sudo apt install -y "$pkg" ;;
46         dnf) sudo dnf install -y "$pkg" ;;
47         yum) sudo yum install -y "$pkg" ;;
48         emerge) sudo emerge "$pkg" ;;
49         zypper) sudo zypper install -y "$pkg" ;;
50         *) echo "Cannot install $pkg on unknown system." >&2; return 3 ;;
51     esac
52 }
53
54 # Ensure dependencies
55 check_or_install wget
56 check_or_install ffmpeg
57
58 # Define variables
59 current_dir="$PWD"
60 exe_location="$current_dir/bin/yt-dlp"
61 ffmpeg_location="/usr/bin/ffmpeg"
62 audio_dir="$current_dir/audio"
63 video_dir="$current_dir/video"
64 val=0
65 dl_val=0
66 url=""
67 format=""
68 type=""
69 batch_dl_file="$current_dir/batch-dl.txt"
70
71 # Ensure bin directory exists
72 mkdir -p "$current_dir/bin"
73
74 # Function to download audio
75 audio_dl () {
76     "$exe_location" -x -f 'ba' --audio-format mp3 -o "$audio_dir/%(title)s.%(ext)s" "$url"
77 }
78
79 audio_dl_batch () {
80     "$exe_location" -x -f 'ba' --audio-format mp3 -o "$audio_dir/%(title)s.%(ext)s" -a "$batch_dl_file"
81 }
82
83 # Function to download video
84 video_dl () {
85     "$exe_location" -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]/bv*+ba/b" -o "$video_dir/%(title)s.%(ext)s" "$url"
86 }
87
88 video_dl_batch () {
89     "$exe_location" -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]/bv*+ba/b" --sponsorblock-remove sponsor,selfpromo,interaction -o "$video_dir/%(title)s.%(ext)s" -a "$batch_dl_file"
90 }
91
92 # Function to single download
93 single_dl ("$dl_val") {
94     while [ "$dl_val" -ne 1 ]; do
95         read -p "Audio or Video?: " format
96
97         case "$format" in
98             audio)
99                 read -p "Enter URL Here: " url
100                 audio_dl
101                 dl_val=1
102                 ;;
103             video)
104                 read -p "Enter URL Here: " url
105                 video_dl
106                 dl_val=1
107                 ;;
108             *)
109                 echo "❗ Must be 'audio' or 'video'!"
110                 ;;
111         esac
112     done
113 }
114 # Function to batch download
115 batch_dl ("$dl_val") {
116     while [ "$dl_val" -ne 1 ]; do
117         read -p "Audio or Video?: " format
118
119         case "$format" in
120             audio)
121                 audio_dl_batch
122                 dl_val=1
123                 ;;
124             video)
125                 video_dl_batch
126                 dl_val=1
127                 ;;
128             *)
129                 echo "Must be 'audio' or 'video'!"
130                 ;;
131         esac
132     done
133 }
134
135 # Remove existing executable (if it exists)
136 [ -f "$exe_location" ] && rm "$exe_location"
137
138 # Download yt-dlp
139 wget -q -O "$exe_location" https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp
140 chmod +x "$exe_location"
141
142 # Create directories if they don't exist
143 mkdir -p "$audio_dir"
144 mkdir -p "$video_dir"
145
146 # Download loop
147 while [ "$val" -ne 1 ]; do
148     read -p "Batch Download? (y/n): " type
149     case "$type" in
150         y)
151             batch_dl
152             val=1
153             ;;
154         n)
155             single_dl
156             val=1
157             ;;
158         *)
159             echo "Must be 'y' or 'n'!"
160             ;;
161     esac
162 done
163 exit 0