Spaces:
Running
Running
import gradio as gr | |
from PIL import Image, ImageSequence | |
def edit_gif(gif_file, loop_count, speed_factor, frame_skip): | |
# GIFを読み込む | |
gif = Image.open(gif_file) | |
frames = [] | |
durations = [] | |
# フレームを順に処理 | |
for i, frame in enumerate(ImageSequence.Iterator(gif)): | |
# 指定したフレーム数ごとにスキップ | |
if i % frame_skip != 0: | |
continue | |
frames.append(frame.copy()) | |
durations.append(gif.info.get("duration", 100) // speed_factor) # 再生速度調整 | |
# 新しいGIFを保存 | |
output_path = "edited.gif" | |
frames[0].save( | |
output_path, | |
save_all=True, | |
append_images=frames[1:], | |
loop=loop_count, | |
duration=durations, | |
disposal=2 | |
) | |
return output_path | |
# Gradioインターフェース | |
interface = gr.Interface( | |
fn=edit_gif, | |
inputs=[ | |
gr.File(label="アップロードするGIF"), | |
gr.Number(label="ループ回数(0は無限ループ)", value=0), | |
gr.Number(label="再生速度の倍率(例: 2は2倍速)", value=1), | |
gr.Number(label="フレームスキップ数", value=1), | |
], | |
outputs=gr.File(label="編集されたGIF") | |
) | |
interface.launch() | |