Spaces:
Running
on
Zero
Running
on
Zero
import os | |
import gradio as gr | |
from gradio_client import Client | |
import yt_dlp | |
import tempfile | |
import hashlib | |
import shutil | |
def youtube(url: str) -> str: | |
if not url: | |
raise gr.Error("Please input a YouTube URL") | |
hash = hashlib.md5(url.encode()).hexdigest() | |
tmp_file = os.path.join(tempfile.gettempdir(), f"{hash}") | |
try: | |
ydl_opts = { | |
"format": "bestaudio/best", | |
"outtmpl": tmp_file, | |
"postprocessors": [ | |
{ | |
"key": "FFmpegExtractAudio", | |
"preferredcodec": "mp3", | |
"preferredquality": "192", | |
} | |
], | |
} | |
with yt_dlp.YoutubeDL(ydl_opts) as ydl: | |
ydl.download([url]) | |
except Exception as e: | |
print(e) | |
try: | |
ytdl = Client("JacobLinCool/yt-dlp") | |
file = ytdl.predict(api_name="/download", url=url) | |
shutil.move(file, tmp_file + ".mp3") | |
except Exception as e: | |
print(e) | |
raise gr.Error(f"Failed to download YouTube audio from {url}") | |
return tmp_file + ".mp3" | |