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