【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.hqwc.cn/news/705988.html

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

相关文章

电路板维修【四】

【开关电源输出电压偏低不稳,用示波器立马锁定故障范围】:https://www.bilibili.com/video/BV1pf421D73K?vd_source3cc3c07b09206097d0d8b0aefdf07958 可以用示波器查看MOS的输出波形来查看其是否损坏: 电源芯片的供电电压来回跳变&#xf…

【Linux线程(三)】生产者消费者模型

目录 前言: 一、什么是生产者消费者模型 (一)概念 (二)321原则 1.三个关系 2. 两种角色 3.一个场所 (三)生产者消费者模型的优缺点 二、基于阻塞队列实现生产者消费者模型 &#xff0…

yolov8 模型架构轻量化 | 极致降参数量

模型轻量化加速是深度学习领域的重要研究方向,旨在减小模型的体积和计算复杂度,从而提高在资源受限设备上的运行效率,模型参数量在轻量化加速中扮演着至关重要的角色。 首先,模型参数量直接决定了模型的复杂度和存储空间需求。随…

HNU-算法设计与分析-作业6

第六次作业【分支限界法】 文章目录 第六次作业【分支限界法】<1> 算法实现题6-2 最小权顶点覆盖问题<2> 算法实现题6-6 n后问题<3> 算法实现题6-7 布线问题 <1> 算法实现题6-2 最小权顶点覆盖问题 ▲问题重述 问题描述&#xff1a; 给定一个赋权无向…

【SQL】SQL常见面试题总结(3)

目录 1、聚合函数1.1、SQL 类别高难度试卷得分的截断平均值&#xff08;较难&#xff09;1.2、统计作答次数1.3、得分不小于平均分的最低分 2、分组查询2.1、平均活跃天数和月活人数2.2、月总刷题数和日均刷题数2.3、未完成试卷数大于 1 的有效用户&#xff08;较难&#xff09…

C++ I/O流(一)——输出流

一、IO流概念 IO流可分为输入流和输出流,用于从设备(如键盘、文件、网络等)读取数据或向设备写入数据。C++标准库提供了丰富的IO流类,包括iostream、fstream、stringstream等,分别用于处理控制台输入输出、文件输入输出和字符串流操作。 读操作:输入流中读取数据到程序中…

Spring Boot | SpringBoot 中 自定义 “用户授权管理“ : 自定义“用户访问控制“、自定义“用户登录控制“

目录: 一、SpringBoot 中 自定义 "用户授权管理" ( 总体内容介绍 ) :二、 自定义 "用户访问控制" ( 通过 "HttpSecurity类" 的 authorizeRequests( )方法来实现 "自定义用户访问控制" ) :1.基础项目文件准备2.实现 "自定义身份认…

论文阅读-《MHFormer: Multi-Hypothesis Transformer for 3D Human Pose Estimation》

目录 1 摘要 2 介绍 3 相关工作 3.1 3D HPE 3.2 ViT 3.3 多假设方法 4 MHFormer 4.1 概述 4.2 准备阶段 4.2.1 多头自注意力机制&#xff08;MSA&#xff09; 4.2.2 多层感知器&#xff08;MLP&#xff09; 4.3 MHG-多假设生成 4.3.1 概述 4.3.2 详细解释&#x…

镭速助力企业加密上传大文件

在当代的数字化社会中&#xff0c;海量数据已成为我们日常生活的一个不可分割的组成部分。尤其是对于企业来说&#xff0c;如何在互联网上安全地传输庞大数据文件&#xff0c;是一个至关重要的问题。本文将深入探讨镭速技术如何利用加密手段&#xff0c;安全地将大型数据文件上…

无需MAC,也能打开Sketch文件:多平台兼容软件介绍

Sketch是专门为Macos开发的矢量图形绘制软件&#xff0c;帮助很多设计师创作了很多优秀的作品&#xff0c;其强大的功能受到很多设计师的喜爱。但是Sketch受到Macos系统的限制&#xff0c;这也让很多设计师非常苦恼。有时候他们不能在Mac打开Sketch文件&#xff0c;那么他们能在…

Spring Boot | Spring Boot 中 自定义“用户退出控制“、获取“登录用户信息“

目录: 一、SpringBoot 中 自定义 "用户授权管理" ( 总体内容介绍 ) :二、 自定义 "用户退出控制" ( 通过 "HttpSecurity类" 的 logout( )方法来实现 "自定义用户用户登录控制" ) :1.基础项目文件准备2.实现 "自定义身份认证"…

基于WTVxxx语音芯片方案在智能小家电领域的应用介绍

一、产品市场&#xff1a; WTVxxx系列语音芯片凭借其出色的性价比&#xff0c;在小家电制造业中脱颖而出&#xff0c;它在确保优异音质及全面功能的基础上&#xff0c;大幅度削减了生产成本&#xff0c;为产品在激烈的市场竞争中赢得了价格优势&#xff0c;并为制造商拓宽了盈利…