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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2022-03-29 28-SQL 撤销索引、表以及数据库
2022-03-29 27-SQL CREATE INDEX 语句
2022-03-29 26-SQL DEFAULT 约束
2022-03-29 25-SQL CHECK 约束
2022-03-29 24-SQL FOREIGN KEY 约束
2022-03-29 23-SQL PRIMARY KEY 约束
2018-03-29 Django models 的字段类型