|
import gradio as gr |
|
import yt_dlp |
|
import os |
|
import browser_cookie3 |
|
from huggingface_hub import hf_hub_download, login |
|
|
|
|
|
|
|
if "cookies.txt" not in os.listdir("."): |
|
hf_hub_download("not-lain/secrets","cookies.txt",local_dir=".",repo_type="dataset") |
|
|
|
|
|
def get_cookies(): |
|
try: |
|
|
|
cookies = [] |
|
for get_cookies in [ |
|
browser_cookie3.firefox, |
|
browser_cookie3.chrome, |
|
browser_cookie3.brave, |
|
]: |
|
try: |
|
cookies.extend([c for c in get_cookies(domain_name=".youtube.com")]) |
|
except: |
|
continue |
|
return cookies |
|
except: |
|
return None |
|
|
|
|
|
def download_video(url): |
|
try: |
|
downloads_dir = "/downloads" |
|
if not os.path.exists(downloads_dir): |
|
os.makedirs(downloads_dir, exist_ok=True) |
|
|
|
|
|
cookie_file = "cookies.txt" |
|
cookie_args = {} |
|
if os.path.exists(cookie_file): |
|
cookie_args["cookiefile"] = cookie_file |
|
|
|
ydl_opts = { |
|
"outtmpl": os.path.join(downloads_dir, "%(title)s.%(ext)s"), |
|
"format": "mp4/bestvideo+bestaudio/best", |
|
"merge_output_format": "mp4", |
|
**cookie_args, |
|
"paths": {"home": "/downloads", "temp": "/tmp"}, |
|
} |
|
|
|
with yt_dlp.YoutubeDL(ydl_opts) as ydl: |
|
info = ydl.extract_info(url, download=True) |
|
video_path = ydl.prepare_filename(info) |
|
if os.path.exists(video_path): |
|
return f"Successfully downloaded: {info['title']}", video_path |
|
else: |
|
return f"Download completed but file not found: {info['title']}", None |
|
except Exception as e: |
|
return f"Error: {str(e)}", None |
|
|
|
|
|
iface = gr.Interface( |
|
fn=download_video, |
|
inputs=gr.Textbox(label="YouTube URL"), |
|
outputs=[gr.Textbox(label="Status"), gr.Video(label="Downloaded Video")], |
|
title="YouTube Video Downloader", |
|
description="Cookies created using the following extension : https://chromewebstore.google.com/detail/get-cookiestxt-clean/ahmnmhfbokciafffnknlekllgcnafnie?hl=en \n\nEnter a YouTube URL to download and view the video", |
|
examples=["https://www.youtube.com/watch?v=UiyDmqO59QE"], |
|
) |
|
|
|
if __name__ == "__main__": |
|
iface.launch(server_name="0.0.0.0", allowed_paths=["/"], server_port=7860) |