导语
大家好,我是栗子同学!
今天给大家分享一个好玩的东西
让时光倒流——当当当,其实就是让视频倒放而已
正常的视频如下
倒放视频如下
效果很赞吧,等你学会了这个,你才会发现,抖音上那些杯子里的水倒流,倒着跑步等看似很炫酷很神秘的视频,其实就是一键倒放而已!
那么,今天小编就来探索Python代码如何实现这个倒放的功能叭~
正文
这些搞笑的gif跟小视频都是将正常的流畅通过倒放产生的效果啦
其实制作起来却非常简单,原理就是将gif图片拆分出来每一帧,再将拆分的每一帧图片反向排序保存到gif里即可,只需要十行代码
源码如下
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:])
效果展示
哈哈哈,看懂这个视频了嘛!!
当遇到老人的时候应该.......
完整的一组效果
少年触电,勇士及时救援!
去吧!皮卡丘
总结
哈哈哈哈,这些动态的倒放效果真的还挺有意思的哈~赶紧自己动手试试嘛
补充
Python其实不仅能实现视频的倒放,还有动图的倒放
下面是实现动图倒放的示例代码
# python下的图像处理库
from PIL import Image, ImageSequence
# 系统模块
import os
# 用于读取gif动图
im = Image.open("读取图片的名称")
# gif图片流的迭代器
iter = ImageSequence.Iterator(im)
index = 1
for frame in iter:
# 每一帧图片
print("image %d: mode %s, size %s" % (index, frame.mode, frame.size))
# 若保存的路径不存在,则创建文件夹
path = "imgs"
if path not in os.listdir():
os.makedirs(path)
# 将每一帧图片保存到imgs文件夹下
frame.save("./imgs/frame%d.png" % index)
index += 1
# 将gif拆分成图片流
imgs = [frame.copy() for frame in ImageSequence.Iterator(im)]
# 输出原图
# imgs[0].save("./out.gif", save_all=True, append_images=imgs[1:])
# 将图片流反序
imgs.reverse()
# 将反序后的图片流保存并输出
imgs[0].save("./reverse_out.gif", save_all=True, append_images=imgs[1:])
到此这篇关于十行Python代码制作一个视频倒放神器的文章就介绍到这了,更多相关Python视频倒放内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!