一、前言
动态图片我们使用的还是比较频繁的,平时的表情包有很多动图。今天我们要做的就是自己制作动态图片,其实就是将视频转换成动图,操作起来非常简单。下面我们就来看看如何实现吧。
二、读取视频
今天我们要做的就是将视频转换成动态图片,首先我们需要读取视频。这里要使用到opencv,其实还可以用moviepy,在处理视频方便要更加专业,不过这里为了方便使用opencv模块。
1、安装
安装的话只需要执行下面的语句:
pip install opencv-python 复制代码
然后是导入:
import cv2 复制代码
下面我们就可以使用了。
2、读取视频
opencv读取视频的操作非常简单,代码如下:
import cv2 # 读取视频 capture = cv2.VideoCapture("test.mp4") # 读取视频帧 ret, frame = capture.read() 复制代码
这里我们调用cv2.VideoCapture
来读取视频,当我们传入0时它会直接调用我们的摄像头。
然后我们调用read
读取视频内容,这里返回了两个参数,分别是是否有下一帧和当前帧的图片对象。
3、缩放图片
在转换成动图的时候,我们需要让图片有包浆的感觉,因此要将图片缩小。具体操作如下:
import cv2 img = cv2.imread("1.jpg") # 修改图片尺寸 reimg = cv2.resize(img, (200, 100)) 复制代码
我们通过调用resize函数修改了图片尺寸。
三、视频转换成GIF
这里就是不断读取视频,然后缩小图片写入GIF。具体代码如下:
import cv2 fps = 12 w, h = 200, 100 capture = cv2.VideoCapture("小新穿内裤.mp4") fourcc = cv2.VideoWriter_fourcc(*'mp4v') writer = None num = 0 while True: ret, frame = capture.read() if not writer: writer = cv2.VideoWriter('result.gif', fourcc, fps, (w, h)) if not ret: break if num % 2 == 0: writer.write(cv2.resize(frame, (w, h))) num += 1 writer.release() 复制代码
这里我们就是将完整的视频写成了GIF,大家也可以在循环中设置条件让他提前结束,这样就可以控制GIF的时常。
作者:ZackSock
链接:https://juejin.cn/post/7017466154230743053
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。