Скачивание видео с YouTube с помощью Python

Загрузка видео с YouTube в локальное хранилище часто вызывает сложности, особенно если сторонние загрузчики перестают работать. Но вы можете собрать надёжный загрузчик на Python и поддерживать его сами.
Ниже — пошаговая инструкция, примеры кода и рекомендации: как начать, как выбирать потоки (streams), как обрабатывать ошибки и какие есть альтернативные подходы.
Установка Python и подготовка проекта
Если у вас macOS, Python часто предустановлен. На Windows скачайте и установите последнюю версию с python.org.
Проверить установку можно в терминале командой:
python --versionСоздайте папку проекта, внутри которой создайте файл с расширением .py и виртуальное окружение:
python -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activateОткройте файл в любом текстовом редакторе (VS Code, PyCharm, Sublime и т. п.).
Важно: скачивайте видео только если у вас есть на это право (владелец контента, свободная лицензия или личное использование в рамках закона). См. раздел «Юридические и приватные соображения» ниже.
Установка pytube и импорт
Установите pytube через pip:
pip install pytubeВ начале скрипта импортируйте класс YouTube:
from pytube import YouTubeПростой пример: показать доступные потоки и скачать видео
Скопируйте URL видео на YouTube.
Создайте объект YouTube и выведите доступные потоки:
from pytube import YouTube
URL = "https://www.youtube.com/watch?v=EXAMPLE"
video = YouTube(URL)
video_streams = video.streams
print(video_streams)Вывод будет содержать набор Stream-объектов с атрибутами: itag, mime_type, res (разрешение), fps, vcodec, acodec и т. д.
- Отфильтруйте по расширению и выберите поток по itag. Пример для 720p (обычно itag=22):
video_stream = video.streams.filter(file_extension='mp4').get_by_itag(22)
print(video_stream)Чтобы скачать выбранный поток в текущую папку:
video_stream.download()Чтобы задать имя файла и путь загрузки:
video_stream.download(filename="my_first_youtube_download.mp4", output_path="/path/to/videos")Полный готовый пример (360p — itag 18):
from pytube import YouTube
URL = "https://www.youtube.com/watch?v=EXAMPLE"
video = YouTube(URL)
video_stream = video.streams.filter(file_extension='mp4').get_by_itag(18)
video_stream.download(filename = "my_first_youtube_download_360p.mp4", output_path = "/path/to/videos")После загрузки в проводнике Windows: открыть файл -> Свойства -> Сведения, раздел Видео, поле “Высота кадра” указывает фактическое вертикальное разрешение (например, 720, 1080).
Как понять itag и разрешения
Каждый поток имеет уникальный itag — числовой идентификатор набора параметров (кодек, разрешение, аудиопоток и т. п.). Список itag доступен при выводе video.streams. Если вы используете прогрессивный поток (progressive=True), видео и аудио уже объединены в один файл. Для DASH потоков видео и аудио идут раздельно и требуют слияния.
Совет: если нужно качество 1080p с отдельным аудио (DASH), скачайте видеопоток и аудиопоток отдельно, затем объедините через ffmpeg:
ffmpeg -i video.mp4 -i audio.mp4 -c copy output.mp4Отладка и распространённые ошибки
- Ошибка: HTTPError / 403 / Video unavailable — видео может быть регионально заблокировано, приватным или удалённым.
- pytube кидает исключение при изменениях YouTube в HTML — обновите pytube или используйте его форки.
- Если прогрессивных потоков нет для нужного разрешения, ищите DASH-потоки и комбинируйте с ffmpeg.
- Проблемы с SSL/сертификатами — обновите систему и pip, проверьте переменные окружения прокси.
Пример обработки исключений в коде:
from pytube import YouTube
from pytube.exceptions import RegexMatchError
try:
video = YouTube(URL)
except RegexMatchError:
print("Неверный URL или изменён формат страницы YouTube")
except Exception as e:
print("Ошибка при инициализации YouTube:", e)
else:
try:
stream = video.streams.filter(file_extension='mp4').get_by_itag(22)
stream.download()
except AttributeError:
print("Поток с таким itag не найден")
except Exception as e:
print("Ошибка при загрузке:", e)Когда этот подход не работает (контрпример)
- Видео защищено DRM или доступ ограничен платной подпиской — pytube не сможет скачать.
- YouTube изменил HTML API и pytube ещё не обновлён — тогда используйте альтернативу (ниже) или патчите библиотеку.
- Требуется массовая загрузка с параллельной обработкой плейлистов и метаданных — лучше использовать специализированные инструменты.
Альтернативные подходы
- yt-dlp (форк youtube-dl) — более стабильный, с большим количеством опций, поддерживает плейлисты, обход ограничений и форматирование названий. Удобен для CLI и интеграции:
pip install yt-dlp
yt-dlp -f bestvideo+bestaudio --merge-output-format mp4 - youtube-dl — старый инструмент, иногда менее актуален.
- Использовать headless браузер (Selenium/Playwright) только при отсутствии API или динамическом контенте.
Выбор: pytube хорош для простых скриптов и интеграции в Python-проекты; yt-dlp — для надёжных массовых загрузок и сложных опций.
Чек-лист перед запуском (роль: разработчик / пользователь)
Разработчик
- Установлен Python и виртуальное окружение
- Установлен pytube или yt-dlp
- Проверен URL и доступность видео
- Настроен путь для сохранения
- Если требуется — установлен ffmpeg
Пользователь
- Имеется право скачивать видео
- Достаточно места на диске
- Понимает, как изменить имя файла и папку
Мини‑методология: как быстро собрать надежный загрузчик
- Начните с pytube для одного видео. 2. Добавьте обработку ошибок и логирование. 3. Для плейлистов или больших объёмов переходите на yt-dlp. 4. Для постобработки используйте ffmpeg и проверяйте контрольные суммы.
Безопасность и приватность
- Не храните токены/пароли в коде. Храните конфиденциальные данные в переменных окружения или менеджерах секретов.
- Загружая чужой контент, соблюдайте авторские права и условия сервиса. Для коммерческого использования получите разрешение правообладателя.
Юридические и локальные замечания (GDPR и права)
Скачивание пользовательских данных или видео с персональными данными может подпадать под правила защиты персональных данных (например, GDPR в ЕС). Если вы планируете хранить или обрабатывать персональные данные из видео — проконсультируйтесь с юридическим отделом и минимизируйте сбор данных.
Критерии приёмки
- Скрипт успешно скачивает тестовое видео в указанную папку.
- Файл воспроизводится локально и имеет ожидаемое разрешение.
- Скрипт корректно обрабатывает недоступные URL и выводит понятную ошибку.
- При скачивании DASH-потока отдельные аудио/видео сливаются в финальный MP4 (если задано).
Рекомендации по тестированию
- Тестовый кейс 1: скачать 360p видео, проверить, что Frame height = 360.
- Тестовый кейс 2: скачать 720p прогрессивный поток и проверить наличие аудио.
- Тестовый кейс 3: попытаться скачать недоступное видео — убедиться, что выдаётся понятное сообщение.
Советы по совместимости и миграции
- pytube иногда ломается при изменениях YouTube — следите за релизами на PyPI и GitHub.
- Для массовых задач и CI используйте yt-dlp и контейнеризацию (Docker) для стабильности окружения.
ALT текста выше: первая картинка — панорамная иллюстрация процесса скачивания видео с YouTube с помощью Python; вторая — консольный вывод списка доступных видеопотоков pytube; третья — фильтрованные потоки mp4 с пометками разрешения и itag.
Краткое руководство по переходу на yt-dlp (быстрая аннотация)
- Установите yt-dlp: pip install yt-dlp.
- Запустите в терминале: yt-dlp -F
чтобы получить список форматов и itag. - Скачайте нужный набор: yt-dlp -f
-o “%(title)s.%(ext)s”
yt-dlp имеет множество опций (авторизация, работа с cookie, загрузка субтитров и метаданных). Это часто быстрее и стабильнее для сложных задач.
1‑строчный глоссарий
- itag: числовой идентификатор потока YouTube, описывающий кодек, разрешение и наличие аудио.
- прогрессивный поток: видео и аудио в одном файле (удобно для простых скачиваний).
- DASH: поток, где видео и аудио разделены; требует слияния для получения одного файла.
FAQ
Q: Нужны ли дополнительные инструменты для объединения видео и аудио?
A: Да, если вы скачали DASH-потоки (раздельное видео и аудио), используйте ffmpeg для слияния.
Q: Что выбрать — pytube или yt-dlp?
A: Для простых Python-скриптов — pytube. Для масштабных задач, плейлистов и стабильности — yt-dlp.
Итого: вы получили рабочую инструкцию для создания простого загрузчика видео с YouTube на Python, список возможных ошибок и альтернативы. Начните с pytube, автоматизируйте обработку ошибок и при необходимости переходите на более мощные инструменты.
Похожие материалы
Как устроить идеальную вечеринку для просмотра ТВ
Как распаковать несколько RAR‑файлов сразу
Приватный просмотр в Linux: как и зачем
Windows 11 не видит iPod — способы исправить
PS5: как настроить игровые пресеты