Перейти к содержимому

___ Создайте загрузчик YouTube с помощью Python (TEG: загрузка Ютуб Youtube)

URL истичник

Научитесь создавать простой работающий загрузчик YouTube с использованием Python и PyTube3.

Фото Кона Карампеласа на Unsplash

Здравствуйте, читатели! Сегодня мы будем создавать загрузчик YouTube на Python3 с использованием библиотеки PyTube3. Первоначальная библиотека pytube больше не работает, поэтому нам нужно использовать библиотеку pytube3, которая работает только с Python3, а не с Python2.

Мы увидим различные вещи, которые мы можем делать с нашим загрузчиком Youtube, и различные функции, которые он нам предлагает. Итак, давайте делать это шаг за шагом.

Загрузка и импорт библиотек

Прежде всего, прежде чем делать что-либо еще, вам нужно загрузить библиотеку pytube3 в свою систему. Для этого мы будем использовать python3.

Введите следующую команду в интерфейсе командной строки, чтобы загрузить и установить pytube3 в вашей системе.

pip install pytube3

при установке pyton-3 в Windows pip устанавливаться автоматически, но иначе можно его установить или обносить тут я написал статью об єтом «Установка PIP в Windows. (как установить PIP в Windows ?)»


Эта команда загрузит и установит pytube3 в вашей системе.

Теперь мы можем приступить к созданию нашего YouTube Downloader. Теперь нам нужно импортировать библиотеку в нашу программу для использования ее функций.

Итак, запускаем нашу программу следующей командой:

from pytube import YouTube

Вы заметите, что когда мы загрузили и установили pytube3 в нашу систему, мы импортируем pytube в код.

Чтобы устранить путаницу, pytube3 также импортируется, написав только pytube. Мы не импортируем его, записывая его как pytube3.

Принятие ввода от пользователя

Нашим следующим шагом было бы попросить пользователя предоставить нам ссылку на видео YouTube, которое нам нужно скачать. Затем пользователь предоставит нам ссылку на видео, которое он намеревается скачать.

link = input(“Enter the link: “)
yt = YouTube(link)

Итак, мы приняли ввод от пользователя и передали ссылку на наш класс YouTube. Это поможет нам раскрыть всю информацию о видео, а также позволит скачать его.

Раскрытие различной информации о видео

Теперь у нас есть ссылка, мы передали ее в класс YouTube. Теперь мы можем играть со ссылкой и раскрывать всевозможную информацию о видео, такую ​​как его название, количество просмотров, рейтинги, описание, продолжительность видео и многое другое.

#Title of video
print(“Title: “,yt.title)

#Number of views of video
print(“Number of views: “,yt.views)

#Length of the video
print(“Length of video: “,yt.length,”seconds”)

#Description of video
print("Description: ",yt.description)

#Rating
print("Ratings: ",yt.rating)

Теперь, когда мы запустим этот код, мы увидим различные подробности о видео, ссылку на которое мы передали программе. Кроме того, есть еще много таких операций, которые можно выполнить, которые вы можете найти в официальной документации pytube3.

Итак, для целей вывода мы не печатаем описания (оно большое), поэтому мы печатаем остальные четыре вещи.

Мы использовали ссылку на официальный трейлер Dark Season 3 здесь. Вы можете использовать любую ссылку по вашему выбору.

#Output obtained on running the code
Title:  Dark Season 3 | Official Trailer | Netflix
Number of views:  2019403
Length of video:  147 seconds
Ratings:  4.9721289

Итак, как вы можете видеть выше, мы напечатали различные подробности о шоу.

Просмотр доступных потоков

Вы, должно быть, видели, что на YouTube доступны различные качества для просмотра. Таким образом, при загрузке с помощью pytube мы также получаем параметры для всех доступных потоков.

pytube предлагает очень простой способ увидеть все доступные потоки по предоставленной пользователем ссылке. Итак, давайте запустим код, чтобы просмотреть все потоки, доступные для этого конкретного видео.

# печать всех доступных потоков 
print( yt.streams )

При запуске приведенного выше кода мы получаем все доступные потоки для этого видео. Ниже приведен сгенерированный вывод:

[<Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2" progressive="True" type="video">,
 <Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2" progressive="True" type="video">, 
 <Stream: itag="313" mime_type="video/webm" res="2160p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="271" mime_type="video/webm" res="1440p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028" progressive="False" type="video">, 
 <Stream: itag="248" mime_type="video/webm" res="1080p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f" progressive="False" type="video">,
 <Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401e" progressive="False" type="video">,
 <Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e" progressive="False" type="video">,
 <Stream: itag="243" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015" progressive="False" type="video">,
 <Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c" progressive="False" type="video">,
 <Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2" progressive="False" type="audio">,
 <Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus" progressive="False" type="audio">,
 <Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus" progressive="False" type="audio">,
 <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus" progressive="False" type="audio">]

Теперь вы можете видеть доступные как видео-, так и аудиопотоки. Таким образом, вы также можете отфильтровать только аудио- или видеопотоки. Вы также можете отфильтровать потоки на основе формата файла. Мы также можем отфильтровать потоки Progressive и Dash (мы поговорим о них чуть позже).

Итак, давайте отфильтруем потоки только для аудио. Для этого нам нужно написать код как таковой:

печать (yt.streams.filter (only_audio = True ))

Вывод, который мы получим, будет таким:

[<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2" progressive="False" type="audio">,
<Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus" progressive="False" type="audio">,
<Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus" progressive="False" type="audio">,
<Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus" progressive="False" type="audio">]

Теперь давайте отфильтруем потоки только для видео. Он покажет нам только те потоки, которые содержат видео, но не содержат аудио. Таким образом, он также будет отфильтровывать все прогрессивные потоки. Для этого напишем так:

печать (yt.streams.filter (only_video = True ))

Вывод, который мы получим, будет таким:

[<Stream: itag="313" mime_type="video/webm" res="2160p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="271" mime_type="video/webm" res="1440p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028" progressive="False" type="video">,
 <Stream: itag="248" mime_type="video/webm" res="1080p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f" progressive="False" type="video">,
 <Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401e" progressive="False" type="video">,
 <Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e" progressive="False" type="video">,
 <Stream: itag="243" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015" progressive="False" type="video">,
 <Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9" progressive="False" type="video">,
 <Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c" progressive="False" type="video">,
 <Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9" progressive="False" type="video">]

Теперь давайте поговорим о потоках Progressive и Dash. YouTube использует потоки Dash для более качественного рендеринга.

Прогрессивные потоки ограничены разрешением 720p и содержат файлы аудио- и видеокодеков, в то время как потоки Dash имеют более высокое качество, но содержат только видеокодеки.

Итак, если мы хотим загрузить прогрессивный поток, мы получим готовое к воспроизведению видео, которое также имеет встроенный звук.

Но для более высокого качества мы должны использовать потоки Dash для видео, а также загружать аудиопоток, а затем объединять их с помощью любого инструмента микширования.

Итак, в этой статье мы будем использовать прогрессивную потоковую загрузку, чтобы подготовить видео к воспроизведению. Вы вольны выбирать качество загрузки и выбор потока.

Итак, давайте сначала отфильтруем прогрессивные потоки. Код ниже сделает это за нас:

print(yt.streams.filter(progressive=True))

В нем будут перечислены прогрессивные потоки, доступные для загрузки. У него будут ограниченные возможности, но он работает на нас. Вывод будет выглядеть следующим образом:

[<Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2" progressive="True" type="video">,
 <Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2" progressive="True" type="video">]

Чтобы получить прогрессивный поток с самым высоким разрешением, мы можем просто написать следующий код:

ys = yt.streams.get_highest_resolution()

ys = yt.потоки. получить наивысшее разрешение()

Это создаст поток с самым высоким разрешением в переменной ys.

Мы также можем выбрать любой поток с помощью его itag.

ys = yt.потоки. get_by_itag('22')

Итак, теперь мы сохранили наш предпочтительный поток в переменной. Теперь давайте загрузим его в нашу систему.

ys.download()

Приведенный выше код загрузит предпочитаемый нами поток и сохранит его в текущем рабочем каталоге.

Мы также можем указать место в нашей системе, куда мы хотим загрузить видео с YouTube. Мы можем сделать это, указав абсолютный путь между фигурными скобками загрузки.

Приведенный ниже код поможет вам загрузить его в нужное вам место.

ys.download('location')

Это все! Поздравляем, вы только что создали свой первый простой загрузчик YouTube с помощью Python. Используйте его только для тестирования и образовательных целей. Не злоупотребляйте этим знанием.

Вот полный код для загрузки видео с YouTube с использованием прогрессивных потоков самого высокого качества:

from pytube import YouTube

#ask for the link from user
link = input("Enter the link of YouTube video you want to download:  ")
yt = YouTube(link)

#Showing details
print("Title: ",yt.title)
print("Number of views: ",yt.views)
print("Length of video: ",yt.length)
print("Rating of video: ",yt.rating)
#Getting the highest resolution possible
ys = yt.streams.get_highest_resolution()

#Starting download
print("Downloading...")
ys.download()
print("Download completed!!")

Посетите мой репозиторий Github для получения более подробной информации и обновлений. Я призываю всех вас попробовать что-то новое из этого кода, а затем, пожалуйста, поделитесь своими мыслями и опытом в комментариях. Я хотел бы услышать, что вы узнали и что еще вы создали. Всего наилучшего всем!

Видите, то, что мы построили здесь, — это очень простая версия. Мы также можем попытаться преобразовать ту же концепцию в приложение или веб-сайт, который будет выполнять те же функции в удобной для пользователя форме. Вы также можете добавить поддержку различных веб-сайтов, используя соответствующие API. Существует много таких многофункциональных загрузчиков видео, которые используют аналогичные концепции и дают пользователю возможность легко загружать видео.

Одним из моих любимых является YTSaver , многофункциональное приложение для загрузки видео или плейлистов с множества веб-сайтов в разных разрешениях и форматах одним щелчком мыши. Он также позволяет конвертировать видео из одного формата в другой и работает намного быстрее, чем некоторые другие загрузчики.

Примечание. Вышеприведенный абзац содержит партнерскую ссылку.

На самом деле, вы также можете использовать библиотеки Python , подобные этой, для преобразования видео из одного формата в другой. Вы также можете попробовать сделать это, если вам интересно. Большое спасибо за чтение!