在这个文章中,我们将学习如何从基于OpenCV和imageio实现将视频转为GIF。

1.步骤

  • 使用cv2.VideoCapture打开视频文件
  • 使用cap.read()方法一帧一帧读取视频帧
  • 将BGR转为RGB。imageio接受RGB格式的图像
  • 将帧保存到列表中,并关闭视频文件
  • 使用imageio.mimsave()方法将帧列表转换为GIF。根据需要设置FPS

代码如下:

import cv2import imageiocap = cv2.VideoCapture('D:/downloads/video.mp4')
image_lst = []while True:ret, frame = cap.read()frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)image_lst.append(frame_rgb)cv2.imshow('a', frame)key = cv2.waitKey(1)if key == ord('q'):breakcap.release()
cv2.destroyAllWindows()# Convert to gif using the imageio.mimsave method
imageio.mimsave('D:/downloads/video.gif', image_lst, fps=60)

接下来让我们看看如何定制化视频部分转为GIF。

2. 定制化视频部分转为GIF

2.1 方法一

使用视频的FPS,我们可以很容易的计算出开始与结束帧。然后提取之间的所有帧。一旦需要的帧提取完,我们就可以将它们转为GIF。以下显示了提取20秒到25秒之间的帧并将其转为GIF。

import cv2import imageiocap = cv2.VideoCapture('D:/downloads/video.mp4')
fps = cap.get(cv2.CAP_PROP_FPS)
start_time = 20*fps
end_time = 25*fps
image_lst = []
i = 0while True:ret, frame = cap.read()if ret == False:breakif (i>=start_time and i<=end_time):frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)image_lst.append(frame_rgb)cv2.imshow('a', frame)key = cv2.waitKey(1)if key == ord('q'):breaki +=1cap.release()
cv2.destroyAllWindows()# Convert to gif using the imageio.mimsave method
imageio.mimsave('D:/downloads/video.gif', image_lst, fps=60)

2.2 方法二

也可以根据控件手动的保存需要的帧图像。例如,当按s时候保存图像到列表中,当按q时候退出。

import cv2import imageiocap = cv2.VideoCapture('D:/downloads/video.mp4')
image_lst = []prev_key = -1
while True:ret, frame = cap.read()cv2.imshow('a', frame)key = cv2.waitKey(1)if key == ord('s'):key = -1prev_key = ord('s')if key == -1 and prev_key == ord('s'):frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)image_lst.append(frame_rgb)if key == ord('q'):breakcap.release()
cv2.destroyAllWindows()# Convert to gif using the imageio.mimsave method
imageio.mimsave('D:/downloads/video.gif', image_lst, fps=60)

2.2 方法三

这种方法相对来说比较繁琐。在这里,你一帧一帧地浏览每一帧,如果你想包括在GIF中你按下a键。要退出,按q键。一旦特定的帧被提取出来,我们可以很容易地使用imageio将它们转换成上面讨论过的动图。下面是它的代码。

import cv2
import imageiocap = cv2.VideoCapture('D:/downloads/video.mp4')
image_lst = []while True:ret, frame = cap.read()cv2.imshow('a', frame)key = cv2.waitKey(0)if key == ord('s'):frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)image_lst.append(frame_rgb)if key == ord('q'):breakcap.release()
cv2.destroyAllWindows()# Convert to gif using the imageio.mimsave method
imageio.mimsave('D:/downloads/video.gif', image_lst, fps=60)

参考目录

https://theailearner.com/2021/05/29/creating-gif-from-video-using-opencv-and-imageio/

基于OpenCV和imageio实现将视频转为GIF相关推荐

  1. 基于opencv在摄像头ubuntu根据视频获取

     基于opencv在摄像头ubuntu根据视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译执行步骤 安装编译opencv-2.3  參考h ...

  2. 基于opencv的绿幕背景视频抠图算法流程

  3. 基于OpenCV实现对图片及视频中感兴趣区域颜色识别

  4. python 视频人脸替换_Python基于OpenCV实现视频的人脸检测

    本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...

  5. python视频人脸检测_Python基于OpenCV实现视频的人脸检测

    本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...

  6. 基于OpenCV的视频处理管道

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目前可依靠模块化方式实现图像处理管道,检测一堆图像文件中的人脸,并 ...

  7. Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]

    1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...

  8. 基于OpenCV的视频场景切割神器

    环境 windows 10 64bit anaconda with python 3.7 pyscenedetect 0.5.5 简介 了解视频剪辑的小伙伴,应该都知道转场这个词.一个视频场景转换到另 ...

  9. 【优秀课设】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别 视频随时标注)

    基于OpenCV的Python人脸识别.检测.框选 (遍历目录下所有照片依次识别 视频随时标注) 移步: https://blog.csdn.net/weixin_53403301/article/d ...

最新文章

  1. opencv图像遍历方法速度对比
  2. 常考数据结构与算法:求平方根
  3. Android JNI 和 NDK
  4. 一个曾经的愤青梦--弥衡
  5. python实战1.1——根据1.0做词云图
  6. 在Ant Design Pro(React)中使用ECharts
  7. Linux_ubuntu16.04 无线/Wifi 上网速度慢的解决方法
  8. 测试显卡用什么软件最好,显卡测试用什么软件 怎么测试显卡性能
  9. postgres 坐标_用postgreSQL做基于地理位置的app(zz)
  10. springboot+毕业设计管理系统 毕业设计-附源码221032
  11. 可以打开c语言的软件图标是个虫子,VC雕虫小技集(四) (转)
  12. 社会人文跨计算机考研,各位跨专业考研党,不要违反这个规则,不然结果会让人遗憾...
  13. 使用Matlab把图片集合生成视频流文件
  14. 8B / 10B Encode/Decode详解
  15. codecombat计算机科学入门四(python)
  16. 如何判断当前浏览器是IE11
  17. Github博客+腾讯云域名的快捷绑定方案
  18. 基于halcon的焊点定位实例
  19. 单相PWM逆变器的建模-非常基础的建模文章 讲的也很细致
  20. 计算机视觉领域经典论文源码大全

热门文章

  1. 配置阿里云maven镜像
  2. easyrecovery15版本专业数据恢复软件
  3. 学生课程系统(java版)
  4. ppt流程图字体太小_PPT基础不好?这5个高大上的PPT技巧,瞬间让老板刮目相看!...
  5. C语言的变量类型(int、short、char、float...)及变量类型转换详解
  6. 使用java来写一个游戏外挂-内存修改程序(辅助-开篇)
  7. Thinkphp子查询问题总结
  8. 上一封邮件下一封邮件返回邮件 新技能Get!如何破解安卓手机图案解锁‏
  9. 爆炸好用!异常行为检测 GitHub 神器来了!
  10. 走进嵌入式Linux的世界