import cv2 #读取切分文件 def readQiFenWenJian(filename): with open(filename, "r", encoding='UTF-8')as f: res_list = f.readlines() print("读取到的切分文件") print(res_list) print(len(res_list)) zuizhong_res_list = [] for i in range(2,len(res_list)): if res_list[i] != '\n': zuizhong_res_list.append(res_list[i]) print(zuizhong_res_list) print(len(zuizhong_res_list)) return zuizhong_res_list # 读取一个视频文件,从帧列表中,开始算后续帧,第一个帧为0 def handleOneVideo(video_file,zhen_list): for i in range(0, len(zhen_list)): yihang_shifenmiao = [] yihangshuju = zhen_list[i] print("一行数据:") print(yihangshuju) yihang_list = yihangshuju.split(" ") print("yihang列表:") print(yihang_list) for one in yihang_list: if ":" in one: yihang_shifenmiao.append(one) print("yihang时分秒帧-列表:") print(yihang_shifenmiao) start_shifenmiao = yihang_shifenmiao[0] start_shifenmiao_list = start_shifenmiao.split(":") print("start_shifenmiao_list:") print(start_shifenmiao_list) end_shifenmiao = yihang_shifenmiao[1] end_shifenmiao_list = end_shifenmiao.split(":") print("end_shifenmiao_list:") print(end_shifenmiao_list) START_HOUR = int(start_shifenmiao_list[0]) # 开始小时 START_MIN = int(start_shifenmiao_list[1]) # 开始分钟 START_SECOND = int(start_shifenmiao_list[2]) # 开始秒数 START_TIME = START_HOUR * 3600 + START_MIN * 60 + START_SECOND # 设置开始时间(单位秒) END_HOUR = int(end_shifenmiao_list[0]) # 结束小时 END_MIN = int(end_shifenmiao_list[1]) # 结束分钟 END_SECOND = int(end_shifenmiao_list[2]) # 结束秒 END_TIME = END_HOUR * 3600 + END_MIN * 60 + END_SECOND # 设置结束时间(单位秒) video = video_file cap = cv2.VideoCapture(video) # 读取视频 FPS = cap.get(cv2.CAP_PROP_FPS) print("帧率:") print(FPS) size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) print("大小:") print(size) TOTAL_FRAME = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # 获取视频总帧数 print("总帧数:") print(TOTAL_FRAME) frameToStart = START_TIME * FPS+int(start_shifenmiao_list[3]) # 开始帧 = 开始时间*帧率 + 多余帧 根据达芬奇切割点自动算出开始帧 print("开始帧:") print(frameToStart) frametoStop = END_TIME * FPS + int(end_shifenmiao_list[2]) # 结束帧 = 结束时间*帧率 + 多余帧 根据达芬奇切割点自动算出开始帧 print("结束帧:") print(frametoStop) cishu = i # 分批写入视频文件 videoWriter = cv2.VideoWriter( r'%s_%s.mp4' % (video, cishu), cv2.VideoWriter_fourcc(*'mp4v'), FPS, size) cap.set(cv2.CAP_PROP_POS_FRAMES, frameToStart) # 设置读取的位置,从第几帧开始读取视频 COUNT = frameToStart while True: success, frame = cap.read() if success: COUNT += 1 if COUNT <= frametoStop and COUNT > frameToStart: # 选取起始帧 print('correct= ', COUNT) videoWriter.write(frame) # print('mistake= ', COUNT) if COUNT > frametoStop: break print('end') if __name__ == '__main__': qiefenwenjian = r"C:\4k\苏幕遮-小点.edl" video_file =r"C:\4k\ceshi\daichuli\苏幕遮.mp4" zhen_list = readQiFenWenJian(filename=qiefenwenjian) handleOneVideo(video_file, zhen_list)