File size: 2,666 Bytes
6be5e98 c5a4118 6be5e98 c5a4118 3836ea9 b856aeb 8253e1e 33d1f47 6be5e98 6392793 6be5e98 6392793 6be5e98 6392793 6be5e98 33d1f47 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
import streamlit as st
from pytube import YouTube
import streamlit.components.v1 as components
components.html("<html><body><style>.m{
background-image: linear-gradient(115deg,#FFAF00,#FFC500,#FFD600,#FCED00,#F9F380,#F6F7CD);
animation: rotate 7s linear infinite;
}@keyframes rotate {
100%{
filter: hue-rotate(-360deg)
}
}</style><div class="m"></div></body></html>")
# Load Animation
animation_symbol = "β"
st.markdown(
f"""
<div class="snowflake">{animation_symbol}</div>
<div class="snowflake">{animation_symbol}</div>
<div class="snowflake">{animation_symbol}</div>
<div class="snowflake">{animation_symbol}</div>
<div class="snowflake">{animation_symbol}</div>
<div class="snowflake">{animation_symbol}</div>
<div class="snowflake">{animation_symbol}</div>
<div class="snowflake">{animation_symbol}</div>
<div class="snowflake">{animation_symbol}</div>
""",
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()
|