Работа с YouTube
Для работы с youtube установим через менеджер пакетов pip пакет pytube с помощью следующей команды:
pip install pytube
Загрузка видео с youtube
Для обращения к определенному видео на youtube необходимо создать объекта YouTube, в конструктор которого передается ссылка на видео:
from pytube import YouTube # ссылка на загружаемое видео link = "https://www.youtube.com/watch?v=J0Aq44Pze-w" yt = YouTube(link)
С помощью атрибута streams можно получить все стримы, связанные с этим видео (в том числе отдельно его аудиодорожки), и их параметры:
from pytube import YouTube # ссылка на загружаемое видео link = "https://www.youtube.com/watch?v=J0Aq44Pze-w" yt = YouTube(link) print(yt.streams)
Для загрузки видео нам надо выбрать конкретный стрим из полученного списка и вызвать у него метод download() . Например, выберем и загрузим первый стрим:
from pytube import YouTube link = "https://www.youtube.com/watch?v=J0Aq44Pze-w" yt = YouTube(link) yt.streams.first().download() print("Видео успешно загружено")
При этом мы можем загрузить разные варианты видео. Для выбора видео в наилучшем расширении библиотека предоставляет специальный метод get_highest_resolution() :
YouTube("https://www.youtube.com/watch?v=J0Aq44Pze-w").streams.get_highest_resolution().download()
Загрузка субтитров
Для получения информации о субтитрах класс YouTube предоставляет атрибут captions , который предоставляет словарь объектов Caption, фактически список доступных субтитров:
from pytube import YouTube link = "https://www.youtube.com/watch?v=bDo18m-uOi8" yt = YouTube(link) print(yt.captions)
В данном случае мы получим информацию о субтитрах в следующем виде:
, 'a.en': , 'pt-BR': , 'ru': , 'es-MX': >
В полученном словаре ключ представляет языковую культуру, например, «pt-BR» (бразильский португальский) или «en» (общий английский). Для автосгенерированных субтитров код языка предваряется символом «a», например, «a.en». Значение ключа дублируется в атрибуте «code» объекта Caption.
Для загрузки субтитров применяется у Caption применяется метод download() , например, загрузим субтитры для английского языка:
from pytube import YouTube yt = YouTube("https://www.youtube.com/watch?v=bDo18m-uOi8") yt.captions["en"].download(title="Python", srt=False) print("Субтитры загружены")
В метод download() передаются два параметра. Параметр title представляет название файла, в который будут сохраняться субтитры. Второй параметр — srt указывает, в каком формате загружать субтитры: если равно True , то загружаются в формате srt, если False — в формате xml.
Взаимодействие с плейлистами
Для взаимодействия с плейлистами библиотека предоставляет класс Playlist :
from pytube import Playlist
Для создания объекта Playlist в конструктор класса надо передать ссылку на плейлист:
playlist = Playlist("https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6")
Все видео из плейлиста мы можем получить с помощью атрибута videos , которое представляет список Stream. Например, загрузим все видео из плейлиста:
from pytube import Playlist playlist = Playlist("https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6") print(f"Загрузка плейлиста: ") for video in playlist.videos: video.streams.first().download() print(f"Видео загружено")
С помощью атрибута video_urls можно получить все ссылки на видео в плейлисте:
from pytube import Playlist playlist = Playlist("https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6") for url in playlist.video_urls: print(url)
Загрузчик YouTube-роликов на Python
Зачастую новички быстро теряют интерес к программированию, потому что не могут сразу применить свои знания на практике и сделать что-то интересное и полезное. Вывод цифр и результатов работы сортировочных алгоритмов в консоль быстро надоедает и утомляет, а знаний на большие проекты в начале пути не хватает. Поэтому в этой статье мы напишем маленькую программу, которая поможет нам автоматизировать процесс скачивания видео YouTube и разберем принципы работы с библиотекой pytube.
В самом начале
Для начала нам надо убедиться, что на компьютере установлена актуальная версия Python и библиотеки pytube. Для этого достаточно последовательно ввести в консоль команды со скриншота ниже. Если в ответ увидели номер версии, то все необходимое уже установлено.

Для установки на Linux поочередно введите в консоль следующие команды:
sudo pip install python3
sudo pip install pytube3
Еще нам понадобится любая удобная IDE, редактор кода или даже онлайн-инструмент наподобие Repl.it, при работе в нем даже не надо будет что-то устанавливать, при первом запуске сервис сам скачает все необходимые пакеты. Я же пишу код в Pycharm Professional.
Приступаем к написанию кода
Для того чтоб лучше понять, что мы хотим от работы нашей программы, изобразим общий алгоритм на блок-схеме. Это максимально простая схема, которая поможет нам понимать, что и в каком порядке мы должны выполнять.

Мы хотим выводить информацию в консоль на русском языке, поэтому в самом начале нашего файла пропишем вот эти три строчки и заодно объявим использование библиотеки pytube:

Затем обратимся к схеме и заметим, что сперва надо спросить пользователя ссылку на скачиваемое видео. Поэтому в следующих двух строках попросим пользователя ввести ссылку, поместим её в переменную link и передадим классу YouTube:

Теперь нам надо вывести в консоль информацию о видео по ссылке. Библиотека pytube позволяет нам получать множество данных о видео, таких, как название, длительность, описание, рейтинг, количество просмотров, метаданные, ключевые слова, проверить доступ к видео и многое другое, весь список возможностей можно узнать на сайте библиотеки.
Мы же будем выводить для пользователя только название ролика, его продолжительность и количество просмотров. Напишем это в следующих строках:

Если Вы часто смотрите ролики на YouTube, то наверняка знаете, что каждое видео доступно в нескольких форматах и с разным разрешением. Pytube позволяет нам работать с этими потоками и если мы далее напишим слеующую строку и запустим код, то увидим в консоли все доступные потоки:
#Вывод всех доступных потоков
print(yt.streams)
Мы можем фильтровать потоки, выбирать нужные и уже работать с ними, для этого доступны следующие конструкции:
#Вывод всех аудио-потоков
print(yt.streams.filter(only_audio=True))
#Вывод всех видео-потоков
print(yt.streams.filter(only_video=True))
#Вывод всех progressive-потоков
print(yt.streams.filter(progressive=True))
#progressive-потоки — содержат и аудио и видео потоки, но качеств ограничено в 720p
#dash-потоки — содержат только видео-потоки в высоком качестве
Но мы хотим упростить задачу себе и будем сразу скачивать видео в наилучшем доступном качестве, для этого пишем следующее:

Еще раз обратим внимание на схему и заметим, что первые два пункта мы уже выполнили, теперь остается только скачать видео, для этого достаточно написать всего одну строчку:
ys.download()
У такой конструкции есть несколько минусов. Во-первых, пользователь не видит прогресса и не знает началось ли скачивание и когда оно закончится, во-вторых, видео сохранится в папку с проектом, а не в привычную для пользователя “Загрузки”, поэтому чуть-чуть исправим нашу строку, указав полный путь до необходимой папки, и получим следующее:

Теперь у нас есть информирование о начале и завершении загрузки и все сохраняется по привычному пути.
Весь код можно посмотреть на GitHub, а выглядит он так:

Что дальше?
На самом деле это самая простая реализация подобного инструмента и его можно заметно улучшить:
- добавить возможность передавать ссылку на видео аргументом командной строки;
- сделать обработку ошибок, если пользователь передаст программе не ссылку;
- дать возможность выбирать поток для скачивания и путь для сохранения;
- сделать интерфейс для более удобного взаимодействия с программой.
Youtube-dl, качаем видео с ютуба и не только.
но сделать это не так просто, как бы того хотелось, поскольку владельцы подобных площадок ограничивают и блокируют саму возможность скачивания контента как на компьютер или ноутбук, так и на мобильные устройства. обусловлена такая политика несколькими факторами, такими как требования законодательства об авторском праве и соблюдение интересов рекламодателей. но не всегда удобно смотреть двухчасовой фильм сидя за компьютером, а зрелищное спортивное состязание на экране мобильного телефона. и тут на помощь приходят специальные утилиты для скачивания видео. их не так мало, но не все они хороши, и тем более для незрячих. наиболее удобной и качественной является консольная утилита youtube-dl. эта утилита разрабатывается группой испанских энтузиастов, часто обновляется, имеет широкие возможности, а также поддерживает широкий круг видеохостингов и соцсетей, включая даже вконтакте. в этой статье мы рассмотрим наиболее полезные для повседневного использования функции программы.
Установка
Youtube-dl доступна в репозиториях большинства дистрибутивов линукс, а также доступна для windows и mac os. Для установки нужно выполнить стандартную для вашего дистрибутива команду:
sudo apt install youtube-dl sudo dnf install youtube-dl sudo pacman -s youtube-dl
также утилита доступна в python-pip. Для установки из данного источника установите стандартной для вашего дистрибутива командой python-pip и выполните команду:
sudo pip install youtube-dl.
примечание: для работы утилиты требуется интерпретатор python 2.6, 2.7 или 3.2.
Скачивание отдельных видео
для того чтобы скачать понравившееся видео, нужно в браузере скопировать на него ссылку, а затем в терминале выполнить:
youtube-dl и через пробел без всяких дополнительных символов вставить скопированную ранее ссылку.
видео будет загружено в домашнюю папку. к слову скажу, что я так и не нашёл способа изменить папку для загрузки.
Управление форматами
Как известно, многие видео на ютубе доступны в нескольких форматах с разным качеством. Для просмотра всех доступных форматов используется опция —list-formats . В данной ситуации команда принимает вид: youtube-dl —list-formats ссылка на видео . Для выбора понравившегося формата используем -f и номер данного формата, допустим: youtube-dl -f 5 ссылка на видео . С практической точки зрения для незрячего данный метод крайне неудобен, поскольку при применении —list-formats скринридер выдаёт большое колличество информации, которое крайне трудно запомнить и усвоить, приэтом произносится много лишнего, как то специальные символы и т.п. в таком случае лучше всего скачивать либо по умолчанию, либо использовать опции bestvideo или bestaudio: youtube-dl -f bestvidio ссылка на видео , youtube-dl -f bestaudio ссылка на видео .
Скачивание плей-листов
скачивание плейлистов по умолчанию осуществляется также, как и отдельных видео, но имеет гораздо больше опций. -i игнорирует ошибки и недоступные в плейлисте видео: youtube-dl -i ссылка на плейлист . -r ограничивает скорость закачки. доступна как для одиночных видео, так и для плейлистов: youtube-dl -r 500k ссылка на видео , youtube-dl -r 2m ссылка на видео . как видно на данных примерах, после -r указывается скорость ограничения загрузки: в первом случае до 500 килобайт, во втором до двух мегабайт. очень удобной опцией при скачивании плей-листов является —pleylist-items , которая позволяет выборочное скачивание роликов в плей-листе. есть два варианта использования: 1. приводим индексы выбранных видео через запятую: youtube-dl —pleylist-items 1,3,5,8 ссылка на видео . 2. если нужно скачать несколько роликов подряд, а потом несколько пропустить, то используются диапазоны: youtube-dl —pleylist-items 1-6,8,9,10-15 ссылка на видео . также есть возможность скачивать видео по определённой дате: —data , databefore , —datafter . например нам нужно скачать все видео из определённого плейлиста за дату восьмое марта 2020 года. команда в данном случае будет иметь вид: youtube-dl —data 20200308 ссылка на плейлист . —databefore скачивает все видео до указанной даты включительно, а —datafter скачивает видео после таковой, тоже включительно.
Конвертация в аудио
youtube-dl позволяет конвертировать скачиваемые видеоролики в популярные аудиоформаты. приведём пример команды для скачивания видео сразу в формате mp3, наиболее популярном среди пользователей: youtube-dl -x —audio-format mp3 ссылка на видео или плейлист. помимо mp3 доступны acc, flac и т.д. примечание: для конвертации в аудио нужны: ffmpeg или avconv и ffprobe или avprobe.
Графический фронтенд для youtube-dl
помимо консольной версии youtube-dl существует её графическая версия youtube-dlg. программа имеет графический интерфейс и большое колличество настроек, но не имеет русского языка. к тому же в официальных репозиториях этой утилиты как правило нет. если вы желаете с нею ознакомиться, то выполните следующие действия: sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt-get update sudo apt-get install youtube-dlg набор команд приведён для дебианоподобных дистрибутивов, но пользователи дистрибутивов с пакетной базой rpm, а также арчеподобных, легко интерпритируют данный набор команд под себя.
Заключение
youtube-dl- очень многогранная и гибкая утилита с огромным функционалом. в этой статье мы рассмотрели лишь самые основные и востребованные опции, применимые для среднестатистического рядового пользователя с учётом его потребностей. я искренне надеюсь что статья вам понравится, а главное будет полезной.
Как скачать плейлист с Ютуба?
Пытаюсь скачать плейлист с Ютуба с помощью pytube.YouTube().
Я так понял туда надо подавать в качестве параметра надо подавать ссылку на видео, а не на плэйлист.
В принципе ссылки на видео внутри плейлист отличаются только последним числом, можно в цикле увеличивать его, тем самым изменяя адрес.
Хотелось бы узнать — может есть другой способ, например передать ссылку на плейлист и получить список видео которые в нем находятся с названиями? Подскажите, если кто ковырялся в этом.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Скачать кадры с ютуба
Пытаюсь скачать кадры потокового видио онлан камеы СПБ.
Как скачать с ютуба?
У меня на работе ютуб запрещён на серваке. Но есть доступ к savefrom сайту, который качает с ютуба.
Как скачать видео с ютуба
как скачать ето видео.
Как скачать видео с ютуба
Привет! Я новичок. Подскажите как реализовать закачку видео с ютуба в коде? Какие для этого нужно.
Youtube ссылка на плейлист внутри ютуба, выдает запрос на открытие нового окна
Создал плейлист 38 Classical Hidden Gems и пытаюсь разместить ссылки в комментариях на самом же.
1040 / 575 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1

Сообщение было отмечено Четверг как решение
Решение
Четверг, есть такая штука, называется документация.
1 2 3 4 5
>>> from pytube import Playlist >>> pl = Playlist("https://www.youtube.com/watch?v=Edpy1szoG80&list=PL153hDY-y1E00uQtCVCVC8xJ25TYX8yPU") >>> pl.download_all() >>> # or if you want to download in a specific directory >>> pl.download_all('/path/to/directory/')
Регистрация: 22.12.2018
Сообщений: 2
1 2 3 4
from pytube import * pl = Playlist("Ссылка") pl.download_all() #После видео скачаются в это папку
Регистрация: 13.10.2016
Сообщений: 195
Есть готовый функционал чтоб получить не только ссылки на видео, которые входят в плейлист, но и названия этих видео (title)?
ссылки на видео и названия видео.
1040 / 575 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
Четверг, готового — нет. Вот исходник, можете с ним поковыряться и допилить нужную функцию туда.
https://github.com/nficano/pyt. laylist.py
хотя попробуйте вызвать parse_links модуля Playlist. Это обычный парсер BS. Он, вроде, список ссылок возвращает. А названия придётся допиливать. Можете по такому же принципу названия вытащить.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как скачать весь плейлист с YouTube через youtube-dl?
Скачивать отдельные ролики с выбором качества у меня проблем нет. Но вот если хочется скачать весь.
Как создать плейлист?
Как создать плейлист из нескольких .wav или .mp3-аудио? Для одного аудио сделал так: .
Плейлист как в AIMP
Всем привет. Подскажите пожалуйста, можно ли сделать подобие плейлиста AIMP, чтобы так же были две.
плейлист, как лучше хранить
Здравствуйте, делаю аудио плеер. возник вопрос, как будет лучше хранить плейлисты. функции.
Как можно реализовать плейлист?
и ещё подскажите пожалуйста как можно реализовать плейлист. я создал панель на которой листобкс в.
