小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
一、前言
动态图片我们使用的还是比较频繁的,平时的表情包有很多动图。今天我们要做的就是自己制作动态图片,其实就是将视频转换成动图,操作起来非常简单。下面我们就来看看如何实现吧。
二、读取视频
今天我们要做的就是将视频转换成动态图片,首先我们需要读取视频。这里要使用到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的时常。