Spaces:
Running
Running
File size: 2,102 Bytes
e9c4020 51e5e37 5cd20ff 51e5e37 9f3650c 1b88ba6 9f3650c 1b88ba6 9f3650c 5cd20ff 1b88ba6 5cd20ff 9f3650c 1b88ba6 e9c4020 1b88ba6 e9c4020 1b88ba6 51e5e37 e85f01b f0c236a 9f3650c e9c4020 e85f01b e9c4020 f0c236a e9c4020 9f3650c 1b88ba6 e9c4020 9f3650c e9c4020 9f3650c e9c4020 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 54 55 56 57 58 59 60 61 62 63 |
import gradio as gr
from PIL import Image, ImageSequence
import imageio
def edit_file(file, loop_count, speed_factor, frame_skip):
file_name = file.name.split("/")[-1]
base_name = file_name.rsplit(".", 1)[0]
# 動画またはGIFの読み込み
if file.name.endswith((".mp4", ".avi", ".mov", ".mkv")):
gif_path = f"{base_name}.gif"
video = imageio.get_reader(file.name)
frames = []
for i, frame in enumerate(video):
if i % frame_skip == 0: # フレーム間引き
frames.append(frame)
imageio.mimsave(gif_path, frames, duration=1/speed_factor)
gif = Image.open(gif_path)
else:
gif = Image.open(file.name)
# GIF編集
frames = []
durations = []
original_duration = gif.info.get("duration", 100) # フレーム間の時間(ms)
for i, frame in enumerate(ImageSequence.Iterator(gif)):
if i % frame_skip == 0: # フレーム間引き
frames.append(frame.copy())
durations.append(original_duration // speed_factor) # 再生速度調整
# Pillowのループ設定の仕様に合わせて調整
adjusted_loop_count = 0 if loop_count == 0 else loop_count - 1
# 保存
output_path = f"{base_name}_edited.gif"
frames[0].save(
output_path,
save_all=True,
append_images=frames[1:],
loop=adjusted_loop_count, # 修正されたループ回数
duration=durations,
disposal=2
)
return output_path, output_path
# Gradioインターフェース
interface = gr.Interface(
fn=edit_file,
inputs=[
gr.File(label="GIFまたは動画をアップロード"),
gr.Number(label="ループ回数(0は無限ループ)", value=0),
gr.Number(label="再生速度の倍率(例: 2は2倍速)", value=1),
gr.Number(label="フレームスキップ数(1以上)", value=1, minimum=1),
],
outputs=[
gr.File(label="ダウンロードリンク"),
gr.Image(label="プレビュー", type="filepath")
]
)
interface.launch()
|