屏幕录制与GIF转换---OpenCV-Python开发指南(46)

举报
择城终老 发表于 2021/07/26 22:57:44 2021/07/26
【摘要】 目录 常规应用视频转换为GIF录制屏幕 常规应用 对于程序员来说,在实际的生活中,对于一些简单的程序,往往都是使用自己编写的代码。毕竟学以致用才能熟练掌握,而OpenCV在生活中最常用的一些功能包括:将视频转换为GIF、录制屏幕,图片格式转换等等等等。 这些小程序说实话从网上下载往往会有很多的病毒,而使用PS或者PR的门槛对于有些人来说又有点高,那怎么...

常规应用

对于程序员来说,在实际的生活中,对于一些简单的程序,往往都是使用自己编写的代码。毕竟学以致用才能熟练掌握,而OpenCV在生活中最常用的一些功能包括:将视频转换为GIF、录制屏幕,图片格式转换等等等等。

这些小程序说实话从网上下载往往会有很多的病毒,而使用PS或者PR的门槛对于有些人来说又有点高,那怎么办呢?自己动手丰衣足食。

视频转换为GIF

在前面的博文中,我们已经介绍了视频的相关操作。

对于视频来说,其是由一帧一帧的图像构成的,同样的GIF图片也是。所以,我们可以将需要转换的视频,保存为单个图像的集合,然后转换为GIF图片。代码如下所示:

import cv2
import imageio

cap = cv2.VideoCapture("45.mp4")
all_frames = []
while (cap.isOpened()): ret, frame = cap.read() if ret is False: break all_frames.append(frame) cv2.imshow('video', frame) c = cv2.waitKey(1) if c == 27: break
cap.release()
cv2.destroyAllWindows()
gif = imageio.mimsave('result.gif', all_frames, 'GIF')

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

运行之后,效果如下:
动图
当然,这种是使用OpenCV与imageio。其实,我们还有更简单的直接将视频转换为GIF,不过因为是讲解OpenCV所以稍微复杂了点。下面是最简单的GIF转换代码:

from moviepy.editor import *

clip = (VideoFileClip("45.mp4"))
clip.write_gif("result.gif")

  
 
  • 1
  • 2
  • 3
  • 4

三行代码即可,使用之前,通过如下命令安装moviepy库:

pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple

  
 
  • 1

录制屏幕

在实际的电脑办公中,除了需要将视频转换为GIF动图以外,我们可能还有很多时候会用到录制屏幕的操作。具体实现步骤如下:

from PIL import ImageGrab
import numpy as np
import cv2

fps = 30

curScreen = ImageGrab.grab()  # 获取屏幕对象
height, width = curScreen.size
video = cv2.VideoWriter('45.avi', cv2.VideoWriter_fourcc(*'XVID'), fps, (height, width))
while True: frame = ImageGrab.grab()  # 抓取屏幕 frame = cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR) # 显示无图像的窗口 cv2.imshow('recording', np.zeros((1, 255), np.uint8)) # 控制窗口显示位置,右下角 cv2.moveWindow('recording', height - 100, width - 100) video.write(frame) # 退出条件 c = cv2.waitKey(1) if c == 27: break
video.release()
cv2.destroyAllWindows()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这里,我们通过ImageGrab获取屏幕的宽高,然后录制视频,同时通过ESC键退出录制。

文章来源: liyuanjinglyj.blog.csdn.net,作者:李元静,版权归原作者所有,如需转载,请联系作者。

原文链接:liyuanjinglyj.blog.csdn.net/article/details/114527822

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。