Nymbo's picture
Update app.py
fadefaf verified
raw
history blame
10.1 kB
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()