# 将视频图像分离为单帧序列 import cv2 import os import shutil def main(): # 视频路径 # TODO: 修改视频路径为自己的视频路径,每次指定一个视频 path = r'/video/20260115/4_ch26_20260113145353.mp4' output_rootpath = r'D:\code\water_turbidity_det\tem_test' # 输出路径的根目录 # 抽帧间隔 interval = 20 # 我们将图像输出到根目录下的子目录中,子目录和视频名称相同 img_base = os.path.basename(path).split('.')[0] imgs_output_path = os.path.join(output_rootpath, img_base) # 视频名称不要有.符号混淆后缀名 # 清理上次抽帧结果 if os.path.exists(imgs_output_path): shutil.rmtree(imgs_output_path) # 创建路径 if not os.path.exists(imgs_output_path): os.makedirs(imgs_output_path) # 打开视频文件 cap = cv2.VideoCapture(path) # 检查视频是否成功打开 if not cap.isOpened(): raise Exception('错误:无法打开视频文件。') frame_count = 0 save_count = 0 while True: ret, frame = cap.read() if not ret: break img_save_path = os.path.join(imgs_output_path,f"{frame_count:06d}.jpg") # 按照抽帧间隔保存图片 if frame_count % interval == 0: cv2.imwrite(img_save_path, frame) save_count+=1 frame_count += 1 print(f"已处理{frame_count}帧, 保存至{img_save_path}") print(f"处理完成,共处理{frame_count}帧, 保存{save_count}帧") if __name__ == '__main__': main()