Python 视频拆帧,合成gif

# -*- coding: utf-8 -*-
# @Author  : LG

import cv2
from PIL import Image
import os

def video_to_frams(video_path:str, save_root:str, frame_ferquency:int=1, scale:float=1.):
    """
    视频拆帧
    :param video_path: 视频路径
    :param save_root:  图片保存目录
    :param frame_ferquency: 抽帧间隔
    :param scale: 保存图像的尺寸比例
    :return:
    """
    camera = cv2.VideoCapture(video_path)
    frame_count = int(camera.get(cv2.CAP_PROP_FRAME_COUNT))
    fps = int(camera.get(cv2.CAP_PROP_FPS))
    print('总帧数:{} | fps:{}'.format(frame_count, fps))
    for index in range(frame_count):
        res, image = camera.read()
        if index % frame_ferquency == 0:
            h, w, _ = image.shape
            image = cv2.resize(image, (int(w * scale), int(h * scale)))
            cv2.imwrite(os.path.join(save_root, '{:0>8}.jpg'.format(index)), image)
    camera.release()
    return True

def generate_gif(images_root:str, save_path:str, duration=1000):
    """
    图片合成gif
    :param images_root: 图标目录
    :param save_path:   gif保存路径
    :param duration:    间隔,默认1000=1秒
    :return:
    """
    image_paths = sorted([os.path.join(images_root, image_name) for image_name in os.listdir(images_root)])
    gif_frames = []
    for filename in image_paths:
        img = Image.open(filename)
        gif_frames.append(img)
    gif_frames[0].save(save_path, save_all=True, append_images=gif_frames[1:], duration=duration, loop=0)
    return True