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

【办公类-107-02】20250719视频MP4转gif(削减MB)

背景需求

最近在写第五届智慧项目结题(一共3篇)写的昏天黑地,日以继夜。

我自己《基于“AI技术”的幼儿园教学资源开发和运用》提到了AI绘画、AI视频和AI编程。

为了更好的展示AI编程的状态,我在WORD里面插入了MP4转gif的动图。

【教学类-75-04】20241023世界名画-《蒙娜丽莎》AI视频五秒(通义万相)(二)+_UIBOT上传AI视频的GIF和文字_ai修复世界名画教案-CSDN博客文章浏览阅读951次,点赞29次,收藏3次。【教学类-75-04】20241023世界名画-《蒙娜丽莎》AI视频五秒(通义万相)(二)+_UIBOT上传AI视频的GIF和文字_ai修复世界名画教案 https://blog.csdn.net/reasonsummer/article/details/143188233?spm=1011.2415.3001.5331

之前的《蒙娜丽莎》每张5秒,我都用格式工厂MP4转gif。也是5秒。

但是这次有一段90秒的录屏,转格式后还是只显示5秒

所以还是求助deepseek写了Python代码,

'''
结题报告WORD 插入 MP4转gif动画(高清原图)
deepseek、阿夏
20250718
'''import os
from moviepy.editor import VideoFileClip
def convert_mp4_to_gif(input_folder, output_folder=None, scale=None, fps=10):"""将指定文件夹中的所有MP4文件转换为GIF动画参数:input_folder: 包含MP4文件的输入文件夹路径output_folder: 输出GIF的文件夹路径(默认与输入文件夹相同)scale: 缩放比例(例如0.5表示缩小一半)fps: 输出GIF的帧率"""if output_folder is None:output_folder = input_folderos.makedirs(output_folder, exist_ok=True)for filename in os.listdir(input_folder):if filename.lower().endswith('.mp4'):input_path = os.path.join(input_folder, filename)output_path = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}.gif")print(f"正在转换: {filename}...")try:clip = VideoFileClip(input_path)if scale is not None:clip = clip.resize(scale)# 确保转换完整视频,不截断clip.write_gif(output_path, fps=fps, program='ffmpeg')print(f"转换完成: {output_path}")except Exception as e:print(f"转换 {filename} 时出错: {str(e)}")finally:if 'clip' in locals():clip.close()if __name__ == "__main__":path = r'C:\Users\jg2yXRZ\OneDrive\桌面\新建文件夹 (2)\1'input_folder = pathconvert_mp4_to_gif(input_folder, scale=0.5, fps=10)

但是把十几个gif一一插入WORD保存后,一保存,就发先整个WORD有210MB!太大了

一看,一个gif视频就占了82MB

前几年上传课题结题报告,WORD或pdf只能控制在10MB以内。今年用了新平台,发现200MB可以上传。但是视频大,专家评审下载就慢

我知道结题报告最好用pdf,确保文字图片不移动,但是本次我非常想用WORD来凸显“视频gif动态效果”。所以只能压缩插入的图片和gif视频的质量。

一、压缩WORD图片

压缩全部图片后,缩小了50MB

同样方法缩小gif图片(视频),MB没有变化,还是172MB

也就是说MP4转gif动画,属于视频样式,无法在WORD里压缩。

二、Python压缩帧率

'''
结题报告WORD 插入 MP4转gif动画(降低帧率)
deepseek、阿夏
20250718
'''import os
from moviepy.editor import VideoFileClipdef convert_mp4_to_gif(input_folder, output_folder=None, scale=None, fps=10, colors=256):"""将指定文件夹中的所有MP4文件转换为GIF动画(优化大小版本)参数:input_folder: 包含MP4文件的输入文件夹路径output_folder: 输出GIF的文件夹路径(默认与输入文件夹相同)scale: 缩放比例(例如0.5表示缩小一半)fps: 输出GIF的帧率(降低帧率可减小文件大小)colors: 颜色数量(减少颜色数量可显著减小文件大小)"""if output_folder is None:output_folder = input_folderos.makedirs(output_folder, exist_ok=True)for filename in os.listdir(input_folder):if filename.lower().endswith('.mp4'):input_path = os.path.join(input_folder, filename)output_path = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}.gif")print(f"正在转换: {filename}...")try:clip = VideoFileClip(input_path)if scale is not None:clip = clip.resize(scale)# 添加优化参数clip.write_gif(output_path,fps=fps,program='ffmpeg',colors=colors,  # 减少颜色数量opt='optimizeplus'  # 优化选项)print(f"转换完成: {output_path}")except Exception as e:print(f"转换 {filename} 时出错: {str(e)}")finally:if 'clip' in locals():clip.close()if __name__ == "__main__":path = r'C:\Users\jg2yXRZ\OneDrive\桌面\新建文件夹 (2)\5'input_folder = pathconvert_mp4_to_gif(input_folder, scale=0.5, fps=8,  # 进一步降低帧率colors=128  # 减少颜色数量)

关键参数是这个fps

 

60秒,fps=8

60秒,fps=6

60秒,fps=5

60秒,最后我选了fps=4

因为这个时候的gif,82.5MB砍半33.2MB,已经模糊了,只能看个大概内容。

但是CSDN还是放不了超过5MB的gif,所以为了展示效果,我继续砍帧率。

最后我选了60秒,fps=1,还是8.47MB>5BM

最终砍到60秒,fps=0.5,总算4.28MB<5MB

gif效果——这里展示的“图 7 Python模拟下载图片的过程”。

噪点很多、很模糊,但是还是能看到Python模拟点击下载的步骤。

同样方式再做一个图8 Python模拟点击Photoshop制作三色图

16秒,fps=2,4.90MB(最大化)

WORD最终大小

经过压缩,220MB的WORD,降到了86MB,就这样上传吧。

http://www.dtcms.com/a/287273.html

相关文章:

  • 【Project】kafka+flume+davinci广告点击实时分析系统
  • LangGraph教程6:LangGraph工作流人机交互
  • 黄山派lvgl8学习笔记(1)画一个一个全白的背景
  • 【C++】入门阶段
  • Spring Cloud Gateway与Envoy Sidecar在微服务请求路由中的架构设计分享
  • 最新版vscode 连接ubuntu 18.04 保姆级教程
  • 前端面试专栏-工程化:27.工程化实践(CI/CD、代码规范)
  • Jenkins 实现项目的构建和发布
  • Rust Web 全栈开发(十):编写服务器端 Web 应用
  • 触发器的创建
  • Django母婴商城项目实践(七)- 首页数据业务视图
  • QT窗口(8)-QFileDiag
  • 大模型 Function Call 的实现步骤及示例详解
  • MySQL EXPLAIN深度解析:优化SQL性能的核心利器
  • iOS 通知机制及底层原理
  • Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的对话系统多轮交互优化与用户体验提升(351)
  • 【设计模式C#】状态模式(用于解决解耦多种状态之间的交互)
  • 微服务学习(六)之分布式事务
  • 微服务的编程测评系统-网关-身份认证-redis-jwt
  • Spring Boot 与微服务详细总结
  • Error:HTTP Status 405 - HTTP method POST is not supported by this URL
  • Javascript进程和线程通信
  • Uniapp之键盘弹窗
  • day43 CNN及Grad-CAM实战——以Intel Image Classification为例
  • JAVA中的Collections 类
  • [论文阅读] 人工智能 + 软件工程 | 强化学习在软件工程中的全景扫描:从应用到未来
  • ABP VNext + Temporal:分布式工作流与 Saga
  • 当OT遇见IT:Apache IoTDB如何用“时序空间一体化“破解工业物联网数据孤岛困局
  • 时序数据库选型实战:Apache IoTDB技术深度解析
  • Bicep入门篇