Spaces:
Runtime error
Runtime error
File size: 10,090 Bytes
9a5da81 fadefaf ea4a110 fadefaf 6f71a51 fadefaf ea4a110 fadefaf ea4a110 fadefaf 6f71a51 fadefaf |
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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
import gradio as gr
import yt_dlp
import os
def run_yt_dlp_command(command):
try:
yt_dlp.main(command.split())
return "Download completed successfully!"
except Exception as e:
return f"An error occurred: {str(e)}"
def list_formats(url):
return run_yt_dlp_command(f"yt-dlp -F {url}")
def download_mp3_max_quality(url):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --postprocessor-args \"-b:a 320k\" -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def basic_high_quality_mp3(url):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def download_custom_bitrate(url, bitrate):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --postprocessor-args \"-b:a {bitrate}k\" -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def download_with_metadata(url):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --embed-metadata -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def download_playlist(url):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(playlist_title)s/%(title)s.%(ext)s\" {url}")
def download_playlist_range(url, range):
return run_yt_dlp_command(f"yt-dlp --playlist-items {range} -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(playlist_title)s/%(title)s.%(ext)s\" {url}")
def download_hq_soundcloud(url):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/SoundCloud/%(uploader)s - %(title)s.%(ext)s\" {url}")
def embed_album_art(url):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --embed-thumbnail --audio-quality 0 -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def download_opus(url):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format opus -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def skip_downloaded_files(url):
return run_yt_dlp_command(f"yt-dlp --download-archive \"P:/Local Music/downloaded.txt\" -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def download_multiple_files(urls):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --add-metadata --embed-thumbnail --write-description --postprocessor-args \"-b:a 320k\" -o \"P:/Local Music/%(title)s.%(ext)s\" {' '.join(urls.split(','))}")
def download_with_chapters(url):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --split-chapters -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def extract_portion(url, start, end):
return run_yt_dlp_command(f"yt-dlp -f bestvideo+bestaudio --external-downloader ffmpeg --external-downloader-args \"ffmpeg_i:-ss {start} -to {end}\" -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def update_metadata(url):
return run_yt_dlp_command(f"yt-dlp --download-archive \"P:/Local Music/downloaded.txt\" --skip-download --embed-metadata --embed-thumbnail --write-description {url}")
def auto_rename_duplicates(url):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --force-overwrites -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def download_from_url_list(file_path):
return run_yt_dlp_command(f"yt-dlp -a \"{file_path}\" -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(title)s.%(ext)s\"")
def limit_download_speed(url, speed):
return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --rate-limit {speed} -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
def download_youtube_transcript(url, format):
if format == "text":
return run_yt_dlp_command(f"yt-dlp --write-auto-subs --sub-lang en --skip-download -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
elif format == "markdown":
return run_yt_dlp_command(f"yt-dlp --write-auto-subs --sub-lang en --skip-download --convert-subs srt -o \"P:/Local Music/%(title)s.md\" {url}")
def download_video_info(url):
return run_yt_dlp_command(f"yt-dlp --write-info-json --skip-download -o \"P:/Local Music/%(title)s.json\" {url}")
def download_age_restricted_content(url, username, password):
return run_yt_dlp_command(f"yt-dlp --username \"{username}\" --password \"{password}\" -f bestvideo+bestaudio -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
# Define the Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# YT-DLP Download Interface")
with gr.Tab("General Commands"):
with gr.Row():
url_general = gr.Textbox(label="Video URL")
btn_list_formats = gr.Button("List Formats")
btn_list_formats.click(list_formats, inputs=url_general, outputs="text_box_output")
with gr.Row():
btn_mp3_max_quality = gr.Button("Download MP3 Max Quality")
btn_mp3_max_quality.click(download_mp3_max_quality, inputs=url_general, outputs="text_box_output")
with gr.Row():
btn_basic_mp3 = gr.Button("Basic High-Quality MP3")
btn_basic_mp3.click(basic_high_quality_mp3, inputs=url_general, outputs="text_box_output")
with gr.Row():
bitrate = gr.Textbox(label="Custom Bitrate (e.g., 192)")
btn_custom_bitrate = gr.Button("Download Custom Bitrate")
btn_custom_bitrate.click(download_custom_bitrate, inputs=[url_general, bitrate], outputs="text_box_output")
with gr.Row():
btn_metadata = gr.Button("Download with Metadata")
btn_metadata.click(download_with_metadata, inputs=url_general, outputs="text_box_output")
with gr.Row():
btn_playlist = gr.Button("Download Playlist")
btn_playlist.click(download_playlist, inputs=url_general, outputs="text_box_output")
with gr.Row():
playlist_range = gr.Textbox(label="Playlist Range (e.g., 1-5)")
btn_playlist_range = gr.Button("Download Playlist Range")
btn_playlist_range.click(download_playlist_range, inputs=[url_general, playlist_range], outputs="text_box_output")
with gr.Row():
btn_hq_soundcloud = gr.Button("Download HQ from SoundCloud")
btn_hq_soundcloud.click(download_hq_soundcloud, inputs=url_general, outputs="text_box_output")
with gr.Row():
btn_album_art = gr.Button("Embed Album Art")
btn_album_art.click(embed_album_art, inputs=url_general, outputs="text_box_output")
with gr.Row():
btn_opus = gr.Button("Download Opus")
btn_opus.click(download_opus, inputs=url_general, outputs="text_box_output")
with gr.Row():
btn_skip_downloaded = gr.Button("Skip Downloaded Files")
btn_skip_downloaded.click(skip_downloaded_files, inputs=url_general, outputs="text_box_output")
with gr.Row():
urls = gr.Textbox(label="Multiple URLs (comma-separated)")
btn_multiple_files = gr.Button("Download Multiple Files")
btn_multiple_files.click(download_multiple_files, inputs=urls, outputs="text_box_output")
with gr.Row():
btn_chapters = gr.Button("Download with Chapters")
btn_chapters.click(download_with_chapters, inputs=url_general, outputs="text_box_output")
with gr.Row():
start_time = gr.Textbox(label="Start Time (e.g., 00:01:00)")
end_time = gr.Textbox(label="End Time (e.g., 00:05:00)")
btn_extract_portion = gr.Button("Extract Portion")
btn_extract_portion.click(extract_portion, inputs=[url_general, start_time, end_time], outputs="text_box_output")
with gr.Row():
btn_update_metadata = gr.Button("Update Metadata")
btn_update_metadata.click(update_metadata, inputs=url_general, outputs="text_box_output")
with gr.Row():
btn_auto_rename = gr.Button("Auto-Rename Duplicates")
btn_auto_rename.click(auto_rename_duplicates, inputs=url_general, outputs="text_box_output")
with gr.Row():
url_list = gr.Textbox(label="URL List File Path")
btn_url_list = gr.Button("Download from URL List")
btn_url_list.click(download_from_url_list, inputs=url_list, outputs="text_box_output")
with gr.Row():
speed_limit = gr.Textbox(label="Download Speed (e.g., 1M)")
btn_limit_speed = gr.Button("Limit Download Speed")
btn_limit_speed.click(limit_download_speed, inputs=[url_general, speed_limit], outputs="text_box_output")
with gr.Row():
transcript_format = gr.Dropdown(["text", "markdown"], label="Transcript Format")
btn_transcript = gr.Button("Download Transcript")
btn_transcript.click(download_youtube_transcript, inputs=[url_general, transcript_format], outputs="text_box_output")
with gr.Row():
btn_video_info = gr.Button("Download Video Info")
btn_video_info.click(download_video_info, inputs=url_general, outputs="text_box_output")
with gr.Row():
youtube_username = gr.Textbox(label="YouTube Username")
youtube_password = gr.Textbox(label="YouTube Password", type="password")
btn_age_restricted = gr.Button("Download Age-Restricted Content")
btn_age_restricted.click(download_age_restricted_content, inputs=[url_general, youtube_username, youtube_password], outputs="text_box_output")
text_box_output = gr.Textbox(label="Output")
# Launch the Gradio app
demo.launch() |