舔狗日记:学姐生日快到了,使用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 的库以及使用其他语言编写多线程实现。
好了,不说了,我要继续当舔狗去了~~~
舔狗日记:学姐生日快到了,使用Python把她的照片做成视频当礼物相关推荐
- js版微信测试号推送消息、生日、纪念日、网易云热评、舔狗日记【JavaScript版】保姆级教程 青龙面板做微信测试号推送生日、纪念日
文章目录 微信测试号推送消息 一.申请微信测试号 二.下载nodeJs 1.下载安装包 2.检查是否安装成功 三.设置测试号发送信息的模板 四.编写发送消息代码(必须装好nodeJs) 1.编写代码 ...
- 还在为追不到女神发愁吗?破解舔狗日记一键生成,让你轻松1秒5舔~
吾爱破解热榜出现了奇怪的东西<舔狗日记> 舔狗日记运行效果图 一键生成舔狗日记小工具,打开工具即可根据当天日期生成舔狗日记,简单快捷反超其他舔狗! 程序运行的同时,还会自动生成txt文件, ...
- 舔狗日记更新美化版源码
我们是狗,舔狗.基于上一版中的数据,重新设计了舔狗日记. 人肉对每段数据的内容.标点符号进行纠错与优化(不一定标准):并按本人理解进行了划重点标记. 接入和风天气API,获取城市.气象.气温.免费版每 ...
- 舔狗日记随机展示网站源码
最近各种日记挺火的 什么 舔狗.保安.小偷...主要是在首页使用了js,首页添加了一个"再来一段"按钮,无需刷新即可实现显示新的内容.至于舔狗日记内容,存放在index.js文件里 ...
- 我的舔狗日记网站制作
一直说本公众号是集 好货.软件.福利.教程于一体的宝藏根据地,前段时间好货软件福利已经发布不少了,玩的看的听的都挺齐全,今天出一期"舔狗日记"的网站制作的教程,我进来说的明白些,让 ...
- 钉钉自定义机器人python_使用钉钉自定义机器人发送舔狗日记[70行][python]
[Python] 纯文本查看 复制代码# -*- coding: utf-8 -*- import requests import json import time #下面是解密用到的模块 impor ...
- 舔狗日记网PHP源码
介绍: 分享一个的源码"舔狗日记" 这是一个在原基础上由我修改的源码[吐舌] 原源码只能有随机切换的功能,还有大部分ui 我把它修改了少部分,一直在学习之中! [阴险] 添加了bg ...
- 舔狗日记-土味情话-每日一言三合一小程序源码下载带安装教程
舔狗日记-土味情话-每日一言三合一小程序源码下载带安装教程 支持扩展更多小程序 1.去微信公众平台申请小程序并填好资料(https://mp.weixin.qq.com) 2.下载微信开发者工具 3. ...
- Python舔狗日记学习手册 【没想到还有第二期】
嗨害大家好鸭!我是小熊猫❤ 本小熊猫是真没想到- 舔狗日记还能出第二期- 咳咳-女神说想将网上的文章转存为PDF文档,全保存在电脑上慢慢看- 我一听,这不是我的拿手好戏嘛~ 今天真是走了好运诶~ ~ ...
最新文章
- 让DJANGO里的get_success_url定义的reverse_lazy带参数跳转
- 100c之50:到底谁在说谎
- QT使用winsocket
- CTL_CODE说明
- 虚拟化服务器内存容量与数量,虚拟化服务器内存容量与数量
- Android通过Wifi来调试你的应用
- OFFICE使用技术:让几个自选图形间距相等
- STC学习:霍尔开关器件
- The proxy server is refusing connections 怎么解决呢?
- 左程云 - 大厂刷题班 - 一种字符在左,另一种字符在右的最少交换次数
- oracle toad 价格,Toad for oracle 软件产品模块对比,方便大家选型。
- 物联网基础设施安全防护
- 从0到1万字贴心讲解单体架构到分布式架构的演变(第一篇)
- NOIP模拟赛 17.10.10
- 操作系统————应用题
- 将SSH多次登录失败的IP加入黑名单
- java drm_Linux DRM那些事-RockPI DRM
- Linux系统 Shell脚本语言
- EAST的EPTC骗局
- 数学建模论文基本格式(转载)