vid-url-dl-mod / app.py
Omnibus's picture
Update app.py
7022cc6
raw
history blame
2.81 kB
import gradio as gr
import yt_dlp
import os
import json
import rembg
import cv2
load_js = """
function(text_input, url_params) {
console.log(text_input, url_params);
const params = new URLSearchParams(window.location.search);
url_params = Object.fromEntries(params);
return [text_input, url_params]
}
"""
def rem_cv(inp):
cv2cap = cv2.VideoCapture(f'{inp}')
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
fgbg = cv2.bgsegm.createBackgroundSubtractorGMG()
while True():
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
yield (fgmask)
def rem_bg(inp):
out = rem_bg()
def rem_bg_og(inp):
#transparent background .mov
#os.system(f'backgroundremover -i "{inp}" -tv -o "{inp}.mov"')
#video video to be overlayed output
#os.system(f' backgroundremover -i "/path/to/video.mp4" -tov "/path/to/videtobeoverlayed.mp4" -o "output.mov"')
#video over image file
#os.system(f'backgroundremover -i "/path/to/video.mp4" -toi "/path/to/videtobeoverlayed.mp4" -o "output.mov"')
#output to transparent GIF
#os.system(f'backgroundremover -i "/path/to/video.mp4" -tg -o "output.gif"')
#output to matte background
os.system(f'backgroundremover -i "{inp}" -mk -o "{inp}.matte.mp4"')
return f'{inp}.matte.mp4'
def predict(text, url_params):
mod_url=""
mod=gr.HTML("")
out = None
valid=gr.update(visible=False)
mod_url = url_params.get('url')
print (mod_url)
return ["" + text + "", mod_url]
def dl(inp):
out = None
out_file=[]
try:
inp_out=inp.replace("https://","")
inp_out=inp_out.replace("/","_").replace(".","_")
os.system(f'yt-dlp "{inp}" --trim-filenames 100 -o "{inp_out}.mp4"')
out = f"{inp_out}.mp4"
except Exception as e:
print (e)
out = None
return out,out,out
with gr.Blocks() as app:
with gr.Tab("Load"):
inp_url = gr.Textbox()
go_btn = gr.Button("Run")
with gr.Row():
with gr.Column():
outp_vid=gr.Video()
with gr.Column():
outp_file=gr.Textbox()
with gr.Tab("Rem BG"):
with gr.Row():
with gr.Column():
rem_btn=gr.Button()
in_vid=gr.Video()
with gr.Column():
rem_vid=gr.Video()
with gr.Row(visible=False):
text_input=gr.Textbox()
text_output=gr.Textbox()
url_params=gr.JSON()
rem_btn.click(rem_cv,in_vid,rem_vid)
go_btn.click(dl,inp_url,[outp_vid,in_vid,outp_file])
app.load(fn=predict, inputs=[text_input,url_params], outputs=[text_output,text_input],_js=load_js)
app.launch()