File size: 1,782 Bytes
e9c4020
aa37741
 
51e5e37
aa37741
1b88ba6
 
035c6aa
aa37741
 
 
 
035c6aa
aa37741
 
 
 
 
 
 
 
 
035c6aa
aa37741
9f3650c
aa37741
 
 
 
 
 
1b88ba6
e9c4020
 
 
9f3650c
e9c4020
aa37741
 
e9c4020
aa37741
e9c4020
aa37741
42e0d78
e9c4020
9f3650c
 
1b88ba6
9f3650c
e9c4020
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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()