File size: 2,441 Bytes
db12400
b127fd6
5e44253
 
 
 
bbf9a90
 
db12400
54d06ee
7a6bc70
 
54d06ee
 
 
5e44253
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54d06ee
 
 
5e44253
 
 
 
 
 
6a04784
5e44253
 
 
 
 
 
db12400
9e2421a
 
 
6a04784
e38439c
4b109d4
dafd4d1
7a6bc70
 
54d06ee
4b109d4
 
dafd4d1
6a04784
db12400
54d06ee
5cd1978
9e2421a
f90f58c
db12400
9e2421a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import gradio as gr
import os
import cv2
import numpy as np
from moviepy.editor import *

token = os.environ.get('HF_TOKEN')
pix2pix = gr.Blocks.load(name="spaces/fffiloni/instruct-pix2pix-clone", api_key=token)

def trim_video(video_in, trim_value):
    clip = VideoFileClip(video_in)
    clip1 = clip.subclip((0,00),(trim_value,00))
    clip1.write_videofile('edited.mp4',codec='libx264')
    return 'edited.mp4'

def get_frames(video_in):
    frames = []
    # Opens the Video file
    cap= cv2.VideoCapture(video_in)
    fps = cap.get(cv2.CAP_PROP_FPS)
    i=0
    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret == False:
            break
        cv2.imwrite('kang'+str(i)+'.jpg',frame)
        frames.append('kang'+str(i)+'.jpg')
        i+=1
    
    cap.release()
    cv2.destroyAllWindows()

    return frames, fps

def create_video(frames, fps):
    
    clip = ImageSequenceClip(frames, fps=fps)
    clip.write_videofile("movie.mp4", fps=fps)
    
    return 'movie.mp4'


def infer(prompt,video_in, seed_in, trim_value):
    trimmed_vid = trim_video(video_in, trim_value)
    break_vid = get_frames(trimmed_vid)
    
    frames_list= break_vid[0]
    fps = break_vid[1]
    result_frames = []
    
    for i in frames_list:
        pix2pix_img = pix2pix(prompt,5.5,1.5,i,15,"",512,512,seed_in,fn_index=0)
        images = [os.path.join(pix2pix_img[0], img) for img in os.listdir(pix2pix_img[0])]
        result_frames.append(images[0])

    final_vid = create_video(result_frames, fps)
    
    return final_vid


with gr.Blocks(css='style.css') as demo:
    with gr.Column(elem_id="col-container"):
        with gr.Row():
            with gr.Column():
                prompt = gr.Textbox(placeholder="enter prompt", show_label=False)
                video_inp = gr.Video(label="Video source", source="upload", type="filepath")
                
            with gr.Column():
                with gr.Row():
                    seed_inp = gr.Slider(minimum=0, maximum=10000, step=1, value=123456)
                    trim_in = gr.Slider(label="video max duration (seconds)", minimun=2, maximum=10, step=1, value=2)
                video_out = gr.Video(label="Pix2pix video result")
                submit_btn = gr.Button("Generate Pix2Pix video")

    inputs = [prompt,video_inp,seed_inp, trim_in]
    outputs = [video_out]
    
    submit_btn.click(infer, inputs, outputs)

demo.launch().queue(max_size=12)