Spaces:
Runtime error
Runtime error
| import sys | |
| import os | |
| import validators | |
| import datetime | |
| import subprocess | |
| from moviepy.editor import * | |
| import gradio as gr | |
| from huggingface_hub import snapshot_download | |
| import huggingface_hub as hh | |
| from pytube import YouTube | |
| global notify | |
| notify = "" | |
| global temp_addr | |
| temp_addr = "./yt_download" # + str(int(datetime.datetime.timestamp)) | |
| temp_audio_addr = "" | |
| def clean_up(): | |
| os.rmdir("./yt_download") | |
| os.mkdir("./yt_download") | |
| def convert_video_to_audio_ffmpeg(video_file, output_ext="mp3"): | |
| """Converts video to audio directly using `ffmpeg` command | |
| with the help of subprocess module""" | |
| filename, ext = os.path.splitext(video_file) | |
| subprocess.call(["ffmpeg", "-y", "-i", video_file, f"{filename}.{output_ext}"], | |
| stdout=subprocess.DEVNULL, | |
| stderr=subprocess.STDOUT) | |
| return (filename + "." + ext) | |
| def get_video(url): | |
| if(validators.url(url) == False): | |
| notify = "Invalid URL!" | |
| return False | |
| yt = YouTube(url) | |
| mp4_files = yt.streams.filter(file_extension="mp4") | |
| os.mkdir(temp_addr) | |
| print("Temp buffer folder created.") | |
| # Download | |
| mp4_360p_files = mp4_files.get_by_resolution("360p") | |
| mp4_720p_files = mp4_files.get_by_resolution("720p") | |
| mp4_1080p_files = mp4_files.get_by_resolution("1080p") | |
| if(mp4_360p_files): mp4_360p_files.download(temp_addr) | |
| if(mp4_720p_files): mp4_720p_files.download(temp_addr) | |
| if(mp4_1080p_files): mp4_1080p_files.download(temp_addr) | |
| notify = "Video(s) fetched successfuly." | |
| print(notify) | |
| return True | |
| def extract_audio(): | |
| for file in os.listdir(temp_addr): | |
| if file.endswith(".mp4"): | |
| f_addr = temp_addr + "/" + convert_video_to_audio_ffmpeg(file) | |
| print("Current audio address:" + f_addr) | |
| # snapshot_download(repo_id="Campfireman/YouTubeAudioGrabNTake", allow_patterns="*.mp3") | |
| notify = "Sucess. Download request will be pulled up soon. " | |
| print(notify) | |
| # For debugging use | |
| print(f_addr) | |
| def extrator_pipeline(url): | |
| #clean_up() | |
| get_video(url) | |
| temp_audio_addr = extract_audio() | |
| return notify | |
| demo = gr.Interface( | |
| fn=extrator_pipeline, | |
| inputs="text", | |
| outputs=gr.Audio(source = "upload"), | |
| examples=[ | |
| [os.path.join(os.path.dirname(__file__),temp_audio_addr)] | |
| ] | |
| ) | |
| demo.launch() | |