soiz commited on
Commit
9f3650c
·
verified ·
1 Parent(s): 676a9fd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -14
app.py CHANGED
@@ -1,22 +1,32 @@
1
  import gradio as gr
2
  from PIL import Image, ImageSequence
 
3
 
4
- def edit_gif(gif_file, loop_count, speed_factor, frame_skip):
5
- # GIFを読み込む
6
- gif = Image.open(gif_file)
 
 
 
 
 
 
 
 
 
 
 
 
7
  frames = []
8
  durations = []
9
-
10
- # フレームを順に処理
11
  for i, frame in enumerate(ImageSequence.Iterator(gif)):
12
- # 指定したフレーム数ごとにスキップ
13
- if i % frame_skip != 0:
14
  continue
15
  frames.append(frame.copy())
16
- durations.append(gif.info.get("duration", 100) // speed_factor) # 再生速度調整
17
 
18
- # 新しいGIFを保存
19
- output_path = "edited.gif"
20
  frames[0].save(
21
  output_path,
22
  save_all=True,
@@ -25,18 +35,22 @@ def edit_gif(gif_file, loop_count, speed_factor, frame_skip):
25
  duration=durations,
26
  disposal=2
27
  )
28
- return output_path
 
29
 
30
  # Gradioインターフェース
31
  interface = gr.Interface(
32
- fn=edit_gif,
33
  inputs=[
34
- gr.File(label="アップロードするGIF"),
35
  gr.Number(label="ループ回数(0は無限ループ)", value=0),
36
  gr.Number(label="再生速度の倍率(例: 2は2倍速)", value=1),
37
  gr.Number(label="フレームスキップ数", value=1),
38
  ],
39
- outputs=gr.File(label="編集されたGIF")
 
 
 
40
  )
41
 
42
  interface.launch()
 
1
  import gradio as gr
2
  from PIL import Image, ImageSequence
3
+ from moviepy.editor import VideoFileClip
4
 
5
+ def edit_file(file, loop_count, speed_factor, frame_skip):
6
+ file_name = file.name.split("/")[-1] # 元ファイル名を取得
7
+ base_name = file_name.rsplit(".", 1)[0] # 拡張子を除いた部分
8
+
9
+ # ファイルがGIFか動画か判定
10
+ if file.name.endswith((".mp4", ".avi", ".mov", ".mkv")):
11
+ # 動画をGIFに変換
12
+ clip = VideoFileClip(file.name)
13
+ gif_path = f"{base_name}.gif"
14
+ clip.write_gif(gif_path, fps=10)
15
+ gif = Image.open(gif_path)
16
+ else:
17
+ gif = Image.open(file.name)
18
+
19
+ # GIF編集処理
20
  frames = []
21
  durations = []
 
 
22
  for i, frame in enumerate(ImageSequence.Iterator(gif)):
23
+ if i % frame_skip != 0: # フレームスキップ
 
24
  continue
25
  frames.append(frame.copy())
26
+ durations.append(gif.info.get("duration", 100) // speed_factor)
27
 
28
+ # 保存先をアップロードされたファイル名ベースに
29
+ output_path = f"{base_name}_edited.gif"
30
  frames[0].save(
31
  output_path,
32
  save_all=True,
 
35
  duration=durations,
36
  disposal=2
37
  )
38
+
39
+ return output_path, output_path # プレビュー表示用に同じパスを返す
40
 
41
  # Gradioインターフェース
42
  interface = gr.Interface(
43
+ fn=edit_file,
44
  inputs=[
45
+ gr.File(label="GIFまたは動画をアップロード"),
46
  gr.Number(label="ループ回数(0は無限ループ)", value=0),
47
  gr.Number(label="再生速度の倍率(例: 2は2倍速)", value=1),
48
  gr.Number(label="フレームスキップ数", value=1),
49
  ],
50
+ outputs=[
51
+ gr.File(label="ダウンロードリンク"),
52
+ gr.Image(label="プレビュー", type="file")
53
+ ]
54
  )
55
 
56
  interface.launch()