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))