Spaces:
Running
Running
File size: 2,184 Bytes
d015578 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import os
import cv2
def main():
import argparse
pars = argparse.ArgumentParser(description='Frames to video converter')
pars.add_argument('frames', type=str, help='Frames directory')
pars.add_argument('vidname', type=str, help='Output video name')
pars.add_argument('-o', '--outpath', type=str, default=None, help='Save record')
pars.add_argument('--fps', type=int, default=30, help='Frames per second')
pars.add_argument('--shape', nargs='+', type=int, help='Visualizer shape (W,H)')
args = pars.parse_args()
if args.shape:
if len(args.shape) != 2:
raise ValueError('--shape requires two values: width and height. Ej: --shape 256 256')
else:
video_shape = tuple(args.shape)
else:
video_shape = None
frames2video(args.frames, args.vidname, video_path=args.outpath, video_shape=video_shape, fps=args.fps)
def frames2video(frames_path, video_name, video_path=None, video_shape=None, fps=30):
frames_names = sorted(os.listdir(frames_path))
if video_path is None:
video_path = frames_path + '/vid_out/'
if not os.path.exists(video_path):
os.makedirs(video_path)
video_file = os.path.join(video_path, video_name + '.mp4')
if video_shape is None:
video_writer = None
else:
vid_w, vid_h = video_shape
video_writer = cv2.VideoWriter(video_file, cv2.VideoWriter_fourcc(*'MP4V'), fps, (vid_w, vid_h))
for frame_name in frames_names:
if frame_name.split('.')[-1] not in ['jpg', 'jpeg', 'png', 'tif', 'tiff', 'eps', 'bmp', 'gif']:
print('File %s format doesnt match with an image ' % frame_name)
continue
frame_file = os.path.join(frames_path, frame_name)
frame = cv2.imread(frame_file)
if video_writer is None:
vid_h, vid_w = frame.shape[:2]
video_writer = cv2.VideoWriter(video_file, cv2.VideoWriter_fourcc(*'MP4V'), fps, (vid_w, vid_h))
if frame.shape[:2] != (vid_h, vid_w):
frame = cv2.resize(frame, (vid_w, vid_h))
video_writer.write(frame)
video_writer.release()
if __name__ == '__main__':
main()
|