之前的文章中小编给大家介绍过了将视频拆解成图片的方法,而这次则是要讲解和它相对的一个知识,那就是用多张图片来合成视频。下文有详细的代码示例和步骤解析,感兴趣的话就一起往下看看吧。
1.首先就是要导入模块,生成视频需要使用opencv库,而处理文件夹及其文件需要用到os内置模块。而numpy库是用来完成格式转换的,示例如下:
import cv2 import os import numpy as np from PIL import Image
2.第二步则是要创建一个文件夹,该文件夹下面只能够保存生成视频所需的图片,并且这些图片的分辨率都要是一样的。而文件按照名称大小的排序,则决定了合成视频时它所在的位置,也就是处在视频哪一秒。
3.第三步就是要定义一个函数,函数内三个参数表示的意思就是图片路径、视频路径以及视频每秒帧数。先用os模块获取到路径下全部图片,然后使用sort()方法来让其按照数字大小排序。之后就是调用Image模块的方法来读取图片了并获得图片分辨率,代码如下:
def frame2video(im_dir,video_dir,fps): im_list = os.listdir(im_dir) im_list.sort(key=lambda x: int(x.replace("frame","").split('.')[0])) img = Image.open(os.path.join(im_dir,im_list[0]))
img_size = img.size
4.第四步则是需要先指定视频编码格式并返回一个对象,然后用VideoWriter()方法加上视频保存路径、编码格式对象、帧率以及图片分辨率来构建出一个视频写入对象,也可以称之为空的视频。这个视频的大小和图片分辨率相同,代码如下:
fourcc = cv2.VideoWriter_fourcc(*'XVID') #opencv版本是3 videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
5.第五步需要使用for循环迭代图片列表,在循环中用变量拼接图片名称,然后调用fromfile()方法获取到图片并且将其转为八位图像格式。之后再使用write()方法将其写入到视频对象中,循环结束就表示视频已经有足够的图片了,示例如下:
for i in im_list: im_name = os.path.join(im_dir+i) frame = cv2.imdecode(np.fromfile(im_name, dtype=np.uint8), -1) videoWriter.write(frame)
6.最后则是调用该函数并且传入指定参数即可,代码示例如下所示:
if __name__ == '__main__': frame2video (r'E:\img', r'E:\2.mp4'302)
以上就是关于“Python如何用图片合成视频?Python怎么将多张图片合成视频”的全部内容了,希望对你有所帮助。