脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - 基于Python实现合并多张图片转成mp4视频

基于Python实现合并多张图片转成mp4视频

2023-04-10 15:40逃逸的卡路里 Python

随着现代科技飞速发展和人们提升视觉上体验,利用图片生成视频的方法,确实为工作或者提升生活体验感做了很多成功案例,本文就来介绍一下具体实现方法吧

前言

随着现代科技飞速发展和人们提升视觉上体验,利用图片生成视频的方法,确实为工作或者提升生活体验感做了很多成功案例:

1、简单的幻灯片演示,如展示旅游照片、产品展示等;

2、改编图片动画,如口红试色、时尚大片中的效果;

3、制作日记式的视频内容,将一段长时间内的照片串在一起,如婚礼纪实、Baby成长记录等;

4、制作信息图表,如将各种数据图表整合在一起以便展示和诠释数据。

以上只是一些普遍运用的例子,实际上还有更广泛的使用场景,取决于制作者的目的和创意。

下面咱们用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 将多张图片合并成一个视频文件。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 颜色模式的格式后添加到视频帧中。最终输出一个合并了所有目标图片的视频文件。

三、优化改进一下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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代码实现图片转成视频的使用,而imageio中提供了大量能使我们快速便捷地处理数据的函数和方法。

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

到此这篇关于基于Python实现合并多张图片转成mp4视频的文章就介绍到这了,更多相关Python合并图片转成视频内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/u014740628/article/details/129989776

延伸 · 阅读

精彩推荐
  • PythonPython全栈之递归函数

    Python全栈之递归函数

    这篇文章主要为大家介绍了Python递归函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助...

    熬夜泡枸杞11972022-03-10
  • Python基于python log取对数详解

    基于python log取对数详解

    今天小编就为大家分享一篇基于python log取对数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Z_shsf8692021-03-02
  • Pythonpython实现线程池的方法

    python实现线程池的方法

    这篇文章主要介绍了python实现线程池的方法,实例分析了Python线程池的原理与相关实现技巧,需要的朋友可以参考下 ...

    liujian06167962020-07-18
  • PythonDjango 查询数据库返回JSON的实现

    Django 查询数据库返回JSON的实现

    和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式,本文就来介绍一下,感兴趣的小伙伴们可以参考一下...

    林中静月下仙3722021-12-17
  • PythonPython元组常见操作示例

    Python元组常见操作示例

    这篇文章主要介绍了Python元组常见操作,结合实例形式分析了Python元组的概念、功能、常见定义、获取、遍历等相关操作技巧与注意事项,需要的朋友可以参...

    deniro_li5212021-05-30
  • Python在Django中进行用户注册和邮箱验证的方法

    在Django中进行用户注册和邮箱验证的方法

    这篇文章主要介绍了在Django中进行用户注册和邮箱验证的方法的相关资料,需要的朋友可以参考下 ...

    hbnn9632020-08-22
  • Python利用Python对中国500强排行榜数据进行可视化分析

    利用Python对中国500强排行榜数据进行可视化分析

    这篇文章主要介绍了利用Python对中国500强排行榜数据进行可视化分析,从不同角度去对数据进行统计分析,可视化展示,下文详细内容介绍需要的小伙伴可...

    Python研究者4182023-02-08
  • Pythonpython 读写txt文件 json文件的实现方法

    python 读写txt文件 json文件的实现方法

    下面小编就为大家带来一篇python 读写、创建 文件的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    脚本之家6782020-09-10