该代码提供了一个简单的界面,允许用户将视频转换为GIF动画,并且可以自定义采样率、GIF帧率和输出大小。修改后的代码将视频帧的大小调整为固定的尺寸,并在生成GIF动画时保持这个尺寸。
一、核心代码实现
核心代码如下:
import cv2
import imageio
# 设置视频文件名和输出GIF文件名
videoName = '../video/demo.mov'
outName = "../video/" + videoName[:-3] + 'gif'
# 设置视频帧的缩放比例,采样率,和GIF动画的帧率
scale = 0.25
skipRate = 30
gifFps = 10
# 打开视频文件并获取视频的参数
cap = cv2.VideoCapture(videoName)
videoWidth = cap.get(3)
videoHeight = cap.get(4)
videoFps = cap.get(5)
frameTotal = cap.get(7)
frameForOutput = frameTotal / skipRate
# 创建GIF动画并逐帧处理
with imageio.get_writer(outName, duration=1/gifFps, mode='I') as writer:
framerCounter = 0
while True:
ret, frame = cap.read()
if not ret:
print("finished")
break
# 增加帧计数器
framerCounter += 1
# 按照采样率,只处理每隔skipRate帧的视频帧
if framerCounter % 10 == 0:
# 对视频帧进行缩放
frame = cv2.resize(frame, (0, 0), fx=scale, fy=scale)
# 在窗口中显示处理后的视频帧
cv2.imshow('frame', frame)
# 将视频帧从BGR颜色空间转换为RGB颜色空间
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 将处理后的视频帧添加到GIF动画中
writer.append_data(frame)
# 打印当前处理进度(ETA)百分比
print("ETA-", round((framerCounter / frameTotal) * 100, 2), "%")
else:
# 跳过不需要处理的帧
continue
# 如果按下键盘上的“q”键,则停止处理视频
if cv2.waitKey(1) == ord('q'):
break
# 释放视频文件
cap.release()
实现的代码逻辑如下:
1.导入必要的库:cv2(OpenCV):一个用于图像和视频处理的流行计算机视觉库。
imageio:一个用于读取和写入各种图像数据(包括视频格式)的库。
2.定义视频相关参数:设置视频文件名videoName和输出GIF文件名outName。定义视频帧的缩放比例scale,默认为0.25(即将视频帧的大小缩小为原来的1/4)。定义采样率skipRate,表示每隔多少帧采样一次视频帧,默认为30。定义GIF动画的帧率gifFps,表示输出的GIF动画每秒显示多少帧,默认为10。
3.打开视频文件并获取视频的参数:使用OpenCV的cv2.VideoCapture()打开视频文件,并获取视频的宽度、高度、帧率以及总帧数。
4.创建GIF动画并逐帧处理:使用imageio.get_writer()创建GIF动画的输出文件,并设置帧持续时间为1/GIF帧率,以确保动画的播放速度。
二、实现界面和运行程序
可以调整按钮进行调整转化GIF动画的质量,展示如下:
转化后的GIF图像存储到原来上传文件的位置,可自行进行查看。
该代码GUI界面转化为了.exe程序,大家可以自己下载下来解压使用。解压后.exe程序存储在了./dist/mian1/文件下找到mian1.exe程序即可。
完整代码下载链接:包含.exe应用程序
CSDN