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

Скачивание видео с 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
Автор
Редакция

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро