awacke1's picture
Update app.py
a893d2d
raw
history blame
1.96 kB
import streamlit as st
from pytube import YouTube
class YouTubeDownloader:
@staticmethod
def run():
st.header("Video View and Download")
option = st.selectbox('How would you like to be contacted for the download list?',('Email', 'Mobile phone'))
st.write('You selected:', option)
option2 = st.selectbox('Would you try one of these one minute AI generated science fiction short videos?',('https://www.youtube.com/watch?v=e4X1WueksH0&list=UUdKiy5xeO2JuWuIlE5nUaNw&index=14', 'https://www.youtube.com/watch?v=e4X1WueksH0&list=UUdKiy5xeO2JuWuIlE5nUaNw&index=13'))
url = st.text_input("YouTube Video URL:")
if option2:
url=option2
if url:
YouTubeDownloader.validate_url(url)
with st.expander("View"):
st.video(url)
if st.button("Download"):
YouTubeDownloader.cleanup()
file_ = YouTubeDownloader.download_video(url)
st.video(file_)
YouTubeDownloader.helper_message()
@staticmethod
def download_video(url):
with st.spinner("Downloading..."):
local_file = (
YouTube(url)
.streams.filter(progressive=True, file_extension="mp4")
.first()
.download()
)
st.success("Downloaded")
return local_file
@staticmethod
def validate_url(url):
import validators
if not validators.url(url):
st.error("Video URL invalid")
st.stop()
@classmethod
def cleanup(cls):
import pathlib
import glob
junks = glob.glob("*.mp4")
for junk in junks:
pathlib.Path(junk).unlink()
@classmethod
def helper_message(cls):
st.write("To save click elipses ... and choose download")
if __name__ == "__main__":
YouTubeDownloader.run()