基于python的MP4转GIF小工具


一、使用方法

  1. mp4文件夹下放待转换的MP4,转换后生成同名的GIF文件在gif文件夹下
  2. 其他详细参数见代码
  3. 目录结构如下
根目录
  |-----gif				# 生成的gif保存位置
  |		 |
  |	     |-----1.gif	# 生成的gif文件与MP4文件同名
  |      |-----2.gif
  |      |-----...
  |
  |-----mp4				# 待转换的MP4
  |      |
  |      |-----1.mp4	# MP4文件名随便
  |      |-----2.mp4
  |      |-----...
  |
  |-----start.py		# 执行脚本

二、实现

  1. 安装依赖
pip install moviepy
  1. 创建执行文件 start.py
from moviepy.editor import *
import os


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)


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什么都干的派森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值