import cv2
import os
def extract_frames(video_path, output_folder, num_frames=40):
# 确保输出文件夹存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 打开视频
video_capture = cv2.VideoCapture(video_path)
if not video_capture.isOpened():
print("无法打开视频,请检查路径是否正确!")
return
total_frames = int(video_capture.get(cv2.CAP_PROP_FRAME_COUNT))
if total_frames == 0:
print("视频文件无帧,请检查文件是否损坏!")
return
frame_rate = total_frames // num_frames
print(f"总帧数: {total_frames}, 每隔 {frame_rate} 帧截取一张图片")
count = 0
saved_count = 0
while True:
ret, frame = video_capture.read()
if not ret:
break
# 每隔 frame_rate 保存
if count % frame_rate == 0 and saved_count < num_frames:
output_path = os.path.join(output_folder, f"image_{saved_count:03d}.jpg")
success = cv2.imwrite(output_path, frame)
if success:
print(f"成功保存图片: {output_path}")
saved_count += 1
else:
print(f"保存失败: {output_path}")
count += 1
video_capture.release()
print("视频帧提取完成!")
# 示例用法
video_path = r"" # 使用绝对路径
output_folder = r""# 使用绝对路径
extract_frames(video_path, output_folder, num_frames=30)