如何实现gif格式图片倒放效果?

发布时间 2023-08-21 19:34:15作者: news_one

不知道大家看电影的时候有没有发现出现过这样的一个神奇场景:
一个子弹竟然从远处飞回到手枪中,整个场景呈现一种时空倒流的感觉?

正文

先来几个有趣的倒放动图娱乐一下~

猫:我谢谢你们全家

萌娃快乐针

尊老爱幼?

狗狗:敢从我嘴里抢食?

狗狗:敢从我嘴里抢食?

可以说是很魔性了

要说最近全球最火的电影,非《信条》莫属了,国内各大院线都有排片,冲着诺兰的名气大家都可以去看看,看不懂也没关系,当做看动作片也行。

关于电影的解读网上很多了,片中由于逆向时间所以有很多“倒放”的镜头,今天就用python来实现动图倒放的效果。

至于原理很简单。

我们都知道gif其实就是一帧帧的图片拼接而成,只要把这些图片拆出来,再反向拼接回去就可以了。

假设你电脑里已经有python环境了,使用pip安装PIL库就行。

from PIL import Image, ImageSequence
# 读取 GIF
im = Image.open("1.gif")
# GIF 图片流的迭代器
iter = ImageSequence.Iterator(im)
index = 1
# 遍历图片流的每一帧
for frame in iter:
    print("image %d: mode %s, size %s" % (index, frame.mode, frame.size))
    frame.save("./images/img%d.png" % index)
    index += 1
# 把 GIF 拆分为图片流
imgs = [frame.copy() for frame in ImageSequence.Iterator(im)]
# 图片流反序
imgs.reverse()
# 将反序后的所有帧图像保存下来
imgs[0].save("reverse.gif", save_all=True, append_images=imgs[1:])

运行以上脚本就可以把py文件同级目录下的1.gif倒装回来了。

如果是视频呢,就要用到moviepy这个库了,然后利用ffmpeg合成。原理也差不多。