一、使用方法
- mp4文件夹下放待转换的MP4,转换后生成同名的GIF文件在gif文件夹下
- 其他详细参数见代码
- 目录结构如下
根目录
|-----gif # 生成的gif保存位置
| |
| |-----1.gif # 生成的gif文件与MP4文件同名
| |-----2.gif
| |-----...
|
|-----mp4 # 待转换的MP4
| |
| |-----1.mp4 # MP4文件名随便
| |-----2.mp4
| |-----...
|
|-----start.py # 执行脚本
二、实现
from moviepy.editor import *
class Mp42GifOp(object):
def __init__(self,
resize=None, # 修改尺寸,接收元组或者0-1之间的值,比如 (300, 200) 的意思是尺寸转为宽300高200,0.5 的意思是尺寸缩放到一半
fps=None, # 抽帧,接收整数,比如 20 的意思就是将mp4生成每秒 20 帧的gif
clip=None # 视频裁剪,接收元组,比如 (3, 10) 的意思是裁剪 3-10 秒之间的视频生成gif
):
self.resize = resize
self.fps = fps
self.clip = clip
def mp42gif(self, mp4path, gifpath):
vfc = VideoFileClip(mp4path)
if self.clip:
vfc = vfc.subclip(*self.clip)
if self.resize:
vfc = vfc.resize(self.resize)
clip = (vfc)
if self.fps:
clip.write_gif(gifpath, fps=self.fps)
else:
clip.write_gif(gifpath)
print("{} to {} complete!".format(mp4path, gifpath))
if __name__ == '__main__':
# 一些生成参数,根据实际情况调整 -------
resize = None
fps = 9
clip = None
# ---------------------------------
# mp4放这个文件夹下
mp4_dir = './mp4'
# gif生成在这个文件夹下
gif_dir = './gif'
# 初始化
m2g = Mp42GifOp(resize, fps, clip)
# 获取全部MP4路径
mp4_path_list = [os.path.join(mp4_dir, file) for file in os.listdir(mp4_dir)]
# 批量转换
for idx, mp4_path in enumerate(mp4_path_list):
print("---- 当前进度:{} / {},当前转换文件:{} ----".format(idx+1, len(mp4_path_list), mp4_path))
# 生成gif路径
gifname = mp4_path.replace('\\', '/').rsplit('/', 1)[1].rsplit('.', 1)[0]
gif_path = os.path.join(gif_dir, '{}.{}'.format(gifname, 'gif'))
# 转换
m2g.mp42gif(mp4_path, gif_path)
版权声明:本文为weixin_43721000原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。