Spaces:
Paused
Paused
| import gradio as gr | |
| import yt_dlp | |
| import os | |
| import time | |
| import threading | |
| def download_video(url, resolution): | |
| # Define resolution options | |
| resolutions = { | |
| "2160p": "bestvideo[height<=2160]+bestaudio/best", | |
| "1440p": "bestvideo[height<=1440]+bestaudio/best", | |
| "1080p": "bestvideo[height<=1080]+bestaudio/best", | |
| "720p": "bestvideo[height<=720]+bestaudio/best", | |
| "480p": "bestvideo[height<=480]+bestaudio/best", | |
| } | |
| try: | |
| # Set yt-dlp options | |
| ydl_opts = { | |
| 'format': resolutions[resolution], | |
| 'outtmpl': '%(title)s.%(ext)s', | |
| 'noplaylist': True, | |
| 'merge_output_format': 'mp4', | |
| 'postprocessors': [{ | |
| 'key': 'FFmpegVideoConvertor', | |
| 'preferedformat': 'mp4', # Ensure output is in MP4 format | |
| }], | |
| } | |
| with yt_dlp.YoutubeDL(ydl_opts) as ydl: | |
| info_dict = ydl.extract_info(url, download=True) | |
| filename = ydl.prepare_filename(info_dict) | |
| # Check if the file already exists | |
| if os.path.exists(filename): | |
| os.remove(filename) # Remove the existing file | |
| ydl.download([url]) | |
| yield filename # Yield the filename to display the video | |
| time.sleep(10) # Wait for 20 seconds before deleting the file | |
| if os.path.exists(filename): | |
| os.remove(filename) # Remove the file after 20 seconds | |
| except Exception as e: | |
| yield None | |
| print("An error occurred:", e) | |
| def download_audio(url): | |
| try: | |
| # Set yt-dlp options for audio download | |
| ydl_opts = { | |
| 'format': 'bestaudio/best', | |
| 'outtmpl': '%(title)s.%(ext)s', | |
| 'noplaylist': True, | |
| 'postprocessors': [{ | |
| 'key': 'FFmpegExtractAudio', | |
| 'preferredcodec': 'mp3', | |
| }], | |
| } | |
| with yt_dlp.YoutubeDL(ydl_opts) as ydl: | |
| info_dict = ydl.extract_info(url, download=True) | |
| filename = ydl.prepare_filename(info_dict).replace('.webm', '.mp3').replace('.m4a', '.mp3') | |
| # Check if the file already exists | |
| if os.path.exists(filename): | |
| os.remove(filename) # Remove the existing file | |
| ydl.download([url]) | |
| yield filename # Yield the filename to display the audio | |
| time.sleep(20) # Wait for 20 seconds before deleting the file | |
| if os.path.exists(filename): | |
| os.remove(filename) # Remove the file after 20 seconds | |
| except Exception as e: | |
| yield None | |
| print("An error occurred:", e) | |
| # Create Gradio interface | |
| with gr.Blocks() as iface: | |
| with gr.Tab("MP4 Downloader"): | |
| gr.Markdown("### Download YouTube videos as MP4") | |
| url_input_mp4 = gr.Textbox(label="YouTube URL", placeholder="Enter YouTube URL here") | |
| resolution_input = gr.Dropdown(label="Resolution", choices=["2160p", "1440p", "1080p", "720p", "480p"], value="1080p") | |
| download_button_mp4 = gr.Button("Download MP4") | |
| output_mp4 = gr.Video(label="Downloaded Video") | |
| download_button_mp4.click(download_video, inputs=[url_input_mp4, resolution_input], outputs=output_mp4) | |
| with gr.Tab("MP3 Downloader"): | |
| gr.Markdown("### Download YouTube videos as MP3") | |
| url_input_mp3 = gr.Textbox(label="YouTube URL", placeholder="Enter YouTube URL here") | |
| download_button_mp3 = gr.Button("Download MP3") | |
| output_mp3 = gr.Audio(label="Downloaded Audio") | |
| download_button_mp3.click(download_audio, inputs=[url_input_mp3], outputs=output_mp3) | |
| iface.launch() | |