Campfireman's picture
Update app.py
13ba853
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()