使用 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))
相关推荐
SiYuanFeng35 分钟前
Colab复现 NanoChat:从 Tokenizer(CPU)、Base Train(CPU) 到 SFT(GPU) 的完整踩坑实录
python·colab
炸炸鱼.1 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
_深海凉_2 小时前
LeetCode热题100-颜色分类
python·算法·leetcode
AC赳赳老秦2 小时前
OpenClaw email技能:批量发送邮件、自动回复,高效处理工作邮件
运维·人工智能·python·django·自动化·deepseek·openclaw
zhaoshuzhaoshu3 小时前
Python 语法之数据结构详细解析
python
AI问答工程师3 小时前
Meta Muse Spark 的"思维压缩"到底是什么?我用 Python 复现了核心思路(附代码)
人工智能·python
MWWZ3 小时前
最近的一些软件更新
opencv·算法·计算机视觉
zfan5204 小时前
python对Excel数据处理(1)
python·excel·pandas
小饕4 小时前
我从零搭建 RAG 学到的 10 件事
python
老歌老听老掉牙4 小时前
PyQt5+Qt Designer实战:可视化设计智能参数配置界面,告别手动布局时代!
python·qt