import streamlit as st from pytube import YouTube import streamlit.components.v1 as components components.html("
") # Load Animation animation_symbol = "❄" st.markdown( f"""
{animation_symbol}
{animation_symbol}
{animation_symbol}
{animation_symbol}
{animation_symbol}
{animation_symbol}
{animation_symbol}
{animation_symbol}
{animation_symbol}
""", unsafe_allow_html=True, ) class YouTubeDownloader: @staticmethod def run(): st.header("YouTube Video Downloader") url = st.text_input("Enter YouTube URL to download:") start_button = st.button("Start Download") if start_button: if url: YouTubeDownloader.validate_url(url) with st.expander("preview video"): st.video(url) YouTubeDownloader.cleanup() file_ = YouTubeDownloader.download_video(url) st.video(file_) YouTubeDownloader.helper_message() st.markdown("YouTube Video Download Help") @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("Hi there 👋 URL seems 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 the video to the local computer, " "click the vertical ... icon (aka hamburger button) in the bottom-right corner (in the video above) and click download." ) if __name__ == "__main__": YouTubeDownloader.run()