Hev832's picture
Update run.py
62bd18f verified
raw
history blame
2.03 kB
import gradio as gr
import yt_dlp
import os
def download_youtube(url, file_format):
ydl_opts = {}
try:
if file_format == "audio":
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'outtmpl': 'downloads/%(title)s.%(ext)s',
}
else:
ydl_opts = {
'format': 'bestvideo+bestaudio/best',
'outtmpl': 'downloads/%(title)s.%(ext)s',
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info_dict = ydl.extract_info(url, download=True)
file_path = ydl.prepare_filename(info_dict)
if file_format == "audio":
file_path = os.path.splitext(file_path)[0] + ".mp3"
return file_path
except Exception as e:
return str(e)
def show_output(file_path):
if not file_path or not os.path.exists(file_path):
return "Error downloading file.", None, None
if file_path.endswith(".mp3"):
return None, gr.Audio(file_path, label="Audio Output"), None
else:
return None, None, gr.Video(file_path, label="Video Output")
with gr.Blocks() as demo:
with gr.Row():
with gr.Column():
url_input = gr.Textbox(label="YouTube URL")
format_input = gr.Dropdown(choices=["audio", "video"], label="Format")
download_button = gr.Button("Download")
with gr.Column():
error_output = gr.Textbox(label="Error Output", visible=False)
audio_output = gr.Audio(label="Audio Output", visible=False)
video_output = gr.Video(label="Video Output", visible=False)
download_button.click(download_youtube, inputs=[url_input, format_input], outputs=None).then(
show_output, inputs=None, outputs=[error_output, audio_output, video_output]
)
demo.launch()