LINUX.ORG.RU

Сообщения nedo-user_2-0

 

готовый скрипт для скачивания видео/аудио с YouTube через терминал

Форум — Development

Всем привет! В программировании я не разбираюсь, но с помощью нейросетей создал скрипт для скачивания видео и mp3 с Ютуба через терминал. Может, кому-то пригодится. Проверял на Linux Mint. Сильно не ругайте. Для начала откройте терминал:

  1. sudo apt update && sudo apt upgrade -y
  2. sudo apt install ffmpeg -y && sudo apt install yt-dlp -y
  3. nano file_name.sh
  4. скопировать код из поста
  5. Ctrl+X -> Y (Yes) -> Enter
  6. chmod +x file_name.sh
  7. 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

 , , ,

nedo-user_2-0
()

RSS подписка на новые темы