Работа с YouTube

Загрузка видео и субтитров с YouTube

Последнее обновление: 16.11.2022

Для работы с 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)

Примерный вывод:

[<Stream: itag="17" mime_type="video/3gpp" res="144p" fps="12fps" vcodec="mp4v.20.3" acodec="mp4a.40.2" progressive="True" type="video">, 
<Stream: itag="18" mime_type="video/mp4" res="360p" fps="24fps" vcodec="avc1.42001E" acodec="mp4a.40.2" progressive="True" type="video">, 
<Stream: itag="22" mime_type="video/mp4" res="720p" fps="24fps" vcodec="avc1.64001F" acodec="mp4a.40.2" progressive="True" type="video">, 
.................................
<Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus" progressive="False" type="audio">]

Для загрузки видео нам надо выбрать конкретный стрим из полученного списка и вызвать у него метод 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)

В данном случае мы получим информацию о субтитрах в следующем виде:

{'en': <Caption lang="English" code="en">, 
'a.en': <Caption lang="English (auto-generated)" code="a.en">, 
'pt-BR': <Caption lang="Portuguese (Brazil)" code="pt-BR">, 
'ru': <Caption lang="Russian" code="ru">, 
'es-MX': <Caption lang="Spanish (Mexico)" code="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"Загрузка плейлиста: {playlist.title}")
for video in playlist.videos:
    video.streams.first().download()
    print(f"Видео {video.title} загружено")

С помощью атрибута video_urls можно получить все ссылки на видео в плейлисте:

from pytube import Playlist

playlist = Playlist("https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6")

for url in playlist.video_urls:
    print(url)
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850