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