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

Что вы получите
- Рабочий Python-скрипт, который скачивает выбранное видео с YouTube.
- Понимание потоков (streams) и значений itag.
- Интерактивный пример выбора разрешения и автоматическая загрузка.
- Подсказки по отладке, безопасность и альтернативы.
Предпосылки
- Базовые навыки работы с терминалом/командной строкой.
- Установленный Python (3.7+ рекомендуется). Если вы используете macOS, Python может быть уже установлен; на Windows скачайте его с https://python.org.
- Доступ в интернет и URL нужного видео на YouTube.
Важно: загружайте видео только при наличии прав или если это разрешено законом. Это руководство не поощряет нарушение авторских прав.
Установка и настройка окружения
- Создайте рабочую папку для проекта и перейдите в неё:
mkdir youtube-downloader
cd youtube-downloader- Создайте виртуальное окружение и активируйте его.
- На Windows:
python -m venv venv
venv\Scripts\activate- На macOS / Linux:
python3 -m venv venv
source venv/bin/activate- Установите pytube через pip:
pip install pytubeАльтернативы: если у вас возникнут проблемы с pytube, можно использовать yt-dlp (форк youtube-dl) — подробнее в разделе Альтернативы.
Быстрый пример — минимальный скрипт
Этот код показывает минимальный набор действий: импорт, создание объекта YouTube, выбор потока и скачивание.
from pytube import YouTube
URL = "Введите_сюда_URL_видео"
video = YouTube(URL)
stream = video.streams.filter(file_extension='mp4').get_by_itag(22) # 22 обычно = 720p
stream.download()Запустите из терминала:
python file_name.pyПо умолчанию файл сохраняется в текущий рабочий каталог и получает название, соответствующее заголовку видео на YouTube.
Как просмотреть доступные потоки и itag
pytube предоставляет список потоков для каждого видео — в них указаны формат, разрешение и значение itag. Сначала распечатайте все доступные потоки:
from pytube import YouTube
URL = "Введите_сюда_URL_видео"
video = YouTube(URL)
print(video.streams)Вы увидите набор объектов Stream с полями itag, mime_type и res. Например: itag=”22” res=”720p” или itag=”18” res=”360p”. Значения itag могут отличаться для разных видео и со временем; всегда проверяйте вывод для конкретного ролика.
Вы можете фильтровать по расширению файла:
video_streams = video.streams.filter(file_extension='mp4')
print(video_streams)Интерактивный загрузчик: выбрать itag и скачать
Ниже — расширенный пример, который:
- показывает потоки в удобном формате,
- просит пользователя ввести itag,
- скачивает файл в указанную папку с опцией переименования,
- обрабатывает базовые ошибки.
from pytube import YouTube
import os
def list_streams(video):
streams = video.streams.filter(file_extension='mp4').order_by('resolution').desc()
print("Доступные потоки:")
for s in streams:
print(f"itag={s.itag} res={s.resolution} fps={s.fps} progressive={s.is_progressive} type={s.mime_type}")
return streams
def main():
url = input("Вставьте URL видео YouTube: ").strip()
try:
yt = YouTube(url)
except Exception as e:
print("Не удалось обработать URL:", e)
return
print("Заголовок:", yt.title)
streams = list_streams(yt)
chosen = input("Введите itag желаемого потока: ").strip()
stream = yt.streams.get_by_itag(int(chosen))
if not stream:
print("Поток с таким itag не найден.")
return
output_path = input("Папка для сохранения (оставьте пустым для текущей): ").strip() or os.getcwd()
filename = input("Имя файла (без расширения, нажмите Enter для имени по умолчанию): ").strip() or None
try:
stream.download(output_path=output_path, filename=filename)
print("Скачано успешно в:", output_path)
except Exception as e:
print("Ошибка при загрузке:", e)
if __name__ == '__main__':
main()Краткое пояснение: флаг progressive=True означает, что аудио и видео находятся в одном файле (подходит для простого скачивания). Если progressive=False, видео и аудио разделены (DASH streams) и их нужно объединять (например, с помощью ffmpeg).
Прогресс загрузки (колбэк)
Чтобы видеть прогресс, используйте on_progress_callback у YouTube. Пример:
def progress_callback(stream, chunk, bytes_remaining):
total = stream.filesize
downloaded = total - bytes_remaining
percent = downloaded / total * 100
print(f"Загружено: {percent:.1f}%", end='\r')
yt = YouTube(URL, on_progress_callback=progress_callback)Этот колбэк вызывается при получении каждого чанка и печатает прогресс в процентах.
Указание каталога и имени файла
Пример с явным указанием имени и каталога:
stream.download(filename = "my_first_youtube_download", output_path = "C:\\Users\\You\\Videos")На macOS/Linux путь будет выглядеть как “/home/you/Videos” или “./videos”.
Проверка разрешения скачанного файла
После скачивания в файловом менеджере или проводнике щёлкните правой кнопкой по файлу, откройте Свойства → Детали и посмотрите “Высота кадра” — это значение соответствует вертикальному разрешению (например, 720 означает 720p).
Что делать, если поток без аудио (separate audio/video)
Некоторые высокие разрешения возвращают только видео без аудио (progressive=False). В таких случаях можно:
- скачать аудиопоток отдельно и объединить с видео через ffmpeg;
- либо выбрать progressive-поток с более низким разрешением.
Пример скачивания аудио и объединения (общая последовательность):
- Скачать видео (itag для видео).
- Скачать аудио (обычно mime_type содержит “audio”).
- Объединить с помощью ffmpeg: ffmpeg -i video.mp4 -i audio.mp4 -c copy output.mp4
Альтернативы и когда pytube не подходит
- yt-dlp: более устойчивый и активно поддерживаемый инструмент для загрузки видео с большого числа сайтов. Подходит, когда pytube ломается.
- youtube-dl: исторически популярный, сейчас менее активно обновляется.
- Браузерные расширения: удобны для пользователей без навыков программирования, но часто менее гибки и могут быть небезопасны.
Когда pytube может не подойти:
- Если YouTube изменил API/структуру и pytube временно не поддерживает новые изменения.
- Если вам нужно массовое скачивание с обработкой метаданных и конвертацией — лучше yt-dlp с параметрами.
Практические советы и отладка
- Если при установке pytube возникают ошибки, попробуйте обновить pip и пересоздать виртуальное окружение.
- Если при парсинге потоков появляются исключения, убедитесь, что URL корректен и у вас стабильное подключение.
- Для массовой загрузки добавьте задержки и обработку исключений, чтобы избежать блокировок.
- Используйте on_progress_callback для визуальной индикации в скриптах без GUI.
Important: некоторые видео защищены или имеют региональные ограничения — такие материалы может быть невозможно скачать.
Юридические и конфиденциальные заметки
- Загрузка материалов без разрешения правообладателя может нарушать условия YouTube и авторское право. Пользователь несёт ответственность за законность своих действий.
- Не храните и не распространяйте личные данные третьих лиц без их согласия.
Роль‑ориентированные чеклисты
Разработчик:
- Установить виртуальное окружение.
- Проверить работу pytube на тестовом видео.
- Добавить обработку ошибок и логирование.
Не‑разработчик / пользователь:
- Скопировать готовый скрипт.
- Вставить URL и запустить.
- Проверить папку загрузки.
IT‑администратор:
- Ограничить права на папки для хранения загрузок.
- Контролировать использование сетевого трафика при массовой загрузке.
Критерии приёмки
- Скрипт скачивает указанный файл в выбранный каталог.
- Размер загруженного файла > 0 байт и воспроизводится в медиаплеере.
- Разрешение файла соответствует выбранному потоку (проверяется через свойства файла).
Чек-лист для расширения функционала (идеи)
- Добавить GUI с помощью Tkinter или PyQt.
- Поддержка пакетной загрузки (список URL в CSV).
- Автопереименование по шаблону: {author}{title}{itag}.
- Интеграция с ffmpeg для конвертации и слияния аудио/видео.
Краткое резюме
Python и pytube позволяют быстро собрать простой и удобный загрузчик видео с YouTube. Для большинства задач достаточно распечатать доступные потоки, выбрать нужный itag и вызвать download. Для профессиональных сценариев рекомендуется изучить yt-dlp и механизмы объединения треков через ffmpeg.
Summary:
- Начните с виртуального окружения и установки pytube.
- Проверьте доступные потоки и выберите itag для нужного разрешения.
- Для прогресса используйте on_progress_callback.
- Рассмотрите yt-dlp и ffmpeg для более сложных случаев.
Social preview suggestion: Заголовок: Скачать видео с YouTube с помощью Python — руководство Описание: Простой скрипт на Python с выбором потока по itag, прогрессом загрузки и советами по отладке.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone