【Python快速入门和实践018】Python常用脚本-图片合成视频

news2024/11/26 18:28:25

一、功能介绍

        这段代码定义了一个名为 create_video_from_images 的函数,用于将一个文件夹中的图像序列合并成一个视频文件。以下是该函数的主要功能和组成部分的分析:

函数参数

  • input_folder: 包含图像文件的文件夹路径。
  • output_file: 输出视频文件的完整路径。
  • frame_rate: 视频的帧率,默认为30 FPS(每秒帧数)。
  • resolution: 输出视频的分辨率(宽度,高度),默认为None,表示使用第一张图片的分辨率。
  • codec: 视频编码格式,默认为 'XVID'。

主要步骤

  1. 获取图像文件列表

    • 使用 os.listdir 和列表推导式来获取所有支持格式的图像文件名。
    • 对文件名进行排序以保持播放顺序一致。
  2. 确定视频分辨率

    • 读取第一个图像文件来获取其尺寸。
    • 如果用户指定了分辨率,则使用指定的分辨率;否则使用第一张图片的分辨率。
  3. 初始化视频写入器

    • 使用 cv2.VideoWriter_fourcc 创建编码器。
    • 创建 cv2.VideoWriter 实例,设置输出文件路径、编码器、帧率和分辨率。
  4. 处理图像文件

    • 使用 tqdm 显示进度条,遍历所有图像文件。
    • 读取每个图像文件。
    • 如果需要,调整图像大小以匹配输出分辨率。
    • 将图像写入视频文件。
    • 使用 time.sleep 控制每帧之间的间隔,以匹配帧率。
  5. 释放资源

    • 调用 out.release() 释放视频写入器资源。
    • 输出完成信息。

使用示例

  • 定义输入文件夹路径、输出文件路径、帧率和分辨率。
  • 调用 create_video_from_images 函数,传入上述参数。

二、代码

import cv2
import os
import time
from tqdm import tqdm


def create_video_from_images(input_folder, output_file, frame_rate=30, resolution=None, codec='XVID'):
    # 获取图片文件列表
    images = [img for img in os.listdir(input_folder) if img.endswith((".png", ".jpg", ".jpeg", ".bmp", ".tiff"))]
    images.sort()  # 按照文件名排序

    if not images:
        print("未找到图片文件。")
        return

    # 读取第一张图片以获取宽高
    first_image_path = os.path.join(input_folder, images[0])
    first_image = cv2.imread(first_image_path)

    # 如果用户指定了分辨率,则调整第一张图片的大小
    if resolution:
        width, height = resolution
    else:
        height, width, _ = first_image.shape  # 使用第一张图片的分辨率

    # 初始化视频写入器
    fourcc = cv2.VideoWriter_fourcc(*codec)
    out = cv2.VideoWriter(output_file, fourcc, frame_rate, (width, height))

    frame_duration = 1 / frame_rate  # 每帧之间的时间间隔

    for image in tqdm(images, desc="Processing images"):
        image_path = os.path.join(input_folder, image)
        frame = cv2.imread(image_path)

        # 如果图片的大小与输出分辨率不同,则调整大小
        if resolution:
            frame = cv2.resize(frame, (width, height))

        out.write(frame)
        time.sleep(frame_duration)  # 控制帧之间的间隔

    out.release()
    print(f"视频已保存到 {output_file}")


# 使用示例
input_folder = 'imgs_chouzhen'  # 输入文件夹路径
output_file = 'imgs2video/video/output_video4.avi'  # 输出视频文件路径
frame_rate = 24  # 设置帧率
resolution = (640, 480)  # 设置输出分辨率 (宽, 高);如果为 None 则使用原始图片分辨率

create_video_from_images(input_folder, output_file, frame_rate, resolution)

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

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

相关文章

马斯克发布Grok-2:实时获取X资讯、多模态支持,性能追平GPT-4o

在LLM(大型语言模型)竞争中,马斯克的XAI无疑是一个强劲的对手。继宣布斥资数十亿美元购买英伟达H100 GPU用于训练自家模型后,XAI迅速推出了其最新的大模型——Grok-2。这一模型不仅在技术性能上对标OpenAI、Anthropic等主流大模型…

Hystrix——服务容错保护库

熔断机制是解决微服务架构中因等待出现故障的依赖方响应而形成任务挤压,最终导致自身服务瘫痪的一种机制,它的功能类似电路的保险丝,其目的是为了阻断故障,从而保护系统稳定性。Hystrix作为Spring Cloud中实现了熔断机制的组件&am…

(亲测有效)SpringBoot项目集成腾讯云COS对象存储(2)

接上文(亲测有效)SpringBoot项目集成腾讯云COS对象存储(1)-CSDN博客 目录 3、通用能力类 文件下载 测试 3、通用能力类 文件下载 官方文档介绍了2种文件下载方式。一种是直接下载 COS 的文件到后端服务器(适合服务…

前端Mac解决localhost冲突问题!!!

1、报错提示: 运行项目的时候遇到了如下的问题,导致我项目运行不起来,查阅了一下资料发现是loaclhost有误 2、ping一下localhost 先打开终端,在终端输入命令:(我输入这个命令的时候能ping通,当…

Android 使用`layer-list`打造精美的背景

引言 在 Android 开发中,layer-list 是一种强大的工具,可以帮助我们创建复杂的背景图形,🎨 这种方法可以大大提升应用的视觉效果。作为一名Android开发,理解和掌握 layer-list 的使用不仅可以让我们在 UI 设计上更加灵…

C++竞赛初阶L1-11-第五单元-for循环(25~26课)519: T454430 人口增长问题

题目内容 假设目前的世界人口有 x 亿,按照每年 0.1% 的增长速度,n 年后将有多少人? 输入格式 一行两个正整数 x 和 n,之间有一个空格。其中,1≤x≤100,1≤n≤100。 输出格式 一行一个数,表示答案。以亿…

【C++ 面试 - 基础题】每日 3 题(十八)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

对象的初始化和清理(构造和析构)

目录 一. 前言 二. 构造函数和析构函数的语法 三. 构造函数的分类和调用 四. 构造函数的调用规则 五. 深拷贝和浅拷贝(面试常考) 六. 初始化列表 一. 前言 任何事物都需要有一个初始化的过程,例如手机,我们在买来使用的时候手…

win10 上安装部署WSA, 在win10上运行安卓程序

windows上跑安卓程序, 多年前用过蓝叠bluestacks安卓模拟器 甚至还在上面跑过微信 后来听说在bluestacks上用微信, 可能会被封, 就没有后来了 最近折腾在windows上如何投屏,主要是将ios无线投到win10电脑上(安卓win10直…

免费文档翻译导出怎么弄?5个文档翻译器替你解决

在日常的工作与学习中,我们时常会遇到需要查阅或撰写跨语言文档的情况。然而面对这些专业性强、词汇量大的文件,逐字逐句地手动翻译不仅耗时费力,还可能因理解偏差导致信息失真。 幸运的是,如今有不少免费文档翻译软件横空出世&a…

LDR6020双盲插便携显示器方案:重塑连接体验的新标杆

在数字化高速发展的今天,便携显示器已成为商务人士、游戏爱好者及远程教育学习者的得力助手。然而,传统便携显示器在接口兼容性与易用性方面常存在诸多不便,如接口方向区分困难、信号类型不匹配等问题。为了彻底解决这些痛点,LDR6…

基于springboot物流管理系统

TOC springboot208基于springboot物流管理系统 第1章 绪论 1.1 研究背景 互联网时代不仅仅是通过各种各样的电脑进行网络连接的时代,也包含了移动终端连接互联网进行复杂处理的一些事情。传统的互联网时代一般泛指就是PC端,也就是电脑互联网时代&…

记录一次 Redis 优化发送数据(使用管道批量传送)

一 项目背景 此前的项目中,鉴于客户方服务器的安全配置对 MQ 中间件有所限制,我们只得采用 Redis 的 list 作为简易的 MQ 来传送报文数据。然而,近段时间客户关闭了相关端口,导致大量数据积压,需要进行补发。在补发过程…

Unity Obfuscator 使用说明

一、Assembly - Settings 1. 核心Unity程序集(Assembly-CSharp) Obfuscate Assembly-CSharp: 开启 这是Unity的核心程序集,所有没有存储在程序集定义文件(assembly definition file)中的代码都会被存储在这里。大多数…

排序算法介绍和sort函数应用(明明的随机数,奖学金)

排序算法介绍sort函数应用——[NOIP2006 普及组] 明明的随机数和[NOIP2007 普及组] 奖学金 1.排序算法介绍和常用排序方法复杂度2.sort函数应用2.1.[NOIP2006 普及组] 明明的随机数题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示2.1.1.题意解析2.1.2.AC代码 2.2.[NO…

win的netassist TCP测试工具和Linux的nc工具使用

写在前面 有时工作中我们编写一些tcp相关的程序,而netassist就是这样一款辅助我们进行TCP功能测试的工具,你可以从这里下载。 1:netassist使用 我们需要一个server程序,可以参考这篇文章,启动server后,就…

【python】Python如何调用外部命令,subprocess模块的详细解读以及应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

7za解压缩工具

1、unzip无法解压缩大于4G的文件 从Windows平台通过MobaXterm上传一个大小约为5G的zip文件到AutoDL Linux系统上,使用unzip解压过程中出现如下错误: 从网上搜索了一下相关资料,发现是当前的unzip版本不支持4G以上的压缩包。要么升级到最新…

N8 - 使用Word2Vec进行文本分类

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 N2 构建词典1. 导入数据2. 设置分词器3. 去除标点和停用词4. 文本迭代器5. 构建词典6. 文本数字化 N3 NLP中的数据集构建1. Dataset2. DataLoader N8 使用…

当代最杰出的思想家姓名学大师颜廷利:当学历与文凭突破了道德底线。。。

在当今社会,文凭和学历被频繁提及,并似乎成为了衡量个人价值的重要尺度。然而,当这些学术凭证超越了道德的底线时,整个社会便开始笼罩在谎言和欺骗的阴影之下。善良与纯真,如同无助的羔羊,在利益的屠刀下黯…