一、将视频抽帧成图片
【注】需要改动的只有三个变量video_path,ims_folder,target_num。其中target_num表示希望从视频中等间隔的采样出多少帧,如果你希望提取所有帧就不用在意这个参数,而改动代码中被注释掉的部分(默认是抽取所有帧)
video_path:表示待处理视频的路径
ims_folder:表示抽出的帧存放的文件夹`
import os
import cv2
def extract_frames(video_path, dst_folder, index, frame_num):
video = cv2.VideoCapture()
if not video.open(video_path):
print("can not open the video")
exit(1)
count = 0
frames_num = video.get(7)
# step = int(frames_num/frame_num) #if you want to gap
step = 1
while True:
_, frame = video.read()
if frame is None:
break
if count % step == 0:
save_path = "{}/{:>04d}.png".format(dst_folder, index)
cv2.imwrite(save_path, frame)
index += 1
count += 1
if (index==frames_num):
# if (index==frame_num): #if you want to gap
break
video.release()
if __name__ == '__main__':
video_path = './check.mp4'
ims_folder = './frames'
if not os.path.exists(ims_folder):
os.makedirs(ims_folder)
index = 0
target_num = 16
extract_frames(video_path, ims_folder, index ,target_num)
二、将图片组合成视频
ims_folder:待处理的图片文件夹
video_path:输出视频的路径
import os
from PIL import Image
import cv2
if __name__ == '__main__':
ims_folder = './frames'
video_path = './out_video.mp4'
ims_path_list = os.listdir(ims_folder)
ims_path_list.sort()
fps = 30
im_path = os.path.join(ims_folder, ims_path_list[0])
im_size = Image.open(os.path.join(ims_folder, ims_path_list[0])).size
fourcc = cv2.VideoWriter_fourcc(*"MJPG")
videoWriter = cv2.VideoWriter(video_path, fourcc, fps, im_size)
for i, im_path in enumerate(ims_path_list):
im_path = os.path.join(ims_folder, im_path)
frame = cv2.imread(im_path)
videoWriter.write(frame)
print(im_path)
videoWriter.release()
print('finish')
三、图片转成GIF图
ims_folder:待处理的图片文件夹
gif_path:输出GIF图的路径
import os
import imageio
if __name__ == '__main__':
ims_folder = './frames'
gif_path = './episode.gif'
ims_path_list = os.listdir(ims_folder)
ims_path_list.sort()
ims_list = []
for i, im_path in enumerate(ims_path_list):
im = imageio.imread(os.path.join(ims_folder, im_path))
ims_list.append(im)
imageio.mimsave(gif_path, ims_list, duration=0.4, loop=1)
版权声明:本文为weixin_42544131原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。