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

news2025/2/21 11:35:41

概要

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

安装依赖

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

pip install opencv-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) 前加上:

img = cv2.resize(img, (1280, 720))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2301902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

POI pptx转图片

前言 ppt页面预览一直是个问题&#xff0c;office本身虽然有预览功能但是收费&#xff0c;一些开源的项目的预览又不太好用&#xff0c;例如开源的&#xff1a;kkfileview pptx转图片 1. 引入pom依赖 我这个项目比较老&#xff0c;使用版本较旧 <dependency><gro…

全志A133 android10 适配SLM770A 4G模块

一&#xff0c;模块基本信息 1.官方介绍 SLM770A是美格智能最新推出的一款LTE Cat.4无线通讯模组&#xff0c;最大支持下行速率150Mbps及上行速率50Mbps。同时向下兼容现有的3G和2G网络&#xff0c;以确保即使在偏远地区也可以进行网络通信。 SLM770A模组支持分集接收和MIMO技…

DP-最长上升子序列

题面&#xff1a; 样例&#xff1a; 思路&#xff1a; 遇到动态规划问题&#xff0c;我们照旧思考两部分&#xff0c;状态表示以及状态计算。这里我们f[N]表示以第i个数结尾的上升子序列的最大值。我们将f[N]划分为若干个部分&#xff0c;因为我们要用到递推思路想办法用前面的…

【C++第二十章】红黑树

【C第二十章】红黑树 红黑树介绍&#x1f9d0; 红黑树是一种自平衡的二叉搜索树&#xff0c;通过颜色标记和特定规则保持树的平衡性&#xff0c;从而在动态插入、删除等操作中维持较高的效率。它的最长路径不会超过最短路径的两倍&#xff0c;它的查找效率比AVL树更慢(对于CPU…

如何修改Windows系统Ollama模型存储位置

默认情况下&#xff0c;Ollama 模型会存储在 C 盘用户目录下的 .ollama/models 文件夹中&#xff0c;这会占用大量 C 盘空间&#xff0c;增加C盘“爆红”的几率。所以&#xff0c;我们就需要修改Ollama的模型存储位置 Ollama提供了一个环境变量参数可以修改Ollama的默认存在位…

OpenAI ChatGPT在心理治疗领域展现超凡同理心,通过图灵测试挑战人类专家

近期&#xff0c;一项关于OpenAI ChatGPT在心理治疗领域的研究更是引起了广泛关注。据报道&#xff0c;ChatGPT已经成功通过了治疗师领域的图灵测试&#xff0c;其表现甚至在某些方面超越了人类治疗师&#xff0c;尤其是在展现同理心方面&#xff0c;这一发现无疑为AI在心理健康…

Netflix Ribbon:云端负载均衡利器

Netflix Ribbon&#xff1a;云端负载均衡利器 ribbon Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support. 项目地…

【Android】Android 悬浮窗开发 ( 动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

文章目录 一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后返回处理 二、悬浮窗 前台服务和通知1、前台服务 启动 悬浮窗 的必要性① 保持悬浮窗存活② 悬浮窗的要求③ 悬浮窗版本兼容 2、其它类型服务简介① 前台服务…

Python高级语法之jsonpathBeautifulSoup解析器

目录&#xff1a; 1、jsonPath的使用2、使用jsonpath解析淘票票网页3、BeautifulSoup解析器的使用4、BeautifulSoup层级选择器的使用 1、jsonPath的使用 2、使用jsonpath解析淘票票网页 3、BeautifulSoup解析器的使用 4、BeautifulSoup层级选择器的使用

工业安卓主板在智慧粮仓设备中发挥着至关重要的作用

工业安卓主板在智慧粮仓设备中发挥着至关重要的作用。以下是关于其作用的具体分析&#xff1a; 一、提供稳定可靠的运行平台 智慧粮仓设备需要长时间稳定运行&#xff0c;以实现对粮食储存环境的实时监测和精准控制。工业安卓主板采用高性能的处理器和大容量的存储空间&#…

ECMAScript6----var、let、const

ECMAScript6----var、let、const 1.var2.let3.const 1.var &#xff08;1&#xff09;在相同作用域下可重复声明 var a 20 var a 30 console.log(a) // 30&#xff08;2&#xff09;存在变量提升 console.log(a) // undefined var a 20&#xff08;3&#xff09;可修改声…

【ST-LINK未能被keil识别STM32 ST-LINK Utility出现“Can not connect to target】

针对各种品牌32MCU boot0拉高&#xff0c;boot1拉低进入系统存储器&#xff0c;对Flash先擦除在下载 针对STM32f103 通过32复位和stlink Utilit解决 https://blog.csdn.net/Donglutao/article/details/129086960 https://www.bilibili.com/video/BV1F94y1g7be/?spm_id_…

Android Http-server 本地 web 服务

时间&#xff1a;2025年2月16日 地点&#xff1a;深圳.前海湾 需求 我们都知道 webview 可加载 URI&#xff0c;他有自己的协议 scheme&#xff1a; content:// 标识数据由 Content Provider 管理file:// 本地文件 http:// 网络资源 特别的&#xff0c;如果你想直接…

python实践-实现实时语音转文字本地部署版(二)

一、技术栈 python 3.10.6 vosk 需下载对应模型&#xff08;vosk-model-cn-0.22&#xff09;模型下载慢的同学看最后的资源链接。 pyaudio keyboard 二、实现功能 本地化实现麦克风语音录入&#xff0c;实时生成文字&#xff0c;并保存至本地文档。 三、实现代码 fro…

tortoiseSVN 如何克隆项目到本地

导入项目成功&#xff0c;如下图&#xff1a;

解决“QString的split()函数分割中文“报错

在使用Qt平台的QString类里的split()函数&#xff0c;分割.txt文件里中文的字符串时&#xff0c;发现中文会乱码。     问题原因&#xff1a;中文使用UTF-16编码。     解决方法&#xff1a;将.txt文件保存为UTF-16编码&#xff0c;然后使用split()去分割对应的字符串即可。…

云平台结合DeepSeek的AI模型优化实践:技术突破与应用革新

目录 前言 一、技术架构&#xff1a;算力与算法的协同基石 1. 蓝耘平台的核心优势 2. DeepSeek的模型创新 二、应用场景&#xff1a;垂直领域的智能化落地 1. 商业领域&#xff1a;智能推荐与客服 2. 工业领域&#xff1a;质检与流程优化 3. 智慧城市与医…

蓝桥杯(B组)-每日一题(1093字符逆序)

c中函数&#xff1a; reverse(首位置&#xff0c;尾位置&#xff09; reverse(s.begin(),s.end()) 头文件&#xff1a;<algorithm> #include<iostream> #include<algorithm>//运用reverse函数的头文件 using namespace std; int main() {string s;//定义一…

jsherp importItemExcel接口存在SQL注入

一、漏洞简介 很多人说管伊佳ERP&#xff08;原名&#xff1a;华夏ERP&#xff0c;英文名&#xff1a;jshERP&#xff09;是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能&#xff0c;但后面将会推出ERP的全部功能&#xff0c;有兴趣请帮点一下 二、漏洞影响 …

一文讲清 AIO BIO NIO的区别

引言 在 Java 编程中&#xff0c;BIO&#xff08;Blocking I/O&#xff09;、NIO&#xff08;Non-blocking I/O&#xff09;和 AIO&#xff08;Asynchronous I/O&#xff09;是三种不同的 I/O 模型&#xff0c;它们在处理输入输出操作时有着不同的机制和特点&#xff0c;但是市…