LINUX.ORG.RU

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

 , , ,


0

0

Всем привет! В программировании я не разбираюсь, но с помощью нейросетей создал скрипт для скачивания видео и 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 (всего исправлений: 4)
Ответ на: комментарий от nedo-user_2-0

код тут поедет

https://www.linux.org.ru/help/markdown.md

Пример оформления кода:
```bash ##Именно здесь, рядом с обратными кавычками, прописать bash для красивой подсветки. Мы же все ценим красоту и не хотим пялиться на серый код.

Здесь твой код

```

Результат:

#!/bin/bash

echo «Приветствую! Выберите, что скачать на YouTube: (Ctrl+C - завершение работы)» echo «1) Видео» echo «2) Аудио (плейлист/видео)» echo «3) Все видео с канала» echo «4) Выход» read -p "Введите пункт для действия: " choice

case $choice in
krasnh ★★★★
()

В программировании я не разбираюсь, но с помощью нейросетей создал скрипт

Ещё неделя с нейронкой и ты будешь знать весь С++ в совершенстве.
Как в к/ф - «Матрица» Нео за 5 секунд в головёнку подгружали что необходимо…=)

Shprot ★★
()
Ответ на: комментарий от anonymous

проблема с музыкой например, некоторые новые альбомы не поступают на российские площадки. Думаю ещё есть люди, которые хранят музыку локально, можно скачивать видео с целого канала, хранить то, чего например не найти потом в интернете, много причин, для меня - музыка.

nedo-user_2-0
() автор топика
Ответ на: комментарий от ivabus

А кто сказал что он решает какую-то проблему? Человек просто тренируется в написании скриптов. Кто-то пишет хеллоуворды, тут человека написал это. По мне так это похвально. Пусть движется дальше.

anonymous
()
Ответ на: комментарий от anonymous

В таком случае вопрос, зачем использовать нейросеть, если человек тренируется / учится? Лучше если и смотреть, то на код, написанный опытными программистами, а не нейросетями

ivabus
()
Ответ на: комментарий от ivabus

так хоть интерес проявляется, проблема для многих - цель и мотивация, нейросеть не идеальна (не знаю как на современных и платных), чем больше работаешь с этим, само лежет тебе в голову (пример- работать за опыт, бесплатно в автомастерской, постепенно учишься, выполняя подай- принеси). Нейронка чуть рассказать может, а ты попробуй у знающего человека много спрашивать за бесплатно.

nedo-user_2-0
() автор топика
Ответ на: комментарий от nedo-user_2-0

yt-dlp сам по себе может скачать и видео отдельно, и плейлисты (альбомы), и каналы целиком.

Да и с ютуба перекодировать музыку в mp3, как по мне, не логично, ведь на ютубе звук хранится в Opus.

ivabus
()
Ответ на: комментарий от nedo-user_2-0

Если надо - прописываешь аргумент или заранее заготавливаешь какой-нибудь алиас (yt-dlp-opus: aliased to yt-dlp -f 251 -x).

Если так сильно не хочется писать yt-dlp -F

for i in 720 1080 1440 2160 4320
do
	alias yt-dlp-$i="yt-dlp -f \"bv*[height=$i]+ba\""
done
ivabus
()
Последнее исправление: ivabus (всего исправлений: 2)
Ответ на: комментарий от ivabus

мне такое выдаёт: В yt-dlp вы можете использовать несколько различных форматов аудио для извлечения. Вот некоторые из наиболее распространенных форматов, которые поддерживаются:

mp3 – Один из самых популярных форматов аудио.
aac – Формат сжатия, используемый в большинстве современных устройств.
wav – Нерасжатый формат, обеспечивающий высокое качество звука, но занимает много места.
flac – Формат сжатия без потерь, который сохраняет высокое качество звука.
ogg – Формат, использующий сжатие с потерями, популярный для потокового аудио.
m4a – Формат, используемый в основном в устройствах Apple, основанный на AAC.

может просто заменить mp3 на что-то из этого? меня звук устраивает, мало в этом понимаю. Как обычному пользователю - норм, при обнаружении проблем, буду думать

nedo-user_2-0
() автор топика