Python+opencv图片合成视频
1、安装opencv扩展
pip install opencv-python
2、图片合成视频代码
import os
import cv2
import time
filelist = []
#(1)
#path = 'C:/Users/admin/Pictures/scence/' #(1)最后一个 / 不能少,因为后面用到了它拼接出文件的全路径;或者可以少#(2),在拼接全路径的时候再拼接上一个 / 即可
#(2)
path = 'C:/Users/admin/Pictures/scence'
filelist = os.listdir(path) #获取该目录下的所有文件名 ['aaa.jpg',...,'zzz.jpg']
'''
fps:
帧率:1秒钟有n张图片写进去[控制一张图片停留5秒钟,那就是帧率为1,重复播放这张图片5次]
如果文件夹下有50张 534*300的图片,这里设置1秒钟播放5张,那么这个视频的时长就是10秒
'''
fps = 5
size = (534, 300) #这个非常重要,图片的分辨率就是这个视频合成的分辨率,这个分辨率不是瞎写的,如果你的文件夹下没有相同分辨率的图片,那么合成的视频只有几kb,即为空视频。
file_path = "C:/Users/admin/Videos/test/" + str(int(time.time())) + ".avi" #只能合成avi后缀视频
fourcc = cv2.VideoWriter_fourcc('I','4','2','0')
video = cv2.VideoWriter( file_path, fourcc, fps, size )
for item in filelist:
if item.endswith('.jpg'): #判断图片后缀是否是.jpg
#(1)
#item = path+item #全路径地址(c:/../scence/haha.jpg)
#(2)
item = path + '/' + item # 全路径地址(c:/../scence/haha.jpg)
img = cv2.imread(item) #使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255。
video.write(img) #把图片写进视频
video.release() #释放
#cv2.destroyAllWindows() #关闭图片窗口
3、注意
(1)、理解fps概念,即一秒钟播放多少张图片;
(2)、size不是随意设置的,size的大小即为文件夹中图片的分辨率大小,否则视频大小为几kb,合成失败。