gif-editor / app.py
soiz's picture
Update app.py
aa37741 verified
import gradio as gr
import imageio
import os
def edit_file(file, apply_loop, loop_count, apply_speed, speed_factor, apply_skip, frame_skip):
file_name = file.name.split("/")[-1]
base_name = file_name.rsplit(".", 1)[0]
# GIFの読み込み
reader = imageio.get_reader(file.name)
fps = reader.get_meta_data().get("fps", 10) # デフォルトFPSは10
# フレームスキップと速度調整
frames = []
for i, frame in enumerate(reader):
if apply_skip and i % frame_skip != 0: # フレームスキップを適用
continue
frames.append(frame)
# 再生速度調整
if apply_speed and speed_factor != 1:
fps = int(fps * speed_factor)
# GIFとして保存
output_path = f"{base_name}_edited.gif"
writer = imageio.get_writer(output_path, fps=fps, loop=0 if not apply_loop else loop_count)
for frame in frames:
writer.append_data(frame)
writer.close()
return output_path, output_path
# Gradioインターフェース
interface = gr.Interface(
fn=edit_file,
inputs=[
gr.File(label="GIFをアップロード"),
gr.Checkbox(label="ループ回数を変更する", value=True),
gr.Number(label="ループ回数(0は無限ループ)", value=0),
gr.Checkbox(label="再生速度を変更する", value=False),
gr.Number(label="再生速度の倍率(例: 2は2倍速)", value=1),
gr.Checkbox(label="フレームスキップを変更する", value=False),
gr.Number(label="フレームスキップ数(1以上)", value=1, minimum=1),
],
outputs=[
gr.File(label="ダウンロードリンク"),
gr.Image(label="プレビュー", type="filepath")
]
)
interface.launch()