• python opencv 持续点选开始帧,结束帧,切割视频成几个小段


    import os
    
    import cv2
    import time
    
    
    
    def on_mouse(event,x,y, flag, para):
        global status_value, start_frame, end_frame, times
        if event == cv2.EVENT_LBUTTONDOWN:  # 鼠标左键点击
            times += 1
    
            status_value = not status_value
            if status_value:
                start_frame = frame_number
                # print(f"Start frame: {start_frame}")
            else:
                split_flag = 'd' + str(int(times/2))
                # print('split_flag: ', split_flag)
                end_frame = frame_number
                # print(f"End frame: {end_frame}")
                extract_and_save_video(split_flag,para[0], para[1])
    
    
    def extract_and_save_video(split_flag, folder, video_name):
        now_time = time.time()
        print('now_time:', now_time)
        out = cv2.VideoWriter('{}_{}_{}.avi'.format(video_name, folder, split_flag), cv2.VideoWriter.fourcc(*'XVID'), fps, size)
        print('start frame: {}'.format(start_frame))
        print('end frame: {}'.format(end_frame))
        for i in range(start_frame, end_frame + 1):
            cap.set(cv2.CAP_PROP_POS_FRAMES, i)
            ret, frame = cap.read()
            if ret:
                out.write(frame)
        out.release()
        print('video saved *********************')
        cv2.waitKey(5000)
    
    
    videos_folder = 'E:\\河南深丛信息科技\\datasets\\record_night'
    
    action_folders = os.listdir(videos_folder)[:2]
    for folder in action_folders:
        video_folder = os.path.join(videos_folder, folder)
        video_files = os.listdir(video_folder)
        for video_file in video_files:
            video_name = video_file.split('.mkv')[0]
            video_file_path = os.path.join(video_folder, video_file)
            print('video file path:', video_file_path)
            cap = cv2.VideoCapture(video_file_path)
            fps = cap.get(cv2.CAP_PROP_FPS)
            print('fps: {}'.format(fps))
            frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
            print("frame_count:", frame_count)
    
            status_value = 0
            # 初始化变量
            start_frame = None
            end_frame = None
            frame_number = 0
            times = 0
            event = 0
    
            size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
                    int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    
            while True:
                ret, frame = cap.read()
                if not ret:
                    break
    
                frame_number += 1
    
                cv2.imshow('Video', frame)
    
                cv2.setMouseCallback('Video', on_mouse, [folder, video_name])
    
                if frame_number == 1:
                    cv2.waitKey(3000)
    
                if cv2.waitKey(50) & 0xFF == ord('q'):
                    break
    
            cap.release()
            cv2.destroyAllWindows()
            print(video_file + '  is done......\n')
            cv2.waitKey(3000)
  • 相关阅读:
    电商API接口与数据分析、数据挖掘的结合
    C++开发面试之——C++11新特性20问
    网络中使用最多的图片格式有哪些
    Appium 全新 2.0 全新跨平台生态,版本特性抢鲜体验!
    Postgresql进程卡住无法退出原因和解决方法
    HTML5、CSS3面试题(二)
    Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):4、Maven项目转换与pom.xml配置
    Python高效内存访问,memoryview这个神器你值得拥有!
    Redis初步学习
    这17个小工具,让我的开发效率提升了50%
  • 原文地址:https://blog.csdn.net/DeepCBW/article/details/139932258