Найти в Дзене
КУЗИНОБИТ

Скачивание видео с YouTube на Python с использованием yt-dlp.

Понадобилось мне тут как то скачать видео из youtube и скачать мне его надо было в лучшем качестве, желательно еще и со звуком 😁. Походил я по привычным сайтам, а там и не скачать уже ничего, только реклама открывается. В общем написал программку для скачивания видео вместе со звуком в самом лучшем качестве. А здесь решил ее разобрать, пусть будет. Внимание. Сразу отмечу что для скачивания потребуются специальные сервисы, ну вы поняли надеюсь 😎 Хотя, иногда, работало и без.. Скачать программу можно с Яндекс диска (инструкцию по работе вы сможете найти ниже): Статья будет поделена на несколько частей. В первой части будет описана работа кода программы, а во второй части инструкция по работе с этой программой. Дзен автоматически формирует оглавление, так что призываю вас этим пользоваться, это удобно 😉 Дзен, к моему глубокому сожалению, по прежнему некорректно отображает табуляцию, поэтому добавляю ссылку на мой репозиторий (там исходники если что) на Github, в статье код добавлен дл
Оглавление

Понадобилось мне тут как то скачать видео из youtube и скачать мне его надо было в лучшем качестве, желательно еще и со звуком 😁.

Походил я по привычным сайтам, а там и не скачать уже ничего, только реклама открывается.

В общем написал программку для скачивания видео вместе со звуком в самом лучшем качестве. А здесь решил ее разобрать, пусть будет.

Внимание. Сразу отмечу что для скачивания потребуются специальные сервисы, ну вы поняли надеюсь 😎 Хотя, иногда, работало и без..

Скачать программу можно с Яндекс диска (инструкцию по работе вы сможете найти ниже):

youtube_downloader.zip — Яндекс Диск

Статья будет поделена на несколько частей. В первой части будет описана работа кода программы, а во второй части инструкция по работе с этой программой. Дзен автоматически формирует оглавление, так что призываю вас этим пользоваться, это удобно 😉

Дзен, к моему глубокому сожалению, по прежнему некорректно отображает табуляцию, поэтому добавляю ссылку на мой репозиторий (там исходники если что) на Github, в статье код добавлен для общего представления:
GitHub - kuzinobit/youtube_download

Описание работы кода программы.

Исходный код main.py:

import yt_dlp
import os
import configparser

def progress_hook(d):
if d['status'] == 'downloading':
percentage = d['_percent_str']
print(f"Скачивание: {percentage}")

def download_video(url):
config = configparser.ConfigParser()
config.read("config.ini", encoding="utf-8")
video_format = config.get("video", "format", fallback="best")

ffmpeg_path = os.path.join("ffmpeg", "bin", "ffmpeg.exe")
os.environ["PATH"] += os.pathsep + os.path.abspath(os.path.dirname(ffmpeg_path))

ydl_opts = {
'format': video_format,
'merge_output_format': 'mp4',
'progress_hooks': [progress_hook],
'socket_timeout': 60,
'retries': 5,
'nocheckcertificates': True
}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])

if __name__ == "__main__":
url = input("Введите ссылку на видео YouTube: ")
download_video(url)

Импорт библиотек:

  • yt_dlp — библиотека для скачивания видео/аудио с YouTube и множества других сайтов.
  • os — работа с путями и переменными окружения.
  • configparser — чтение конфигурационного файла config.ini.

Функция progress_hook(d):

Вызывается во время скачивания. Если статус

downloading

то выводит процент загрузки в консоль.

Чтение конфигурации:

Если коротко, то это качество видео и аудио.

  • Загружает config.ini.
  • Из секции [video] читает параметр format (например: bestvideo+bestaudio/best).
  • Если не найдено — берётся best.

Доступные форматы:

bestvideo+bestaudio/best
bestvideo[height<=1080]+bestaudio/best
bestvideo[height<=720]+bestaudio/best
bestvideo[height<=480]+bestaudio/best
bestaudio
bestaudio[ext=mp3]
bestaudio[ext=m4a]

Подготовка ffmpeg:

  • Путь к ffmpeg.exe задаётся как ffmpeg/bin/ffmpeg.exe (относительно папки программы).
  • Этот путь добавляется в переменную окружения PATH, чтобы yt_dlp мог объединять аудио и видео.

📥 Скачивание и установка ffmpeg

Для работы с yt_dlp нужно, чтобы в системе был установлен ffmpeg.

  1. Перейдите на официальный репозиторий сборок ffmpeg:
Releases · BtbN/FFmpeg-Builds

2. Скачайте архив ffmpeg-master-latest-win64-gpl.zip (именно его я использовал).

3. Распакуйте архив. Внутри будет папка ffmpeg-master-latest-win64-gpl/bin. Переместите содержимое папки bin в директорию: youtube_download/ffmpeg/bin/

В этой папке должен лежать файл ffmpeg.exe.

Настройки загрузки (ydl_opts):

  • format — формат из конфига.
  • merge_output_format — контейнер итогового файла (mp4).
  • progress_hooks — функции, вызываемые при скачивании.
  • socket_timeout — таймаут сети (60 секунд).
  • retries — количество повторов при сбое.
  • nocheckcertificates — игнорировать ошибки SSL (при проблемах с сертификатами).

Структура папок в проекте:

Структура должна будет выглядеть следующий образом:

youtube_download/
│ main.py
│ config.ini
└─ ffmpeg/
└─ bin/
└─ ffmpeg.exe

Как использовать программу.

1. Скачиваете архив и распаковываете в любое удобное место:

youtube_downloader.zip — Яндекс Диск

2. Переходите в папку с распакованной программой и запускаете main.exe

3. После запроса, вставляете ссылку на видео и нажимаете Enter.

Запрос ввода ссылки для начала скачивания.
Запрос ввода ссылки для начала скачивания.

4. После завершения скачивания,, видео будет находится в корне папки с программой.

Процесс скачивания видео.
Процесс скачивания видео.

Важные замечания:

⚠ Не закрывайте окно программы, пока загрузка не завершится.

⚠ Если программа пишет, что не найден ffmpeg, убедитесь в наличии папки ffmpeg рядом с main.exe.

⚠ Если загрузка не начинается или выдаёт ошибку, то возможно потребуется запуск специального ПО на компьютере.

⚠ По умолчанию выбрано скачивания со звуком в максимально доступном разрешении. Можно поменять формат в файле config.ini.

Доступные форматы:

bestvideo+bestaudio/best
bestvideo[height<=1080]+bestaudio/best
bestvideo[height<=720]+bestaudio/best
bestvideo[height<=480]+bestaudio/best
bestaudio
bestaudio[ext=mp3]
bestaudio[ext=m4a]