Всем привет! В программировании я не разбираюсь, но с помощью нейросетей создал скрипт для скачивания видео и mp3 с Ютуба через терминал. Может, кому-то пригодится. Проверял на Linux Mint. Сильно не ругайте. Для начала откройте терминал:
- sudo apt update && sudo apt upgrade -y
- sudo apt install ffmpeg -y && sudo apt install yt-dlp -y
- nano file_name.sh
- скопировать код из поста
- Ctrl+X -> Y (Yes) -> Enter
- chmod +x file_name.sh
- sh file_name.sh или нажать на файл и открыть в терминале
сам код:
#!/bin/bash
echo "Приветствую! Выберите, что скачать на YouTube: (Ctrl+C - завершение работы)"
echo "1) Видео"
echo "2) Аудио (канал/плейлист/видео)"
echo "3) Все видео с канала"
echo "4) Выход"
read -p "Введите пункт для действия: " choice
case $choice in
1)
# Функция для выбора пути сохранения видео
choose_save_path() {
while true; do
echo "Сохранить видео в папку 'Видео'? (по умолчанию: ~/Videos)"
echo "1) Да"
echo "2) Да, но я хочу создать в ней другую папку"
echo "3) Сохранить на рабочий стол"
echo "4) Указать свой путь"
read -p "Выберите действие: " save_choice
# Установка пути сохранения в зависимости от выбора пользователя
if [ "$save_choice" -eq 1 ]; then
save_path=~/Videos
break
elif [ "$save_choice" -eq 2 ]; then
read -p "Введите имя новой папки: " folder_name
save_path=~/Videos/"$folder_name"
mkdir -p "$save_path" # Создаем папку, если она не существует
break
elif [ "$save_choice" -eq 3 ]; then
save_path=~/Desktop
break
elif [ "$save_choice" -eq 4 ]; then
read -p "Введите путь для сохранения: " save_path
break
else
echo "Ошибка: неверный выбор. Пожалуйста, порезагрузите скрипт."
sleep 5
exit 0
fi
done
}
# Функция для выбора качества видео
choose_quality() {
echo "Выберите постоянное качество (в некоторых видео может не быть хорошего качества, поэтому при ошибке - укажите качество ниже:)"
echo "1) 144p (LD)"
echo "2) 240p (SD)"
echo "3) 360p (SD)"
echo "4) 480p (SD)"
echo "5) 720p (HD)"
echo "6) 1080p (HD)"
echo "7) 1440p (2K)"
echo "8) 2160p (4K)"
echo "9) 4320p (8K)"
read -p "Введите номер качества (1-9): " quality_choice
# Определяем код качества на основе выбора пользователя
case $quality_choice in
1) quality_code="144"; quality_label="144p";;
2) quality_code="240"; quality_label="240p";;
3) quality_code="360"; quality_label="360p";;
4) quality_code="480"; quality_label="480p";;
5) quality_code="720"; quality_label="720p";;
6) quality_code="1080"; quality_label="1080p";;
7) quality_code="1440"; quality_label="2K";;
8) quality_code="2160"; quality_label="4K";;
9) quality_code="4320"; quality_label="8K";;
*) echo "Ошибка ввода, введите заново"; return 1;;
esac
return 0
}
# Функция для скачивания видео
download_video() {
# Запрашиваем ссылку на видео
while true; do
read -p "Введите ссылку на видео (или 'exit' для выхода, 'folder' - выбор папки, 'quality' - изменение качества видео): " video_url
if [[ "$video_url" == "exit" ]]; then
echo "Остановка скачивания..."
break
elif [[ "$video_url" == "folder" ]]; then
echo "Выбор папки для сохранения..."
choose_save_path
continue
elif [[ "$video_url" == "quality" ]]; then
echo "изменение качества..."
while ! choose_quality; do
echo "Пожалуйста, выберите корректное качество."
done
continue
fi
# Если качество еще не выбрано, запрашиваем его
if [ -z "$quality_code" ]; then
while ! choose_quality; do
echo "Пожалуйста, выберите корректное качество."
done
fi
# Получаем информацию о названии видео для формирования имени файла
video_title=$(yt-dlp --get-title "$video_url")
# Формируем имя файла с указанием качества
output_file="$save_path/${video_title} (${quality_label}).%(ext)s"
# Скачиваем видео с выбранным качеством и заставкой
if yt-dlp -f "bv*[height=$quality_code]+ba" --output "$output_file" --embed-thumbnail "$video_url"; then
echo "Скачивание завершено: $video_url ($quality_label)"
else
echo "Ошибка при скачивании (измените качество или проверьте правильность ссылки): $video_url"
fi
done
}
# Выбор пути сохранения
choose_save_path
# Выбор качества видео
while ! choose_quality; do
echo "Пожалуйста, выберите корректное качество."
done
# Запуск функции
download_video
echo "Скачивание завершено."
;;
2)
while true; do
read -p "Введите ссылку на аудио плейлист YouTube: " playlist_url
echo "Куда сохранить музыку?"
echo "1) В папку ~/Music"
echo "2) В папку ~/Desktop"
echo "3) Создать папку в папке ~/Music"
echo "4) Свой путь для сохранения"
read -p "Введите номер пункта: " option
case $option in
1)
save_path=~/Music
;;
2)
save_path=~/Desktop
;;
3)
read -p "Введите название папки для сохранения в 'Музыку' (по умолчанию: ~/Music/<название>): " folder_name
save_path=~/Music/"$folder_name"
mkdir -p "$save_path" # Создаем папку, если она не существует
;;
4)
read -p "Введите свой путь для сохранения: " custom_path
save_path="$custom_path"
mkdir -p "$save_path" # Создаем папку, если она не существует
;;
*)
echo "Неверный выбор. Пожалуйста, выберите 1, 2 или 3."
continue # Запрашиваем выбор снова
;;
esac
# Скачиваем музыку
yt-dlp -x --audio-format mp3 --add-metadata --embed-thumbnail --output "$save_path/%(title)s.%(ext)s" "$playlist_url"
# Запрос на продолжение
read -p "Хотите скачать еще один плейлист? (да/нет): " continue_choice
case $continue_choice in
да|Да|Yes|yes|y)
;;
*)
echo "Выход из программы."
sleep 5
break
;;
esac
done
;;
3)
read -p "Введите URL канала YouTube: " channel_url
echo "Вы хотите сохранить видео в папку 'Видео'? (по умолчанию: ~/Videos)"
echo "1) Да"
echo "2) Сохранить на рабочий стол"
echo "3) Указать свой путь"
read -p "Выберите действие: " save_choice
if [ "$save_choice" -eq 1 ]; then
save_path=~/Videos
elif [ "$save_choice" -eq 2 ]; then
save_path=~/Desktop
elif [ "$save_choice" -eq 3 ]; then
read -p "Введите путь для сохранения: " save_path
else
echo "Ошибка: неверный выбор. Выход..."
exit 1
fi
# Создание директории, если она не существует
mkdir -p "$save_path"
# Скачивание видео с указанного канала
yt-dlp -o "$save_path/%(uploader)s/%(title)s.%(ext)s" -f "bestvideo+bestaudio" "$channel_url"
echo "Скачивание завершено."
;;
4)
echo "До свидания!"
sleep 5
exit 0
;;
*)
echo "Неверный выбор. Пожалуйста, запустите скрипт снова.";
esac
#nedo-user + ai