当前位置: 首页 > news >正文

舔狗日记:学姐生日快到了,使用Python把她的照片做成视频当礼物

舔狗日记1

  • 前言
  • 一、需要调入的模块
  • 二、实现合并多张图片转成 mp4 视频
  • 三、优化改进一下
  • 总结

前言

这不是学姐生日快到了,于是我学了一手使用Python来把学姐的照片生成为视频,到时候给她一个惊喜!


好了先不舔了,下面分享一下用python代码实现多张图片合成MP4视频为实例,做下详细代码讲解。

一、需要调入的模块

1、imageio模块

Python模块imageio是一个用于读取和写入图像及视频数据的库。它支持多种格式,并且可以使用NumPy数组进行操作。

以下是一些关键的函数:

  • imageio.imread():从文件中读取图像数据并返回一个NumPy数组。
  • imageio.imwrite():将一个NumPy数组写入到文件。
  • imageio.mimsave():将多个图像帧组成的列表保存为动画文件(例如GIF)。
  • imageio.get_reader():获取一个对象,该对象用于逐帧读取给定文件中的动画图像。
  • imageio.get_writer():获取一个对象,该对象用于逐帧写入动画图像到指定文件中。

使用这些函数,可以方便地读取、写入和处理各种图像及视频数据格式。

2、Image 模块

PIL 是 Python 中常用的图像处理库,Image 模块是其中的一个重要模块,它提供了各种图像操作和处理的函数。

以下是 Image 模块中一些主要函数及其作用:

  • open(): 打开并返回指定文件路径的图像对象。
  • fromarray(): 将 numpy 数组或 PIL 图像对象转换为 PIL 图像对象。
  • new(): 创建一个新的指定大小、模式和颜色的空白图像对象。
  • save(): 将图像保存为指定格式的文件。
  • resize(): 修改图像的大小。
  • crop(): 裁剪图像的指定区域。
  • rotate(): 旋转图像指定角度。
  • show(): 显示图像。

除此之外,还有很多其他常用的函数,例如调整亮度和对比度、应用滤镜等等。这些函数可以帮助我们实现各种复杂的图像处理任务,并且通常也会有一些参数可用于进一步调节函数的行为,具体使用时可以参考相关文档。

二、实现合并多张图片转成 mp4 视频

使用 Python 中的画图库 PIL(Python Imaging Library)或者 OpenCV 读取每一张图片。

使用第三方库 imageio 将多张图片合并成一个视频文件。

配置生成视频文件的视频帧数、视频尺寸和视频播放速度等参数。

以下是一个简单的示例代码:

import os
import imageio
from PIL import Image# 设置生成的视频文件名和路径
filename = 'output.mp4'
filepath = os.path.join(os.getcwd(), filename)# 读取所有 PNG 图片
images = []
for file_name in sorted(os.listdir()):if file_name.endswith('.png'):images.append(Image.open(file_name))# 将图片转换为视频
fps = 30  # 每秒钟30帧
with imageio.get_writer(filepath, fps=fps) as video:for image in images:frame = image.convert('RGB')video.append_data(frame)

实现原理,读取所有需要合并的图片文件,将它们存储到一个列表中。然后使用 imageio 库的 get_writer() 函数创建一个视频写入器对象,并设置视频的播放速度(fps)。之后在循环过程中,读取列表中的每一张图片,在将其转换为带有 RGB 颜色模式的格式后添加到视频帧中。最终输出一个合并了所有目标图片的视频文件。

三、优化改进一下

将程序并行化进行处理,加快处理多张图片的速度。注:以下方法可能并非最优方法

import os
import concurrent.futures
import imageio
from PIL import Image# 设置生成的视频文件名和路径
filename = "output.mp4"
filepath = os.path.join(os.getcwd(), filename)def process_image(file_name):if file_name.endswith(".png"):image = Image.open(file_name)return image.convert("RGB")with concurrent.futures.ThreadPoolExecutor() as executor:# 寻找所有 png 文件image_files = [file for file in os.listdir() if file.endswith(".png")]# 利用线程池并行处理图像images = list(executor.map(process_image, image_files))# 将图片转换为视频文件
fps = 30  # 每秒钟30帧
with imageio.get_writer(filepath, fps=fps) as video:for image in images:video.append_data(image)

这里使用 concurrent.futures 库中的 ThreadPoolExecutor 对象进行并行处理。首先在主线程中寻找读取当前工作目录下的所有需要合并的 PNG 图片,创建任务列表。然后将任务提交给线程池中并保证能够快速、异步地处理目标文件。在处理完所有 PNG 图片之后,将其存储到一个 images 中的列表中并最后转换成视频。

对于刚学习Python或者正在学习Python的小伙伴,我准备了2023最新的Python学习资料,直接在文章最后的名片自取哦!包括学习遇到的问题,都可以问的。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了python代码实现图片转成视频的使用,而imageio中提供了大量能使我们快速便捷地处理数据的函数和方法。

注意,由于 GIL 的存在,Python 的多线程并不总能带来真正的性能提升。如果性能是关键,请考虑使用更优秀的 Python 解释器、使用类似 joblib 的库以及使用其他语言编写多线程实现。

好了,不说了,我要继续当舔狗去了~~~

http://www.lryc.cn/news/58928.html

相关文章:

  • 从《移动互联网应用程序(App)收集使用个人信息自评估指南》看个人信息保护着力点
  • 电脑0x0000001A蓝屏错误怎么U盘重装系统教学
  • Day939.如何小步安全地升级数据库框架 -系统重构实战
  • 2023 年十大 API 管理趋势
  • 计算机网络微课堂1-3节
  • [Eigen中文文档] Array类与元素操作
  • python学习,全球有哪些特别好的社区推荐呢?
  • LC-1042. 不邻接植花(四色问题(染色法))
  • python实战应用讲解-【numpy科学计算】scikits-learn模块(附python示例代码)
  • 大数据开发必备面试题Spark篇01
  • SpringBoot整合xxl-job详细教程
  • 【MySQL--04】数据类型
  • git 将其它分支的文件检出到工作区
  • 人工智能的最大危险是什么?
  • rk3568点亮E-ink
  • 如何将Springboot项目通过IDEA打包成jar包,并且转换成可执行文件
  • 总结:网卡
  • Java这么卷,还有前景吗?
  • 后端简易定时任务框架选择(Python/Go)--gocron
  • 【GStreamer学习】之GStreamer基础教程
  • 各类Round-Robin总结,含Verilog实现
  • 《软件设计师-知识点》
  • mysql 同义词_数据库中的同义词synonym
  • Nacos共享配置
  • 数据结构——排序(4)
  • C++13:搜索二叉树
  • 【从零开始学Skynet】基础篇(五):简易聊天室
  • HDU - 2089 不要62(数位DP)
  • 网络安全与防御
  • 【DT】蒸脱机的结构和工作原理