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