"""
将视频转换为GIF
- 提供一个工具将视频文件转换成动画GIF。支持多种视频格式,转换质量可配置。
"""
import os
from moviepy.editor import VideoFileClip
# 定义视频转换质量的基类
class ConversionQuality:
def __init__(self, scale, fps, program):
self.scale = scale
self.fps = fps
self.program = program
# 高质量转换,需要imageio模块
class HighestQuality(ConversionQuality):
def __init__(self):
super().__init__(1.0, 12, "imageio")
# 中等质量转换
class MediumQuality(ConversionQuality):
def __init__(self):
super().__init__(0.6, 12, "ffmpeg")
# 低质量转换
class LowQuality(ConversionQuality):
def __init__(self):
super().__init__(0.2, 8, "ffmpeg")
# 视频转换为GIF的函数
def convert2gif(path, quality=MediumQuality(), out_filename=None):
try:
# 分离文件名和扩展名
filename, _ = os.path.splitext(path)
# 开始转换视频到GIF
with VideoFileClip(path).resize(quality.scale) as clip:
# 如果没有指定输出文件名,则默认使用原文件名加上.gif后缀
if not out_filename:
out_filename = f"{filename}.gif"
# 写入GIF文件
clip.write_gif(out_filename, fps=quality.fps, program=quality.program)
return out_filename
except Exception as e:
# 异常处理,打印出错误信息
print(f"转换过程中出现错误:{e}")
return None
# 主执行入口
if __name__ == '__main__':
try:
# 请求用户输入文件名
file = input("请输入视频文件名(包括路径): ")
# 调用转换函数
result = convert2gif(file)
# 如果转换成功,打印输出位置
if result:
print(f"GIF已生成,位置:{result}")
except Exception as e:
# 捕获主流程中的异常
print(f"执行过程中出现错误:{e}")