yt-audio-dl / sample.py
nnilayy's picture
Add yt-audio gradio app
a17935c
raw
history blame
2.42 kB
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:
# Try to get cookies from multiple browsers
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)
# Use a pre-provided cookies file
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)