Spaces:
Sleeping
Sleeping
import gradio as gr | |
import yt_dlp | |
import os | |
def download_video(url, request): | |
"""downlad video and audio from youtube url | |
Args: | |
url (str): youtube video url | |
output_path (str): path to save the downloaded files | |
Returns: | |
video_filename (str): path to the downloaded video file | |
audio_filename (str): path to the downloaded audio file | |
""" | |
# instanciate output path | |
output_path='./cache' | |
if not os.path.exists(output_path): | |
os.mkdir(output_path) | |
# get cookies | |
export_cookies_path = "./cache/exported_cookies.txt" | |
os.makedirs(os.path.dirname(export_cookies_path), exist_ok=True) | |
try: | |
ydl_opts_export_cookies = { | |
'cookiesfrombrowser': ('firefox',None,None,None), | |
'cookiefile': export_cookies_path, | |
'quiet': True, | |
} | |
print(f"Attempting to export cookies from Firefox to {export_cookies_path}...") | |
with yt_dlp.YoutubeDL(ydl_opts_export_cookies) as ydl: | |
# A dummy URL is often sufficient for cookie export | |
ydl.extract_info("https://www.youtube.com", download=False) | |
print("Cookies exported successfully (if Firefox was installed and logged in).") | |
except yt_dlp.utils.DownloadError as e: | |
print(f"Could not export cookies from browser: {e}") | |
print("Please ensure a supported browser is installed and logged in, or manually create a 'cookies.txt' file.") | |
# get video | |
ydl_opts_video = { | |
'format': 'worst[ext=mp4]', | |
'outtmpl': output_path+'/video/'+'%(title)s_video.%(ext)s', | |
'quiet': True | |
} | |
print('Downloading video...') | |
with yt_dlp.YoutubeDL(ydl_opts_video) as ydl: | |
info_dict = ydl.extract_info(url, download=True) | |
video_filename = ydl.prepare_filename(info_dict) | |
# get audio | |
audio_opts = { | |
'format': 'bestaudio[ext=m4a]', | |
'outtmpl': output_path+'/audio/'+'%(title)s.audio.%(ext)s', | |
'quiet': False, | |
'noplaylist': True, | |
} | |
print('Downloading audio...') | |
with yt_dlp.YoutubeDL(audio_opts) as ydl: | |
info_dict = ydl.extract_info(url, download=True) | |
audio_filename = ydl.prepare_filename(info_dict) | |
return { | |
"video_path": video_filename, | |
"audio_path": audio_filename, | |
"request": request | |
} | |
# Create the Gradio interface | |
demo = gr.Interface( | |
fn=download_video, # will use function arguments to define inputs names | |
inputs=[gr.Textbox(placeholder="Enter video url"),gr.Textbox(placeholder="Enter request")], | |
outputs=gr.JSON(), | |
title="Video information request", | |
description="Retreive user's request information from a video" | |
) | |
# Launch the interface and MCP server | |
if __name__ == "__main__": | |
demo.launch() |