soiz commited on
Commit
aa37741
·
verified ·
1 Parent(s): 8faf0da

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -13
app.py CHANGED
@@ -1,32 +1,46 @@
1
  import gradio as gr
2
- from moviepy.editor import VideoFileClip
 
3
 
4
- def edit_file(file, loop_count, speed_factor, frame_skip):
5
  file_name = file.name.split("/")[-1]
6
  base_name = file_name.rsplit(".", 1)[0]
7
 
8
- # 動画またはGIFの読み込み
9
- clip = VideoFileClip(file.name)
10
-
 
11
  # フレームスキップと速度調整
12
- if frame_skip > 1:
13
- clip = clip.subclip(0, clip.duration).set_fps(clip.fps / frame_skip)
14
- if speed_factor != 1:
15
- clip = clip.fx(VideoFileClip.speedx, factor=speed_factor)
 
 
 
 
 
16
 
17
- # GIFとして書き出し
18
  output_path = f"{base_name}_edited.gif"
19
- clip.write_gif(output_path, loop=loop_count)
20
-
 
 
 
 
21
  return output_path, output_path
22
 
23
  # Gradioインターフェース
24
  interface = gr.Interface(
25
  fn=edit_file,
26
  inputs=[
27
- gr.File(label="GIFまたは動画をアップロード"),
 
28
  gr.Number(label="ループ回数(0は無限ループ)", value=0),
 
29
  gr.Number(label="再生速度の倍率(例: 2は2倍速)", value=1),
 
30
  gr.Number(label="フレームスキップ数(1以上)", value=1, minimum=1),
31
  ],
32
  outputs=[
 
1
  import gradio as gr
2
+ import imageio
3
+ import os
4
 
5
+ def edit_file(file, apply_loop, loop_count, apply_speed, speed_factor, apply_skip, frame_skip):
6
  file_name = file.name.split("/")[-1]
7
  base_name = file_name.rsplit(".", 1)[0]
8
 
9
+ # GIFの読み込み
10
+ reader = imageio.get_reader(file.name)
11
+ fps = reader.get_meta_data().get("fps", 10) # デフォルトFPSは10
12
+
13
  # フレームスキップと速度調整
14
+ frames = []
15
+ for i, frame in enumerate(reader):
16
+ if apply_skip and i % frame_skip != 0: # フレームスキップを適用
17
+ continue
18
+ frames.append(frame)
19
+
20
+ # 再生速度調整
21
+ if apply_speed and speed_factor != 1:
22
+ fps = int(fps * speed_factor)
23
 
24
+ # GIFとして保存
25
  output_path = f"{base_name}_edited.gif"
26
+ writer = imageio.get_writer(output_path, fps=fps, loop=0 if not apply_loop else loop_count)
27
+
28
+ for frame in frames:
29
+ writer.append_data(frame)
30
+ writer.close()
31
+
32
  return output_path, output_path
33
 
34
  # Gradioインターフェース
35
  interface = gr.Interface(
36
  fn=edit_file,
37
  inputs=[
38
+ gr.File(label="GIFをアップロード"),
39
+ gr.Checkbox(label="ループ回数を変更する", value=True),
40
  gr.Number(label="ループ回数(0は無限ループ)", value=0),
41
+ gr.Checkbox(label="再生速度を変更する", value=False),
42
  gr.Number(label="再生速度の倍率(例: 2は2倍速)", value=1),
43
+ gr.Checkbox(label="フレームスキップを変更する", value=False),
44
  gr.Number(label="フレームスキップ数(1以上)", value=1, minimum=1),
45
  ],
46
  outputs=[