【办公类-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