Spaces:
Runtime error
Runtime error
| 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() | |