Гид по технологиям

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

6 min read Python Обновлено 06 Dec 2025
Скачать видео с YouTube на Python
Скачать видео с YouTube на Python

Скачивание видео 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

Простой пример: показать доступные потоки и скачать видео

  1. Скопируйте URL видео на YouTube.

  2. Создайте объект 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 и т. д.

  1. Отфильтруйте по расширению и выберите поток по 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
  • Пользователь

    • Имеется право скачивать видео
    • Достаточно места на диске
    • Понимает, как изменить имя файла и папку

Мини‑методология: как быстро собрать надежный загрузчик

  1. Начните с 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) для стабильности окружения.

Вывод доступных потоков pytube

Пример фильтрации потоков mp4 с указанием разрешения

ALT текста выше: первая картинка — панорамная иллюстрация процесса скачивания видео с YouTube с помощью Python; вторая — консольный вывод списка доступных видеопотоков pytube; третья — фильтрованные потоки mp4 с пометками разрешения и itag.

Краткое руководство по переходу на yt-dlp (быстрая аннотация)

  1. Установите yt-dlp: pip install yt-dlp.
  2. Запустите в терминале: yt-dlp -F чтобы получить список форматов и itag.
  3. Скачайте нужный набор: 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, автоматизируйте обработку ошибок и при необходимости переходите на более мощные инструменты.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как устроить идеальную вечеринку для просмотра ТВ
Развлечения

Как устроить идеальную вечеринку для просмотра ТВ

Как распаковать несколько RAR‑файлов сразу
Инструменты

Как распаковать несколько RAR‑файлов сразу

Приватный просмотр в Linux: как и зачем
Приватность

Приватный просмотр в Linux: как и зачем

Windows 11 не видит iPod — способы исправить
Руководство

Windows 11 не видит iPod — способы исправить

PS5: как настроить игровые пресеты
Консоли

PS5: как настроить игровые пресеты

Как переключить камеру в Omegle на iPhone и Android
Руководство

Как переключить камеру в Omegle на iPhone и Android