从文字到视频:Python实现全程转换(附源码)

文摘   科技   2024-10-08 19:50   北京  

ISEE小语


    一天不联系,一周不联系,一个月不联系,不知不觉中,我们都成了过去。

乡伴有家



    Python的强大且灵活,在日常工作中表现游刃有余,它在数据处理、图像处理和媒体文件生成方面有着广泛的应用。本文将介绍如何使用Python将文字转换为PNG图片,再将图片合成为GIF动态图,最后生成MP4视频,实现全程转换。

    挺有意思的,有兴趣的同学可以试试看!



环境:

Pycharm

Python 3.9.16



安装:

pip install 以下三方库

imageio==2.34.1pillow==10.3.0




实现功能:

    主要包括三大块: 

    一、将文字转换为PNG图片

    二、将PNG图片合成为GIF动态图

    三、将GIF动态图转换为MP4视频


文字转换为PNG图片

    我们需要将文字转换为PNG图片,这可以通过Pillow库来实现。

    有一点需要注意,在实现过程中使用的中文,会有乱码问题,所以需要提前下载一个字体,小栈使用的是simhei.ttf

    这个字体可随便,只要有即可,小栈使用的后面也会分享出来。

from PIL import Image, ImageDraw, ImageFontimport textwrap

def create_image(text, width=400, height=200, font_size=20, font_path='SimHei.ttf', text_color='black', bg_color='white', output_path='output.png'): # 创建空白图像 image = Image.new('RGB', (width, height), color=bg_color) draw = ImageDraw.Draw(image)
# 使用特定字体 font = ImageFont.truetype(font_path, font_size)
# 自动换行 wrapped_text = textwrap.fill(text, width=30) # 30 是每行的字符数
# 计算文本的边界框 text_bbox = draw.textbbox((0, 0), wrapped_text, font=font)
# 计算文本位置(居中) x = (width - (text_bbox[2] - text_bbox[0])) / 2 # 右侧 - 左侧 y = (height - (text_bbox[3] - text_bbox[1])) / 2 # 下侧 - 上侧
# 在图像上绘制文本 draw.text((x, y), wrapped_text, font=font, fill=text_color)
# 保存图片 image.save(output_path)

# 使用示例font_size = 70colors = [ {'text_color': 'purple', 'bg_color': 'lightyellow', 'text_': '文字……'}, {'text_color': 'black', 'bg_color': 'white', 'text_': '生成'}, {'text_color': 'magenta', 'bg_color': 'lightblue', 'text_': 'PNG图片'}, {'text_color': 'black', 'bg_color': 'white', 'text_': '再生成'}, {'text_color': 'green', 'bg_color': 'lightcoral', 'text_': 'GIF动态图'}, {'text_color': 'black', 'bg_color': 'white', 'text_': '最后生成'}, {'text_color': 'black', 'bg_color': 'beige', 'text_': 'MP4视频!'}]
for index, color in enumerate(colors): bg_color = color.get('bg_color') text_color = color.get('text_color') text_ = color.get('text_') create_image(text_, width=1080, height=1920, font_size=font_size, text_color=text_color, bg_color=bg_color, output_path=f'../pngs/{index}.png')

(左右滑动查看完整代码)

结果:


PNG图片合成为GIF动态图

    png图片合成为GIF动态图这部分需要分成两个阶段:

    第一:加载文字生成的图片

    第二:创建GIF动态图

    首先,加载文字生成的图片,因为创建GIF动态图需要的是图片的对象,所以独立出来,方便使用。

import os
from PIL import Image
# 加载图片def load_images(folder_path): images = [] for filename in os.listdir(folder_path): if filename.endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')): # 支持的文件格式 img_path = os.path.join(folder_path, filename)            img = Image.open(img_path)  # 打开图片文件 images.append(img) # 添加到列表中 return images

folder_path = '../pngs'images = load_images(folder_path)
print(images)

(左右滑动查看完整代码)

结果:

[<PIL.PngImagePlugin.PngImageFile image mode=RGB size=1080x1920 at 0x2AAFE90A4C0>, <PIL.PngImagePlugin.PngImageFile image mode=RGB size=1080x1920 at 0x2AAFE90AEE0>, <PIL.PngImagePlugin.PngImageFile image mode=RGB size=1080x1920 at 0x2AAFF0E04C0>, <PIL.PngImagePlugin.PngImageFile image mode=RGB size=1080x1920 at 0x2AAFF0F04C0>, <PIL.PngImagePlugin.PngImageFile image mode=RGB size=1080x1920 at 0x2AAFF0F0430>, <PIL.PngImagePlugin.PngImageFile image mode=RGB size=1080x1920 at 0x2AAFF0F0EB0>, <PIL.PngImagePlugin.PngImageFile image mode=RGB size=1080x1920 at 0x2AAFF0F0F10>]

(左右滑动查看完整代码)

    

    然后,创建GIF动态图

# 创建 GIF 动态图def create_gif(images, output_path='output.gif', duration=500):    # 保存为 GIF 动态图    images[0].save(output_path, save_all=True, append_images=images[1:], duration=duration, loop=0)

# 使用示例create_gif(images, output_path='images.gif', duration=1000)

(左右滑动查看完整代码)


    最后,我们看到一下结果:




GIF动态图转换为MP4视频

    我们将生成的GIF动态图转换为MP4视频。

# -*- coding: utf-8 -*-import imageio
# 读取GIF文件gif_file = '../png_to_gif/images.gif'with imageio.get_reader(gif_file, 'GIF') as reader: # 提取GIF中的帧 frames = [frame for frame in reader]
# 设置MP4的输出路径mp4_file = 'images.mp4'
# 设置希望的MP4时长(秒)desired_length = 6
# 计算需要的fpsnum_frames = len(frames)fps = num_frames / desired_length
# 保存为MP4格式imageio.mimsave(mp4_file, frames, fps=fps)

(左右滑动查看完整代码)

结果:

    


总结

    

    通过以上步骤,我们成功地将文字转换为PNG图片,之后将这些图片合成为GIF动态图,最后将GIF转换为MP4视频。这个过程展示了Python在处理多媒体文件方面的强大能力。

    Python的Pillow、imageio库为我们提供了便捷的图像和视频处理功能,使我们能够轻松实现从文字到视频的全程转换。希望这篇文章对你有所帮助!

    本次分享只限于实现功能,其无美观和装饰,并且可能也会有些小BUG,但不影响功能,有兴趣的同学可拓展!

    源码已经整理,有需要可下载!

点个“”和“在看”,是对小栈最大的支持!

后台回复“to_mp4”即可获取源码!

乡伴有家

     

文章就分享到这儿,喜欢就点个吧!



推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章