視訊拆幀與組幀
阿新 • • 發佈:2020-12-05
video2frame
import os import cv2 import argparse def video2frame(path, out_dir, interval=1, zfill=None): cap = cv2.VideoCapture(path) if zfill is None: zfill = len(str(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))//interval)) frame = 0 count = 0 while True: success, img = cap.read() if success: if frame % interval == 0: cv2.imencode('.jpg', img)[1].tofile( os.path.join(out_dir, str(count).zfill(zfill)+'.jpg')) count += 1 frame += 1 else: break print('total:' + str(count)) if __name__ == '__main__': parser = argparse.ArgumentParser(description='video to frame') parser.add_argument('--s', help='source video file') parser.add_argument('--t', help='target dir', default='.') parser.add_argument('--i', help='time interval', default=1) parser.add_argument('--z', help='zfill', default=0) args = parser.parse_args() if int(args.z)>0: video2frame(args.s, args.t, int(args.i), int(args.z)) else: video2frame(args.s, args.t, int(args.i))
frame2video
import os import cv2 import argparse from PIL import Image import numpy as np def frame2video(im_dir, video_file, fps): im_list = os.listdir(im_dir) im_list.sort(key=lambda x: int(x.split('.')[0])) img = Image.open(os.path.join(im_dir, im_list[0])) videoWriter = cv2.VideoWriter(video_file, cv2.VideoWriter_fourcc('m','p','4', 'v'), fps, (img.size[0], img.size[1]), True) for img_file in im_list: im_name = os.path.join(im_dir, img_file) frame = cv2.imdecode(np.fromfile(im_name, dtype=np.uint8), -1) videoWriter.write(frame) videoWriter.release() print('done') if __name__ == '__main__': parser = argparse.ArgumentParser(description='frame to video') parser.add_argument('--s', help='source image dir', default='.') parser.add_argument('--t', help='target video') parser.add_argument('--fps', help='fps', default=30) args = parser.parse_args() frame2video(args.s, args.t, int(args.fps))