使用Python从GIF提取关键帧

时间:2018-07-25 16:47:35

标签: python python-imaging-library gif pillow animated-gif

我想通过从GIF中提取15个最好是不同的帧来压缩GIF图像。

我正在使用Python和Pillow库,但找不到任何方法来获取Pillow docs中GIF的帧数。我也没有找到如何从GIF中提取特定帧的方法,因为Pillow restricts that

是否有任何方法可以提取帧而无需遍历每个帧? 是否有用于GIF处理的更高级的Python库?

2 个答案:

答案 0 :(得分:2)

这里是@radarhere答案的扩展,它将.gif分为num_key_frames个不同的部分,并将每个部分保存为新图像。

from PIL import Image

num_key_frames = 8

with Image.open('somegif.gif') as im:
    for i in range(num_key_frames):
        im.seek(im.n_frames // num_key_frames * i)
        im.save('{}.png'.format(i))

结果被somegif.gif分成8个,另存为0 .. 7.png

答案 1 :(得分:1)

对于帧数,您正在寻找n_frames-https://pillow.readthedocs.io/en/5.2.x/reference/plugins.html#PIL.GifImagePlugin.GifImageFile.n_frames

from PIL import Image
im = Image.open('test.gif')
print("Number of frames: "+str(im.n_frames))

用于提取单个帧-

im.seek(20)
im.save('frame20.gif')