【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.xdnf.cn/news/1424960.html

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

相关文章

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

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

一次tomcat闪退处理

双击tomcat目录下bin目录中startup.bat 在我的电脑上是一闪而过,不能正常地启动tomcat软件 以记事本打开startup.bat文件,在文件的结尾处加上pause 然后再双击该bat执行,此时窗口就不会关闭,并会将错误信息打印在提示框中 可能是…

skimage图像处理(五)

多数量图像处理(批量化处理) 多数量图片内读取指定图片 首先导入skimage.io模块并将其简称为io,导入skimage库中的data_dir模块,用于获取示例图像的目录路径 import skimage.io as io from skimage import data_dir 构建…

Spring Boot 自动配置-响应式编程-022

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform…

海狐外卖多商户O2O商城系统前端技术实现与探索

摘要: 随着外卖市场的快速发展,多商户O2O商城系统成为餐饮行业数字化转型的重要工具。本文基于海狐外卖多商户O2O商城系统的前端技术实现,探讨了前端技术在高并发、多端适配、自定义装修等方面的应用与挑战,并分享了系统前端架构…

IT行业现状与探索未来发展趋势

​​​​​​​ 我眼中的IT行业现状与未来趋势 随着技术的不断进步,IT行业已成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链,这些技术正在重塑我们的生活和工作方式。你眼中IT行业的现状及未来发展趋势是…

综合性练习-验证码

1. 验证码案例 随着安全性的要求越来越高,目前项目中很多都使用了验证码,验证码的形式也是多种多样,更复杂的图形验证码和⾏为验证码已经成为了更流⾏的趋势. 2. 需求 界面如下图所示 1. 页面生成验证码 2. 输入验证码,点击提交,验证用户输入验证码是否正确,正确则进行页面跳…

MySQL第一次作业(基本操作)

目录 一、登陆数据库 二、创建数据库zoo 三、修改数据库zoo字符集为gbk 四、选择当前数据库为zoo 五、查看创建数据库zoo信息 六、删除数据库zoo 一、登陆数据库 指令: mysql -u root -p 二、创建数据库zoo 指令: create database zoo; 三、修改数…

2024新零售行业多元化用工报告

来源:君润人力 近期历史回顾:

Springboot开发 -- Postman 调试 session 验证 接口

当我们在开发Spring Boot应用时,经常会遇到带有Session验证的接口,这些接口需要用户先登录并获取到Session ID(或称为cookie中的JSESSIONID),然后在后续的请求中携带这个Session ID来保持会话状态。下面我将以一个实际…

STM32 FSMC接口控制SRAM(芯片型号:IS61WV102416BLL)

目录 概述 1 硬件介绍 1.1 SRAM的电路 1.2 IS61WV102416ALL芯片 2 STM32Cube配置工程 2.1 配置FSMC 2.2 其他参数配置 2.3 生成工程 3 SRAM的功能验证 3.1 编写测试函数 3.1.1 写数据函数 3.1.2 读数据函数 3.2 完整代码 4 测试 测试代码下载地址: s…

代码随想录——二叉树的最大深度(Leetcode104)

题目链接 层序遍历 当遍历到二叉树每一层最后一个节点时,depth /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* …

UART 16550 IP核使用详解

AXI UART 16550是Xilinx FPGA中提供的一个UART IP核,它允许通过AXI接口与UART设备进行通信。本文描述了如何使用Xilinx的Vivado Design Suite环境中的工具来定制和生成 UART 16550 IP核,以及如何配置和使用该IP核。 1 UART 16550 IP核的使用 以下是针对…

【算法】网络图中的dfs

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、单词搜索二、黄金矿工三、不同路径 |||四、图像渲染五、岛屿数量六、岛屿的最大面积七、被围绕的区域…

SSD与HDD仍然共存,并将长期共存!

在技术快速迭代的今天,固态硬盘(SSD)与传统硬盘(HDD)之间的竞争一直是存储领域的一大焦点。 扩展阅读: HDD回暖于2024,与SSD决战于2028 HDD的烦恼:HAMR会让SMR黯然失色吗&#xff…

Github 2024-05-12 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Filament: 加速Laravel开发的完美起点 创建周期:1410 天开发语言:PHP协议类型:MIT LicenseStar数量:12228 个Fork数量:1990 次关…

电路元件伏安特性的测量

实验目的: 1. 掌握线性电阻、非线性电阻元件伏安特性的测量方法; 2. 掌握伏安测量法中测量样点的选择和绘制曲线的方法; 3. 学习直读式仪表和直流稳压电源等设备的使用方法。 实验原理、内容及步骤: 电路元件的特性一般可用该元…

前端简史之崛起:Router迁鼎

引 💡 Ajax 的出现,带来了 jQuery 时代;Node技术的发展,带来了前端工程化进阶;如果说前面二者是带来技术的革命,那么前端路由方案的多样化则带来了用户体验的升级以及项目管理的优化。 课程简介 《前端简史…

train_gpt2_fp32.cu - main

llm.c/test_gpt2_fp32.cu at master karpathy/llm.c (github.com) 源码 // ---------------------------------------------------------------------------- // main training loop int main(int argc, char *argv[]) {// read in the (optional) command line argumentsco…

C语言性能深度剖析:从底层优化到高级技巧及实战案例分析

C语言以其接近硬件的特性、卓越的性能和灵活性,在系统编程、嵌入式开发和高性能计算等领域中占据着举足轻重的地位。本文将深入探讨C语言性能优化的各个方面,包括底层原理、编译器优化、内存管理和高级编程技巧,并结合多个代码案例来具体分析…