• 视频拆帧与组帧


    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))
    
  • 相关阅读:
    [LeetCode] 21. 合并两个有序链表
    [LeetCode] 5081. 步进数
    [LeetCode] 104. 二叉树的最大深度
    [LeetCode] 70. 爬楼梯
    Java开发手册1.5读书笔记
    [LeetCode] 509. 斐波那契数
    设计模式之UML类图以及类间关系
    [LeetCode] 50. Pow(x, n)
    [LeetCode] 206. 反转链表
    [LeetCode] 119. 杨辉三角 II
  • 原文地址:https://www.cnblogs.com/xytpai/p/14089606.html
Copyright © 2020-2023  润新知