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()