优草派  >   Python

Python如何用图片合成视频?Python怎么将多张图片合成视频

罗西汉            来源:优草派

之前的文章中小编给大家介绍过了将视频拆解成图片的方法,而这次则是要讲解和它相对的一个知识,那就是用多张图片来合成视频。下文有详细的代码示例和步骤解析,感兴趣的话就一起往下看看吧。

Python如何用图片合成视频?Python怎么将多张图片合成视频

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怎么将多张图片合成视频”的全部内容了,希望对你有所帮助。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行