В интернете много сервисов по скачиванию видео с ютуба. Сегодня мы сделаем свой — простой, понятный и полностью настраиваемый. Для этого мы расчехлим Python — он хорошо справляется с подобными задачами. Если вы совсем новичок в Python — почитайте сначала нашу вводную статью:
Как установить Python на компьютер и начать на нём писать
Подключаем библиотеки
Для загрузки видео нам понадобится библиотека pytube
— в ней уже есть всё, что нам нужно. Ещё мы будем использовать библиотеку tkinter
для отрисовки интерфейса — мы уже работали с ней, когда писали свою игру на Python.
Для установки библиотек пишем в командной строке:
pip install tkinter
pip install pytube
Теперь подключаем библиотеки в коде:
from tkinter import *
import pytube
from tkinter import messagebox
Рисуем интерфейс
Задача интерфейса — сделать так, чтобы мы смогли вставить ссылку на видео и нажать кнопку «Скачать». Для этого мы нарисуем:
- поле ввода адреса, откуда надо скачать видео;
- кнопку «Скачать» рядом с полем;
- кнопки очистки и выхода.
Это самый простой и минимальный интерфейс, но он уже позволит решить нашу задачу.
Разместим элементы на форме с помощью кода. Если вам непонятно, что тут происходит, посмотрите статью про программу для ведения бюджета — мы там разобрали, как работает графический интерфейс.
# заголовок формы
lb=Label(root,text="---Загрузка видео с YouTube---",font=('Arial,15,bold'),bg='#D3D3D3')
lb.pack(pady=15)
# пояснительный текст для поля с адресом
lb1=Label(root,text="Ссылка на видео :",font=('Arial,15,bold'),bg='#D3D3D3')
lb1.place(x=10,y=80)
# поле ввода адреса видео
link1=StringVar()
En1=Entry(root,textvariable=link1,font=('Arial,15,bold'))
En1.place(x=230,y=80)
# кнопка скачивания
btn1=Button(root,text="Скачать",font=('Arial,10,bold'),bd=4,command=download)
btn1.place(x=330,y=130)
# кнопки очистки и выхода
btn2=Button(root,text="Очистить",font=('Arial,10,bold'),bd=4,command=reset)
btn2.place(x=160,y=190)
btn3=Button(root,text=" Выход ",font=('Arial,10,bold'),bd=4,command=Exit)
btn3.place(x=250,y=190)
# запускаем окно
root.mainloop()
Настраиваем кнопки
Начнём с простых — очистки и выхода:
# при нажатии на кнопку очистки очищаем строку с адресом видео
def reset():
link1.set("")
# при нажатии на кнопку выхода — закрываем окно с интерфейсом
def Exit():
root.destroy()
Теперь сделаем самое главное — настроим всё так, чтобы скрипт скачивал видео с ютуба в наилучшем качестве, которое там доступно. Логика такая:
- Берём адрес и с его помощью подключаемся к ютубу.
- Выясняем, какое у видео максимальное разрешение.
- Скачиваем это видео и сообщаем об этом пользователю.
- Если не получилось скачать видео по ссылке или получить данные о его качестве — выводим сообщение об ошибке.
Как обычно, мы прокомментировали каждую строку, чтобы было проще разобраться в том, что происходит в коде:
# механика кнопки Скачать
def download():
# пробуем скачать видео по ссылке
try:
# формируем адрес
ytlink=link1.get()
# переводим его в нужный формат
youtubelink=pytube.YouTube(ytlink)
# получаем ссылку на видео с самым высоким качеством
video=youtubelink.streams.get_highest_resolution()
# скачиваем видео
video.download()
# выводим результат
Result="Загрузка завершена"
messagebox.showinfo("Готово",Result)
# если скачать не получилось
except:
# выводим сообщение об ошибке
Result="Ссылка не работает"
messagebox.showerror("Ошибка",Result)
Что дальше
Можно развивать этот проект дальше и подтянуть его до уровня обычных облачных сервисов. Например, можно добавить такое:
- выбор разрешения видео;
- скачивание плейлистов;
- скачивание нескольких видео друг за другом;
- скачивание только аудиодорожки.
Сделаем это в другой раз, а пока попробуйте сами добавить эти функции, используя библиотеку pytube.
# подключаем библиотеки
from tkinter import *
import pytube
from tkinter import messagebox
# рисуем главное окно
root=Tk()
root.geometry("500x250")
root.resizable(False,False)
# заголовок окна
root.title("Код")
# цвет фона
root.config(bg='#D3D3D3')
# механика кнопки Скачать
def download():
# пробуем скачать видео по ссылке
try:
# формируем адрес
ytlink=link1.get()
# переводим его в нужный формат
youtubelink=pytube.YouTube(ytlink)
# получаем ссылку на видео с самым высоким качеством
video=youtubelink.streams.get_highest_resolution()
# скачиваем видео
video.download()
# выводим результат
Result="Загрузка завершена"
messagebox.showinfo("Готово",Result)
# если скачать не получилось
except:
# выводим сообщение об ошибке
Result="Ссылка не работает"
messagebox.showerror("Ошибка",Result)
# при нажатии на кнопку очистки очищаем строку с адресом видео
def reset():
link1.set("")
# при нажатии на кнопку выхода — закрываем окно с интерфейсом
def Exit():
root.destroy()
# заголовок формы
lb=Label(root,text="---Загрузка видео с YouTube---",font=('Arial,15,bold'),bg='#D3D3D3')
lb.pack(pady=15)
# пояснительный текст для поля с адресом
lb1=Label(root,text="Ссылка на видео :",font=('Arial,15,bold'),bg='#D3D3D3')
lb1.place(x=10,y=80)
# поле ввода адреса видео
link1=StringVar()
En1=Entry(root,textvariable=link1,font=('Arial,15,bold'))
En1.place(x=230,y=80)
# кнопка скачивания
btn1=Button(root,text="Скачать",font=('Arial,10,bold'),bd=4,command=download)
btn1.place(x=330,y=130)
# кнопки очистки и выхода
btn2=Button(root,text="Очистить",font=('Arial,10,bold'),bd=4,command=reset)
btn2.place(x=160,y=190)
btn3=Button(root,text=" Выход ",font=('Arial,10,bold'),bd=4,command=Exit)
btn3.place(x=250,y=190)
# запускаем окно
root.mainloop()