# -*- 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