# 将视频图像分离为单帧序列
import cv2
import os
import shutil
def main():
    # 视频路径
    # TODO: 修改视频路径为自己的视频路径,每次指定一个视频
    path = r'D:\code\water_turbidity_det\video\20260107\4_ch26_20260105141754.mp4'
    output_rootpath = r'D:\code\water_turbidity_det\frame_data'  # 输出路径的根目录
    # 抽帧间隔
    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()

