shell-scripte-code/youtube.sh

114 lines
2.8 KiB
Bash
Executable file

#!/usr/bin/env bash
set -ex
if [ "$1" == "--help" ]; then
echo "Usage: $0 [URL] [FORMAT] [EXTRA]"
echo "Formate: opus/flac/m4a/mp4/video/hd/fullhd/4k/bestaudio"
echo "Beispiel für Unterordner: -o '%(channel)s/%(playlist_title)s/%(title)s.%(ext)s'"
exit 0
fi
url="$1"
format="$2"
extra="$3"
# Abfragen für interaktive Eingaben
[[ -z "${url}" ]] && read -p "URL: " url
[[ -z "${format}" ]] && read -p "Format [opus/flac/m4a/mp4/video/hd/fullhd/4k/bestaudio]: " format
# Abfrage für Various Artists
read -p "Album als Playlist Title setzen? [Y/n] " title
if [[ "$title" != "n" ]]; then
album_metadata="--parse-metadata playlist_title:%(album)s"
fi
# Abfrage für Cookies
read -p "Cookies aus cookies.txt verwenden? [Y/n] " cookies
if [[ "$cookies" != "n" ]]; then
cookies_cmd="--cookies cookies.txt"
fi
# Abfrage für Unterordner-Struktur
read -p "Unterordner nach Kanal erstellen? [Y/n] " folders
if [[ "$folders" != "n" ]]; then
output_template="-o %(channel)s/%(title)s.%(ext)s"
fi
# Abfrage für Download-Archiv
read -p "Download-Archiv verwenden? [Y/n] " use_archive
if [[ "$use_archive" != "n" ]]; then
read -p "Dateiname für Download-Archiv angeben [download-archive.txt]: " archive_file
archive_file=${archive_file:-download-archive.txt}
archive_cmd="--download-archive $archive_file"
fi
# Abfrage für Playlist-Start
read -p "Ab welchem Playlist-Eintrag soll heruntergeladen werden? [Standard: 1]: " playlist_start
if [[ -n "$playlist_start" ]]; then
playlist_start_cmd="--playlist-start $playlist_start"
fi
# Format-Spezifikationen
case "$format" in
opus)
format_cmd="-f ba --audio-format opus --format-sort abr,codec"
audio="-x"
quality="--audio-quality 0"
;;
flac)
format_cmd="-f ba --audio-format flac --format-sort abr,codec"
audio="-x"
quality="--audio-quality 0"
;;
m4a)
format_cmd="--audio-format m4a"
audio="-x"
;;
mp4)
format_cmd="--audio-format mp4"
audio="-x"
;;
video)
format_cmd="-S res:480 -f bv+ba/b"
;;
hd)
format_cmd="-S res:720 -f bv+ba/b"
;;
fullhd)
format_cmd="-S res:1080 -f bv+ba/b"
;;
4k)
format_cmd="-S res:2160 -f bv+ba/b"
;;
bestaudio)
format_cmd="-f bestaudio"
;;
*)
format_cmd=""
audio=""
quality=""
;;
esac
# Hauptbefehl mit allen Optionen
yt-dlp \
-i \
-c \
--socket-timeout 10000 \
--force-ipv4 \
--restrict-filenames \
--embed-thumbnail \
--embed-metadata \
$album_metadata \
$cookies_cmd \
${output_template} \
--match-filter "!was_live" \
$format_cmd \
$audio \
$quality \
${archive_cmd} \
${playlist_start_cmd} \
-v \
"$url" \
${extra}