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() |