yt-downloader / app.py
futureprogrammer's picture
App Files Uploaded
63a0739
raw
history blame contribute delete
No virus
3.57 kB
import streamlit as st
from pytube import Playlist, YouTube
import time
import os
import re
def sanitize_filename(filename):
# Remove invalid characters and replace spaces with underscores
return re.sub(r'[\\/*?:"<>|]', "", filename.replace(" ", "_"))
def download_video(URL, save_folder):
try:
video = YouTube(URL)
video_title = sanitize_filename(video.title)
video_filename = f"{video_title}.mp4"
file_path = os.path.join(save_folder, video_filename)
st.write(f"Checking if file {file_path} exists...")
if os.path.exists(file_path):
st.write("File exists. Skipping download.")
return
else:
st.write("File does not exist. Proceeding with download.")
st.write(f"\nDownloading your File: {video_title}")
if not os.path.exists(save_folder):
os.makedirs(save_folder)
st.write("Downloading video...")
video.streams.get_highest_resolution().download(output_path=save_folder, filename=video_title)
st.write('Hurray! Successfully Downloaded')
except Exception as e:
st.write("Error occurred while downloading the video:", str(e))
return True
def download_playlist(playlist_url, save_folder):
try:
playlist = Playlist(playlist_url)
st.write(f'Downloading your Playlist: {playlist.title}')
start_time = time.time()
total_videos = len(playlist.video_urls)
downloaded_videos = 0
for video_url in playlist.video_urls:
video = YouTube(video_url)
video_title = sanitize_filename(video.title)
video_filename = f"{video_title}.mp4"
file_path = os.path.join(save_folder, video_filename)
st.write(f"Checking if file {file_path} exists...")
if os.path.exists(file_path):
st.write(f"Video '{video_title}' already exists, skipping...")
downloaded_videos += 1
continue
else:
st.write("File does not exist. Proceeding with download.")
st.write(f"Downloading video: {video_title}")
video.streams.get_highest_resolution().download(output_path=save_folder, filename=video_title)
downloaded_videos += 1
st.write(f"Downloaded video {downloaded_videos}/{total_videos}")
end_time = time.time()
st.write(f'Hurray! Successfully Downloaded Playlist: {playlist.title}')
st.write(f'Total Time Taken: {end_time - start_time:.2f} seconds')
except Exception as e:
st.write("Error occurred while processing the playlist:", str(e))
return True
def main():
st.title("YouTube Downloader")
download_type = st.selectbox("What do you want to download?", ["Single Video", "Playlist"])
if download_type == "Single Video":
URL = st.text_input("Enter the YouTube video URL")
save_folder = st.text_input("Enter the folder path where you want to save the video")
if st.button("Download Video"):
if download_video(URL, save_folder):
st.write("Do you want to download another video?")
else:
playlist_url = st.text_input("Enter the YouTube playlist URL")
save_folder = st.text_input("Enter the folder path where you want to save the videos")
if st.button("Download Playlist"):
if download_playlist(playlist_url, save_folder):
st.write("Do you want to download another playlist?")
if __name__ == "__main__":
main()