当前位置:   article > 正文

Python 视频(连续图片)转gif动图_pil gif 循环

pil gif 循环

之前写了一个转gif格式的代码= = 。

  1. import os
  2. import cv2
  3. from PIL import Image
  4. def to_gif(video_path,save_path,name,start,time,timeF=1,end=-9999,ratio = 1,loop=0):
  5. '''
  6. parameter:
  7. video_path:视频路径
  8. save_path:gif保存路径
  9. name:保存gif的名字
  10. start:希望开始的时间
  11. end:希望结束的时间
  12. time:图片切换的时间
  13. timeF:隔多久拆帧,默认为1
  14. ratio:缩放比率,默认为1,原图大小
  15. loop:播放模式,默认为0,循环播放,1为只播放一次
  16. return:
  17. None
  18. '''
  19. capture = cv2.VideoCapture(video_path) #生成视频读取对象
  20. width = int(capture.get(3)) #获取视频的长度
  21. height = int(capture.get(4)) #获取视频的宽度
  22. fps = int(capture.get(5)) #获取视频的帧速率
  23. number = int(capture.get(7)) #获取视频的总帧数
  24. times = 0
  25. img_list = [] #构建用于存放帧数组的空列表
  26. while 1:
  27. ret,frame = capture.read() #读取视频
  28. if not ret:
  29. break
  30. if end == -9999:
  31. frame = cv2.resize(frame,(int(width*ratio),int(height*ratio))) #图像缩放
  32. frame = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) #数组转为PIL image
  33. img_list.append(frame) #列表中添加数组
  34. else:
  35. if start >= end:
  36. raise Exception('Starting time must be samller than ending time!')
  37. if int(start*fps) < times < int(end*fps):
  38. if (times % timeF == 0):
  39. frame = cv2.resize(frame,(int(width*ratio),int(height*ratio)))
  40. frame = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
  41. img_list.append(frame)
  42. times += 1
  43. img_list[0].save(os.path.join(save_path,'{}.gif'.format(name)),save_all=True, append_images = img_list,duration=time*timeF, loop=0) #合成gif
  44. capture.release()
  45. return
  46. if __name__ == '__main__':
  47. video_path = '视频路径'
  48. save_path = 'gif存储路径'
  49. name = 're1'
  50. start = 1
  51. end = 6
  52. time = 1
  53. to_gif(video_path,save_path,name,start,end,time,ratio = 0.15)

代码经过调试了滴,可以直接用~ 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/912959
推荐阅读
相关标签
  

闽ICP备14008679号