【Python】图像批量合成视频,并以文件夹名称命名合成的视频

一个文件夹中有多个子文件夹,子文件夹中有多张图像。如何把批量把子文件夹中的图像合成视频,视频名称是子文件夹的名称,生成的视频保存到指定文件夹,效果记录。

代码

import os
import cv2def create_video_from_images(image_folder, output_folder, fps=30):# 获取子文件夹名称,这将作为视频文件的名称video_name = os.path.basename(image_folder)video_path = os.path.join(output_folder, f"{video_name}.mp4")# 获取子文件夹中的所有图像文件images = [img for img in os.listdir(image_folder) if img.endswith((".png", ".jpg", ".jpeg", ".bmp", ".tiff"))]# 确保图像列表不为空if not images:print(f"No images found in {image_folder}")return# 对图像文件进行排序,确保它们按照正确的顺序合成视频images.sort()# 读取第一张图像以获取帧尺寸frame = cv2.imread(os.path.join(image_folder, images[0]))height, width, layers = frame.shape# 定义编码器并创建VideoWriter对象fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 使用mp4编码video = cv2.VideoWriter(video_path, fourcc, fps, (width, height))# 遍历所有图像并将它们写入视频文件for image_file in images:image_path = os.path.join(image_folder, image_file)video.write(cv2.imread(image_path))# 释放VideoWriter并关闭所有窗口video.release()cv2.destroyAllWindows()print(f"Video {video_path} created successfully.")# 主函数,用于遍历主文件夹中的所有子文件夹并创建视频
def main(main_folder, output_folder):# 确保输出文件夹存在,如果不存在则创建它if not os.path.exists(output_folder):os.makedirs(output_folder)# 遍历主文件夹中的所有子文件夹for subdir, _, files in os.walk(main_folder):# 检查子文件夹中是否包含图像文件if any(file.endswith((".png", ".jpg", ".jpeg", ".bmp", ".tiff")) for file in files):create_video_from_images(subdir, output_folder)# 设置主文件夹和输出文件夹的路径
main_folder_path = "F:/test_video/image/"
output_folder_path = "F:/test_video/video/"# 调用主函数开始处理
main(main_folder_path, output_folder_path)

代码解释:

  1. create_video_from_images 函数接收一个子文件夹路径和输出文件夹路径作为参数,用于将子文件夹中的图像合成视频。

  2. 在函数中,首先通过 os.path.basename 获取子文件夹的名称,这将用作视频文件的名称。然后,拼接输出视频文件的完整路径。

  3. 使用列表推导式查找子文件夹中的所有图像文件,并检查列表是否非空。

  4. 对图像文件进行排序,确保它们按照文件名顺序被读取和写入视频。

  5. 读取第一张图像来确定帧的尺寸,这对于创建 VideoWriter 对象是必需的。

  6. 定义视频编码器和创建 VideoWriter 对象。这里使用 ‘mp4v’ 编码来创建MP4格式的视频。

  7. 遍历子文件夹中的所有图像,并使用 VideoWriter 的 write 方法将它们写入视频文件。

  8. 释放 VideoWriter 对象并关闭所有OpenCV窗口。

  9. main 函数遍历主文件夹中的所有子文件夹,并调用 create_video_from_images 函数来为每个子文件夹创建视频。

10 在 main 函数中,首先检查输出文件夹是否存在,如果不存在则创建它。

  1. 最后,设置主文件夹和输出文件夹的路径,并调用 main 函数开始处理。

效果展示

子文件夹
在这里插入图片描述
每个子文件夹中都有若干图像
在这里插入图片描述
合成视频并以子文件夹名称命名
在这里插入图片描述

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

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

相关文章

leetcode刷题(6):二叉树的使用

文章目录 104. 二叉树的最大深度解题思路c 实现 94. 二叉树的中序遍历解题思路c 实现 101. 对称二叉树解题思路c 实现 96. 不同的二叉搜索树解题思路c 实现 102. 二叉树的层序遍历解题思路c 实现 104. 二叉树的最大深度 题目: 给定一个二叉树 root ,返回其最大深度…

ALV 图标显示

前言 在ABAP ALV中,使用fieldcat来定义列表中每个字段的显示属性,包括图标(Icon)的显示。图标可以在ALV列表中为特定列的行或标题添加图形元素,以增强视觉提示或传达附加信息。 ICON查询 图标的名称用事务码”ICON“进…

智能BI(后端)-- 系统异步化

文章目录 系统问题分析什么是异步化?业务流程分析标准异步化的业务流程系统业务流程 线程池为什么需要线程池?线程池两种实现方式线程池的参数线程池的开发 项目异步化改造 系统问题分析 问题场景:调用的服务能力有限,或者接口的…

【文档理解】TextMonkey:一种OCR-Free的用于文档理解的多模态大模型

背景 传统的信息提取,通常是从文本中提取信息,相关技术也比较成熟。然而对于复杂领域,例如图片,文档等形式的数据,想要提取出高质量的、可信的数据难度就比较大了,这种任务也常称为:视觉文档理…

CTF网络安全大赛web题目:just_sqli

这道题目是bugku的web题目 题目的 描  述: KosenCTF{} 原文链接&#xff1a; CTF网络安全大赛web题目&#xff1a;just_sqli - 红客网-网络安全与渗透技术 题目Web源代码&#xff1a; <?php$user NULL; $is_admin 0;if (isset($_GET["source"])) {highlig…

齐护K210系列教程(二十七)_语音识别

语音识别 1.烧录固件和模型2.语音识别程序2.1训练并识别2.2使用本地文件语音识别 3.课程资源联系我们 1.烧录固件和模型 注&#xff1a;本应用只适用于有麦克风功能的型号&#xff1a;AIstart_pro、AIstart_掌机、AIstart_Mini, 其它型号不支持&#xff01; 机器码生成以及模…

linux中远程服务器上传输文件的10个sftp命令示例

目录 1. 如何连接到 SFTP 2. 帮助 3.检查当前工作目录 4. 使用 sftp 列出文件 远程 本地 5. 使用 sftp 上传文件 6. 使用 sftp 上传多个文件 7. 使用 sftp 下载文件 8. 在 sftp 中切换目录 远程 本地 9. 使用 sftp 创建目录 10. 使用 sftp 删除目录 11. 退出 sf…

(001)apidoc 的安装

安装 1.确定 node 和 npm 的匹配版本 node -vv10.14.1# 切换node 版本 nvm list nvm use 20.12.22.安装 apidoc。 npm install -g apidoc3.生成文档&#xff1a; apidoc -i ../ -o document/ -f ".java$"-i &#xff1a;指定扫描路径。-o&#xff1a;输出目录。…

【Linux:环境变量】

环境变量一般是指在操作系统中用来指定操作系统环境的一些参数 常见的环境变量&#xff1a; PATH 指定可执行程序的搜索路径 系统级的文件&#xff1a;/etc/bashrc 用户级文件&#xff1a;~/.bashrc ~/.bash_profile HOME 指定用户的主要工作目录&#xff08;当前用…

kettle从入门到精通 第六十一课 ETL之kettle 任务调度器,轻松使用xxl-job调用kettle中的job和trans

想真正学习或者提升自己的ETL领域知识的朋友欢迎进群&#xff0c;一起学习&#xff0c;共同进步。若二维码失效&#xff0c;公众号后台加我微信入群&#xff0c;备注kettle。 1、大家都知道kettle设计的job流程文件有个缺点&#xff1a;只能设置简单的定时任务&#xff0c;无法…

数据库-索引(高级篇)

文章目录 索引概念&#xff1f;索引演示&#xff1f;索引的优劣&#xff1f;为什么使用索引就快&#xff1f;本篇小结 更多相关内容可查看 索引概念&#xff1f; 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统…

语法分析-文法

如果对于一部文法中&#xff0c;存在至少一个句子有两个或者两个以上的语法树则该文法是二义性的。 我们可以以上面的例子进行解释&#xff0c;对于第棵个语法树&#xff0c;我们可以看到是先进行了加法运算再进行的乘法运算&#xff0c;因为需要先把EE作为整体运算完后再成为E…

上海亚商投顾:沪指低开低走 两市成交额跌破8000亿

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天震荡走低&#xff0c;三大股指尾盘均跌近1%。地产股逆势走强&#xff0c;光大嘉宝、天地源、云南城投…

幻兽帕鲁Palworld服务器手动+docker部署方法+备份迁移

目录 帕鲁部署官方文档帕鲁手动安装法手动安装steamcmd通过steamcmd安装帕鲁后端 docker容器一键部署幻兽帕鲁绿联云NAS机器部署幻兽帕鲁客户端连接附录1&#xff1a;PalServer.sh的启动项附录2&#xff1a;配置文件游戏存档保存和迁移 关于阿里云计算巢 帕鲁部署官方文档 htt…

​学者观察 | 从区块链应用创新看长安链发展——CCF区块链专委会荣誉主任斯雪明

导语 2024年1月27日&#xff0c;斯雪明教授在长安链发布三周年庆暨生态年会上发表演讲&#xff0c;认为在区块链发展过程中&#xff0c;不仅需要技术创新&#xff0c;同时需要有价值、有特色、有示范意义的应用创新。斯雪明教授介绍了国内区块链技术与应用发展的现状、趋势与挑…

【数据结构】排序(直接插入排序,希尔排序)

目录 一、排序的概念 二、常见的排序算法 三、插入排序 1.直接插入排序 1.直接插入排序实现 2.直接插入排序特性及复杂度 2.希尔排序 1.排序思路 2.希尔排序实现 3.希尔排序的特性及复杂度 一、排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#x…

python手写数字识别(PaddlePaddle框架、MNIST数据集)

python手写数字识别&#xff08;PaddlePaddle框架、MNIST数据集&#xff09; import paddle import paddle.nn.functional as F from paddle.vision.transforms import Compose, Normalizetransform Compose([Normalize(mean[127.5],std[127.5],data_formatCHW)]) # 使用tran…

[Java基础揉碎]多线程基础

多线程基础 什么是程序, 进程 什么是线程 什么是单线程,多线程 并发, 并行的概念 单核cpu来回切换, 造成貌似同时执行多个任务, 就是并发; 在我们的电脑中可能同时存在并发和并行; 怎么查看自己电脑的cpu有几核 1.资源监视器查看 2.此电脑图标右键管理- 设备管理器- 处理器…

k8s 二进制安装 详细安装步骤

目录 一 实验环境 二 操作系统初始化配置&#xff08;所有机器&#xff09; 1&#xff0c;关闭防火墙 2&#xff0c;关闭selinux 3&#xff0c;关闭swap 4, 根据规划设置主机名 5, 做域名映射 6&#xff0c;调整内核参数 7&#xff0c; 时间同步 三 部署 dock…

原生IP介绍

原生IP&#xff0c;顾名思义&#xff0c;即初始真实IP地址&#xff0c;是指从互联网服务提供商获得的IP地址&#xff0c;IP地址在互联网与用户之间直接建立联系&#xff0c;不需要经过代理服务器代理转发。 原生IP具备以下特点。 1.直接性 原生IP可以直接连接互联网&#xff…