我想通过提取15帧GIF图像来压缩它,这些帧最好是不同的。
我正在使用Python和Pillow库,但在Pillow文档中没有找到获取GIF帧数的方法,也没有找到如何从GIF中提取特定帧的方法,因为Pillow限制了这个操作。
是否有办法在不连续迭代每一帧的情况下提取帧?是否有更先进的Python库可以处理GIF?
我想通过提取15帧GIF图像来压缩它,这些帧最好是不同的。
我正在使用Python和Pillow库,但在Pillow文档中没有找到获取GIF帧数的方法,也没有找到如何从GIF中提取特定帧的方法,因为Pillow限制了这个操作。
是否有办法在不连续迭代每一帧的情况下提取帧?是否有更先进的Python库可以处理GIF?
这是@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
。
PIL.Image.seek(i)
。 - mins关于帧数,您需要查找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.jpg')
def load_gif(file_path):
with tf.io.gfile.GFile(file_path, 'rb') as f:
video = tf.io.decode_gif(f.read())
return np.array(video)