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)