3 # Cross-distro package checker and installer
8 if command -v pacman &>/dev/null; then
10 pacman -Q "$pkg" &>/dev/null
12 elif command -v dpkg &>/dev/null && command -v apt &>/dev/null; then
14 dpkg -s "$pkg" &>/dev/null
16 elif command -v rpm &>/dev/null && command -v dnf &>/dev/null; then
18 rpm -q "$pkg" &>/dev/null
20 elif command -v rpm &>/dev/null && command -v yum &>/dev/null; then
22 rpm -q "$pkg" &>/dev/null
24 elif command -v qlist &>/dev/null; then
26 qlist -I "$pkg" &>/dev/null
28 elif command -v zypper &>/dev/null; then
30 zypper se --installed-only "$pkg" | grep -q "$pkg"
33 echo "Unsupported package manager" >&2
37 if [[ $? -eq 0 ]]; then
38 echo "$pkg is already installed."
42 echo "Installing missing package: $pkg via $pm..."
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 ;;
56 check_or_install ffmpeg
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"
69 batch_dl_file="$current_dir/batch-dl.txt"
71 # Ensure bin directory exists
72 mkdir -p "$current_dir/bin"
74 # Function to download audio
76 "$exe_location" -x -f 'ba' --audio-format mp3 -o "$audio_dir/%(title)s.%(ext)s" "$url"
80 "$exe_location" -x -f 'ba' --audio-format mp3 -o "$audio_dir/%(title)s.%(ext)s" -a "$batch_dl_file"
83 # Function to download video
85 "$exe_location" -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]/bv*+ba/b" -o "$video_dir/%(title)s.%(ext)s" "$url"
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"
92 # Function to single download
93 single_dl ("$dl_val") {
94 while [ "$dl_val" -ne 1 ]; do
95 read -p "Audio or Video?: " format
99 read -p "Enter URL Here: " url
104 read -p "Enter URL Here: " url
109 echo "❗ Must be 'audio' or 'video'!"
114 # Function to batch download
115 batch_dl ("$dl_val") {
116 while [ "$dl_val" -ne 1 ]; do
117 read -p "Audio or Video?: " format
129 echo "Must be 'audio' or 'video'!"
135 # Remove existing executable (if it exists)
136 [ -f "$exe_location" ] && rm "$exe_location"
139 wget -q -O "$exe_location" https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp
140 chmod +x "$exe_location"
142 # Create directories if they don't exist
143 mkdir -p "$audio_dir"
144 mkdir -p "$video_dir"
147 while [ "$val" -ne 1 ]; do
148 read -p "Batch Download? (y/n): " type
159 echo "Must be 'y' or 'n'!"