py_gif制作

2024-08-29 04:44
文章标签 py 制作 gif

本文主要是介绍py_gif制作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

from PIL import Image
import moviepy.editor as mp
import os# 1. 定义函数 resize_frame,用于调整视频帧的大小
def resize_frame(frame, max_size=240):img = Image.fromarray(frame)img = img.resize((max_size, max_size), Image.Resampling.LANCZOS)  # 使用 LANCZOS 采样进行高质量缩放return img# 2. 定义函数 resize_image,用于调整图片的大小
def resize_image(image_path, max_size=240):with Image.open(image_path) as img:img = img.resize((max_size, max_size), Image.Resampling.LANCZOS)  # 使用 LANCZOS 采样进行高质量缩放return img# 3. 定义函数 video_to_gif,用于处理视频文件,将其转换为 GIF
def video_to_gif(video_path, max_size=240, num_frames=24):clip = mp.VideoFileClip(video_path)  # 加载视频文件duration = clip.duration  # 获取视频总时长timestamps = [duration * i / num_frames for i in range(num_frames)]  # 计算分割帧的时间点frames = []for t in timestamps:frame = clip.get_frame(t)  # 提取指定时间点的帧resized_frame = resize_frame(frame, max_size)  # 调整帧的大小frames.append(resized_frame)return frames# 4. 定义函数 save_gif,用于将帧列表保存为 GIF 文件
def save_gif(frames, output_path):frames[0].save(output_path, save_all=True, append_images=frames[1:], format='GIF', loop=0, duration=100, optimize=True)# 5. 定义函数 get_unique_output_path,用于生成唯一的输出文件名
def get_unique_output_path(output_path):base, ext = os.path.splitext(output_path)counter = 1new_output_path = output_pathwhile os.path.exists(new_output_path):new_output_path = f"{base}_{counter}{ext}"counter += 1return new_output_path# 6. 定义函数 convert_file,用于处理单个文件
def convert_file(file_path, output_dir, max_size=240):ext = os.path.splitext(file_path)[1].lower()  # 获取文件扩展名output_file_name = os.path.splitext(os.path.basename(file_path))[0] + '.gif'output_file_path = get_unique_output_path(os.path.join(output_dir, output_file_name))if ext in ['.jpg', '.jpeg', '.png', '.bmp']:img = resize_image(file_path, max_size)  # 如果是图片文件,调用 resize_image 函数img.save(output_file_path, format='GIF')  # 保存为 GIF 文件elif ext in ['.mp4', '.avi', '.mov', '.mkv']:frames = video_to_gif(file_path, max_size)  # 如果是视频文件,调用 video_to_gif 函数save_gif(frames, output_file_path)  # 保存为 GIF 文件else:print(f"Unsupported file type: {file_path}")  # 不支持的文件类型提示# 7. 定义函数 process_directory,用于处理目录中的所有文件
def process_directory(directory_path, output_dir, max_size=240):if not os.path.exists(output_dir):os.makedirs(output_dir)  # 确保输出目录存在for filename in os.listdir(directory_path):file_path = os.path.join(directory_path, filename)if os.path.isfile(file_path):convert_file(file_path, output_dir, max_size)  # 处理单个文件# 8. 定义函数 convert_to_gif,根据输入的路径处理单个文件或目录
def convert_to_gif(input_path, output_path, max_size=240):if not os.path.exists(output_path):os.makedirs(output_path)  # 确保输出目录存在if os.path.isfile(input_path):convert_file(input_path, output_path, max_size)  # 如果是文件,直接转换elif os.path.isdir(input_path):process_directory(input_path, output_path, max_size)  # 如果是目录,处理目录中的所有文件else:print(f"File or directory {input_path} does not exist.")  # 文件或目录不存在提示# 9. 示例使用:
input_path = "source"  # 替换为你的图片或视频文件路径或目录路径
output_path = "output_directory"  # 输出目录
convert_to_gif(input_path, output_path, max_size=240)  # 调用转换函数

在这里插入图片描述
在这里插入图片描述
微信gif限制:大小控制1m范围

这篇关于py_gif制作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116878

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

LibSVM学习(六)——easy.py和grid.py的使用

我们在“LibSVM学习(一)”中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的。其中,常用到的是easy.py和grid.py两个文件。其实,网上也有相应的说明,但很不系统,下面结合本人的经验,对使用方法做个说明。        这两个文件都要用python(可以在http://www.python.org上下载到,需要安装)和绘图工具gnup

OpenStack离线Train版安装系列—0制作yum源

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack镜像制作系列5—Linux镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作

OpenStack镜像制作系列4—Windows Server2019镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录  CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系

OpenStack镜像制作系列2—Windows7镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系列

OpenStack镜像制作系列1—环境准备

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作

CSDN:OpenStack镜像制作教程指导(全)

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录,涉及基本环境准备、常见类型操作系统的镜像制作。 让你可以从零开始安装一个操作系统,并支持个性化制作OpenStack镜像。 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows