jbilcke-hf commited on
Commit
0620b63
·
1 Parent(s): c485ab3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -58
app.py CHANGED
@@ -26,24 +26,20 @@ mediapy.set_ffmpeg(ffmpeg_path)
26
 
27
  SECRET_TOKEN = os.getenv('SECRET_TOKEN', 'default_secret')
28
 
29
-
30
  def base64_to_video(base64_string, output_file):
31
  video_data = base64.b64decode(base64_string)
32
  with open(output_file, 'wb') as f:
33
  f.write(video_data)
34
-
35
- def do_interpolation(frame1, frame2, times_to_interpolate):
36
- print(frame1, frame2)
37
  input_frames = [frame1, frame2]
38
- #times_to_interpolate = 2
39
  frames = list(
40
  util.interpolate_recursively_from_files(
41
  input_frames, times_to_interpolate, interpolator))
42
-
43
- #print(frames)
44
- mediapy.write_video(f"{frame1}_to_{frame2}_out.mp4", frames, fps=12)
45
- return f"{frame1}_to_{frame2}_out.mp4"
46
-
47
  def get_frames(video_in, step, name):
48
  frames = []
49
  #resize the video
@@ -103,53 +99,37 @@ def infer(secret_token, video_in_base64, interpolation, fps_output):
103
  if secret_token != SECRET_TOKEN:
104
  raise gr.Error(f'Invalid secret token. Please fork the original space if you want to use it for yourself.')
105
 
106
-
107
- # Decode the base64 string to a video file
108
- video_in = "video_in.mp4" # or choose any other filename/path
109
- base64_to_video(video_in_base64, video_in)
110
-
111
- # 1. break video into frames and get FPS
112
- break_vid = get_frames(video_in, "vid_input_frame", "origin")
113
- frames_list= break_vid[0]
114
- fps = break_vid[1]
115
- print(f"ORIGIN FPS: {fps}")
116
- n_frame = int(4*fps) #limited to 4 seconds
117
- #n_frame = len(frames_list)
118
-
119
- if n_frame >= len(frames_list):
120
- print("video is shorter than the cut value")
121
- n_frame = len(frames_list)
122
-
123
- # 2. prepare frames result arrays
124
- result_frames = []
125
- # print("set stop frames to: " + str(n_frame))
126
-
127
-
128
- for idx, frame in enumerate(frames_list[0:int(n_frame)]):
129
- if idx < len(frames_list) - 1:
130
- next_frame = frames_list[idx+1]
131
- interpolated_frames = do_interpolation(frame, next_frame, interpolation) # should return a list of 3 interpolated frames
132
- break_interpolated_video = get_frames(interpolated_frames, "interpol",f"{idx}_")
133
- print(break_interpolated_video[0])
134
- for j, img in enumerate(break_interpolated_video[0][0:len(break_interpolated_video[0])-1]):
135
- print(f"IMG:{img}")
136
- # we use png to avoid any compression artifact
137
- os.rename(img, f"{frame}_to_{next_frame}_{j}.png")
138
- result_frames.append(f"{frame}_to_{next_frame}_{j}.png")
139
-
140
- print("frames " + str(idx) + " & " + str(idx+1) + "/" + str(n_frame) + ": done;")
141
- #print(f"CURRENT FRAMES: {result_frames}")
142
- result_frames.append(f"{frames_list[n_frame-1]}")
143
- final_vid = create_video(result_frames, fps_output, "interpolated")
144
 
145
- encoded_string = ""
146
-
147
- # Convert video to base64
148
- with open(final_vid, "rb") as video_file:
149
- encoded_string = base64.b64encode(video_file.read()).decode('utf-8')
150
-
151
- return f"data:video/mp4;base64,{encoded_string}"
152
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
153
 
154
  title="""test space"""
155
 
@@ -163,8 +143,8 @@ with gr.Blocks() as demo:
163
  secret_token = gr.Textbox(label="Secret token")
164
  video_input = gr.Textbox(label="Video Base64")
165
 
166
- interpolation = gr.Slider(minimum=1, maximum=6, step=1, value=4, label="Interpolation Steps")
167
- fps_output = gr.Slider(minimum=1, maximum=64, step=1, value=24, label="FPS output")
168
  submit_btn = gr.Button("Submit")
169
 
170
  video_output = gr.Textbox()
 
26
 
27
  SECRET_TOKEN = os.getenv('SECRET_TOKEN', 'default_secret')
28
 
 
29
  def base64_to_video(base64_string, output_file):
30
  video_data = base64.b64decode(base64_string)
31
  with open(output_file, 'wb') as f:
32
  f.write(video_data)
33
+
34
+ def do_interpolation(frame1, frame2, times_to_interpolate, interpolator):
 
35
  input_frames = [frame1, frame2]
 
36
  frames = list(
37
  util.interpolate_recursively_from_files(
38
  input_frames, times_to_interpolate, interpolator))
39
+ with tempfile.NamedTemporaryFile(delete=True, suffix=".mp4") as temp_file:
40
+ mediapy.write_video(temp_file.name, frames, fps=12)
41
+ return temp_file.name
42
+
 
43
  def get_frames(video_in, step, name):
44
  frames = []
45
  #resize the video
 
99
  if secret_token != SECRET_TOKEN:
100
  raise gr.Error(f'Invalid secret token. Please fork the original space if you want to use it for yourself.')
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
 
103
+ with tempfile.NamedTemporaryFile(delete=True, suffix=".mp4") as temp_video_in:
104
+ # Decode the base64 string to a video file
105
+ base64_to_video(video_in_base64, temp_video_in.name)
106
+
107
+ # 1. break video into frames and get FPS
108
+ break_vid = get_frames(temp_video_in.name, "vid_input_frame", "origin")
109
+ frames_list = break_vid[0]
110
+ fps = break_vid[1]
111
+
112
+ # print(f"ORIGIN FPS: {fps}")
113
+ n_frame = int(4 * fps) #limited to 4 seconds
114
+ # #n_frame = len(frames_list)
115
+ if n_frame >= len(frames_list):
116
+ n_frame = len(frames_list)
117
+
118
+ result_frames = []
119
+ for idx, frame in enumerate(frames_list[0:n_frame]):
120
+ if idx < len(frames_list) - 1:
121
+ next_frame = frames_list[idx + 1]
122
+ interpolated_frames = do_interpolation(frame, next_frame, interpolation, interpolator)
123
+ break_interpolated_video = get_frames(interpolated_frames, "interpol", f"{idx}_")
124
+ for j, img in enumerate(break_interpolated_video[0][:-1]):
125
+ os.rename(img, f"{frame}_to_{next_frame}_{j}.png")
126
+ result_frames.append(f"{frame}_to_{next_frame}_{j}.png")
127
+
128
+ result_frames.append(frames_list[n_frame - 1])
129
+ with tempfile.NamedTemporaryFile(delete=True, suffix=".mp4") as final_video:
130
+ final_vid = create_video(result_frames, fps_output, final_video.name)
131
+ encoded_string = base64.b64encode(open(final_vid, "rb").read()).decode('utf-8')
132
+ return f"data:video/mp4;base64,{encoded_string}"
133
 
134
  title="""test space"""
135
 
 
143
  secret_token = gr.Textbox(label="Secret token")
144
  video_input = gr.Textbox(label="Video Base64")
145
 
146
+ interpolation = gr.Slider(minimum=1, maximum=8, step=1, value=4, label="Interpolation Steps")
147
+ fps_output = gr.Slider(minimum=1, maximum=120, step=1, value=24, label="FPS output")
148
  submit_btn = gr.Button("Submit")
149
 
150
  video_output = gr.Textbox()