使用 Python 和 OpenCV 从一组图片生成 MP4 格式的视频

概要

在创建动画、制作幻灯片,从生成的图像数据中导出动态视频时,我们需要将一系列静态图片合成一个视频。

安装依赖

代码需要安装 OpenCV 库。可以通过命令行安装:

pip install opencv-python

完整代码

图片尺寸不一时见后文 调整视频尺寸

python 复制代码
import cv2
import os

# 设置图像文件夹路径
image_folder = 'person'
# 输出视频文件名
output_video = 'person.mp4'

# 获取所有图片文件
images = [img for img in os.listdir(image_folder) if img.endswith(".jpg") or img.endswith(".png")]
images.sort()  # 根据文件名排序

# 读取第一张图片,获取图片的尺寸
first_image_path = os.path.join(image_folder, images[0])
frame = cv2.imread(first_image_path)
height, width, layers = frame.shape

# 定义视频编码器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')    ##mp4v,mp4格式 ; XVID,avi格式
# 创建视频写入对象,帧率设置为30
video = cv2.VideoWriter(output_video, fourcc, 30, (width, height))

# 循环读取每一张图片,并写入视频
for image in images:
    image_path = os.path.join(image_folder, image)
    img = cv2.imread(image_path)
    video.write(img)

# 释放视频写入对象
video.release()

print("视频生成完毕,保存为:", output_video)

代码解析

  • 导入必要的库:我们导入了两个库:cv2 用于图像处理和视频生成,os 用于操作文件系统。

  • 设置图片文件夹路径和输出视频文件名:我们设定了 image_folder = 'person',指示图像存放的位置,同时设定了输出视频文件的名称为 person.mp4。

  • 获取所有图片文件:使用 os.listdir(image_folder) 获取文件夹中的所有文件。接着,我们通过条件筛选出所有以 .jpg 或 .png 为后缀的文件,确保我们处理的是图片文件。

  • 读取第一张图片,获取尺寸:通过读取第一张图片,获得图像的高度和宽度,这些信息在创建视频时会用到,以确保视频的尺寸与图片一致。

  • 定义视频编码器:我们使用 cv2.VideoWriter_fourcc(*'mp4v') 来指定视频编码格式为 mp4v,这是常用于 MP4 格式的视频编码器。如果你想使用 AVI 格式,可以改为 XVID。

  • 创建视频写入对象:使用 cv2.VideoWriter 创建一个视频写入对象,并设定输出文件名、编码器、帧率和视频尺寸。在这个例子中,我们将帧率设置为 30,适合大多数视频播放的需求。

  • 写入每一张图片到视频:循环遍历所有图片,读取每一张图片并使用 video.write(img) 将其写入视频文件。

  • 释放视频写入对象:最后,调用 video.release() 释放资源,完成视频生成。

代码优化

调整帧率:

想改变视频的播放速度,可以调整 cv2.VideoWriter() 中的帧率参数。帧率越高,视频播放速度越快,帧率越低,视频播放速度越慢。

调整视频尺寸:

想将所有图片调整为相同的尺寸,可以在写入每张图片之前,使用 cv2.resize() 方法调整图片大小。例如,假设你想将每张图片调整为 1280x720 的尺寸,可以在 video.write(img) 前加上:

python 复制代码
img = cv2.resize(img, (1280, 720))
相关推荐
WangYaolove131411 小时前
Python基于大数据的电影市场预测分析(源码+文档)
python·django·毕业设计·源码
知乎的哥廷根数学学派11 小时前
基于自适应多尺度小波核编码与注意力增强的脉冲神经网络机械故障诊断(Pytorch)
人工智能·pytorch·python·深度学习·神经网络·机器学习
cnxy18812 小时前
Python爬虫进阶:反爬虫策略与Selenium自动化完整指南
爬虫·python·selenium
用户83562907805113 小时前
Python 实现 Excel 条件格式自动化
后端·python
深蓝电商API13 小时前
Scrapy管道Pipeline深度解析:多方式数据持久化
爬虫·python·scrapy
噎住佩奇14 小时前
(Win11系统)搭建Python爬虫环境
爬虫·python
basketball61614 小时前
python 的对象序列化
开发语言·python
rgeshfgreh14 小时前
Python流程控制:从条件到循环实战
前端·数据库·python
luoluoal14 小时前
基于python大数据的电影市场预测分析(源码+文档)
python·mysql·django·毕业设计·源码
幻云201014 小时前
Python深度学习:从入门到实战
人工智能·python