soiz commited on
Commit
1b88ba6
·
verified ·
1 Parent(s): d8ded43

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -20
app.py CHANGED
@@ -3,38 +3,32 @@ from PIL import Image, ImageSequence
3
  import imageio
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
  gif_path = f"{base_name}.gif"
13
  video = imageio.get_reader(file.name)
14
  frames = []
15
  for i, frame in enumerate(video):
16
- # 指定したフレーム数ごとにスキップ
17
- if i % frame_skip != 0:
18
- continue
19
- # 再生速度調整
20
- frames.append(frame)
21
-
22
- # GIFとして保存
23
  imageio.mimsave(gif_path, frames, duration=1/speed_factor)
24
  gif = Image.open(gif_path)
25
  else:
26
  gif = Image.open(file.name)
27
 
28
- # GIF編集処理
29
  frames = []
30
  durations = []
 
31
  for i, frame in enumerate(ImageSequence.Iterator(gif)):
32
- if i % frame_skip != 0: # フレームスキップ
33
- continue
34
- frames.append(frame.copy())
35
- durations.append(gif.info.get("duration", 100) // speed_factor)
36
 
37
- # 保存先をアップロードされたファイル名ベースに
38
  output_path = f"{base_name}_edited.gif"
39
  frames[0].save(
40
  output_path,
@@ -45,7 +39,7 @@ def edit_file(file, loop_count, speed_factor, frame_skip):
45
  disposal=2
46
  )
47
 
48
- return output_path, output_path # プレビュー表示用に同じパスを返す
49
 
50
  # Gradioインターフェース
51
  interface = gr.Interface(
@@ -54,11 +48,11 @@ interface = gr.Interface(
54
  gr.File(label="GIFまたは動画をアップロード"),
55
  gr.Number(label="ループ回数(0は無限ループ)", value=0),
56
  gr.Number(label="再生速度の倍率(例: 2は2倍速)", value=1),
57
- gr.Number(label="フレームスキップ数", value=1),
58
  ],
59
  outputs=[
60
  gr.File(label="ダウンロードリンク"),
61
- gr.Image(label="プレビュー", type="filepath") # 変更箇所
62
  ]
63
  )
64
 
 
3
  import imageio
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_path = f"{base_name}.gif"
12
  video = imageio.get_reader(file.name)
13
  frames = []
14
  for i, frame in enumerate(video):
15
+ if i % frame_skip == 0: # フレーム間引き
16
+ frames.append(frame)
 
 
 
 
 
17
  imageio.mimsave(gif_path, frames, duration=1/speed_factor)
18
  gif = Image.open(gif_path)
19
  else:
20
  gif = Image.open(file.name)
21
 
22
+ # GIF編集
23
  frames = []
24
  durations = []
25
+ original_duration = gif.info.get("duration", 100) # フレーム間の時間(ms)
26
  for i, frame in enumerate(ImageSequence.Iterator(gif)):
27
+ if i % frame_skip == 0: # フレーム間引き
28
+ frames.append(frame.copy())
29
+ durations.append(original_duration // speed_factor) # 再生速度調整
 
30
 
31
+ # 保存
32
  output_path = f"{base_name}_edited.gif"
33
  frames[0].save(
34
  output_path,
 
39
  disposal=2
40
  )
41
 
42
+ return output_path, output_path
43
 
44
  # Gradioインターフェース
45
  interface = gr.Interface(
 
48
  gr.File(label="GIFまたは動画をアップロード"),
49
  gr.Number(label="ループ回数(0は無限ループ)", value=0),
50
  gr.Number(label="再生速度の倍率(例: 2は2倍速)", value=1),
51
+ gr.Number(label="フレームスキップ数(1以上)", value=1, min=1),
52
  ],
53
  outputs=[
54
  gr.File(label="ダウンロードリンク"),
55
+ gr.Image(label="プレビュー", type="filepath")
56
  ]
57
  )
58