import os
import cv2
def capture_frames(video_path, output_folder, interval=3):
# 获取视频文件名(不包括扩展名)
video_name = os.path.splitext(os.path.basename(video_path))[0]
# 在输出文件夹中创建以视频名命名的子文件夹
video_output_folder = os.path.join(output_folder, video_name)
os.makedirs(video_output_folder, exist_ok=True)
# 读取视频文件
video = cv2.VideoCapture(video_path)
# 获取视频的帧数
total_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
# 遍历视频的每一帧
for i in range(total_frames):
# 读取当前帧
ret, frame = video.read()
# 如果当前帧存在且是间隔帧,则保存为图片
if ret and i % interval == 0:
output_path = os.path.join(video_output_folder, f"frame_{i}.png")
cv2.imwrite(output_path, frame)
print(f'frame_{i}.png')
# 检查图片大小,如果超过1MB,降低图片质量
while os.path.getsize(output_path) > 1024 * 1024:
frame = cv2.resize(frame, None, fx=0.9, fy=0.9)
cv2.imwrite(output_path, frame)
# 释放视频资源
video.release()
if __name__ == "__main__":
video_path = "C:\\Users\\24117\\Pictures\\Camera Roll\\3.mp4" # 请替换为实际的视频文件路径
output_folder = "C:\\Users\\24117\\Pictures\\Camera Roll\\video_output_folder"
capture_frames(video_path, output_folder)
环境需求Python Opencv库
如果没有open cv库,键盘win+r ,输入pip install Opencv-Python安装