| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- # 将视频图像分离为单帧序列
- 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()
|