import os
import cv2
from pathlib import Path

# 指定视频所在目录
video_dir = r'c:\video'  # 修改为你的视频目录
output_dir = r'c:\img'  # 保存图片的目录

# 每秒提取帧数
frames_per_second = 1  # 每秒提取1帧

# 确保输出目录存在
Path(output_dir).mkdir(parents=True, exist_ok=True)

# 遍历指定目录中的所有文件
for filename in os.listdir(video_dir):
    if filename.endswith(('.mp4', '.avi', '.mov', '.mkv')):  # 根据视频格式调整
        video_path = os.path.join(video_dir, filename)

        # 使用 OpenCV 打开视频文件
        cap = cv2.VideoCapture(video_path)

        # 获取视频的帧率
        fps = cap.get(cv2.CAP_PROP_FPS)
        print(f"视频 {filename} 的帧率: {fps} 帧/秒")

        frame_count = 0
        saved_frame_count = 0

        while True:
            ret, frame = cap.read()

            # 如果读取成功
            if ret:
                frame_count += 1

                # 每隔一定帧数(根据fps计算每秒提取1帧)
                if frame_count % int(fps / frames_per_second) == 0:
                    # 使用 pathlib 处理路径和文件名
                    image_filename = Path(filename).stem + f"_{saved_frame_count + 1}.jpg"
                    image_path = Path(output_dir) / image_filename

                    # 保存图片
                    cv2.imwrite(str(image_path), frame)
                    saved_frame_count += 1
                    print(f"保存图片:{image_path}")
            else:
                break  # 如果没有更多帧可读取,跳出循环

        # 释放视频对象
        cap.release()

print("所有视频的帧提取完毕。")
❤️ 转载文章请注明出处,谢谢!❤️