import numpy as np import cv2 import os import time def get_video_list(path): video_ext = [".mp4", ".avi",".MP4"] video_names = [] for maindir, subdir, file_name_list in os.walk(path): for filename in file_name_list: apath = os.path.join(maindir, filename) ext = os.path.splitext(apath)[1] if ext in video_ext: video_names.append(apath) return video_names def save_seg_video(video_name,frameToStart,frametoStop,videoWriter): cap = cv2.VideoCapture(video_name) count = 0 while True: success, frame = cap.read() # count += 1 if success: print('frametoStop:',frametoStop,'frameToStart:',frameToStart) print('correct2= ', count) count += 1 if count <= frametoStop and count > frameToStart: # 选取起始帧 print('correct= ', count) videoWriter.write(frame) if not success or count >= frametoStop: break print('end') def get_seg_video(video_file,video_save_path,dertTime): # 检查路径 print("frame image save path:{}".format(video_save_path)) os.makedirs(video_save_path, exist_ok=True) if os.path.isdir(video_file): files = get_video_list(video_file) else: files = [video_file] files.sort() video_num = len(files) for num in range(video_num): # 视频名字 video_name = files[num] video_basename = os.path.basename(video_name).split('.')[0] cap = cv2.VideoCapture(video_name) #帧率 fps = cap.get(cv2.CAP_PROP_FPS) fps = int(fps) print(fps) # 获得原视频尺寸 size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) # 获取视频总帧数 total_frame = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # 每段帧率 dertF = dertTime * fps print('dertF:',dertF) #帧率分段 n = total_frame/dertF print(int(n)) for i in range(int(n) + 1): video_name_save = video_save_path + '/' + video_basename + '_' +str(i) + '.avi' videoWriter =cv2.VideoWriter(video_name_save,cv2.VideoWriter_fourcc('X','V','I','D'),fps,size) start_time = i * dertF if i == int(n) + 1: stop_time = total_frame else: stop_time = start_time + dertF print(video_name) save_seg_video(video_name=video_name,frameToStart=start_time,frametoStop=stop_time,videoWriter=videoWriter) if __name__ == '__main__': # 每个视频的时长(单位秒) dertTime = 5 video = "dataset/video" video_save = 'dataset/video_seg_5s' get_seg_video(video_file=video,video_save_path=video_save,dertTime=dertTime)