You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用cv2 VideoCapture从指定起始帧按每分钟1张的频率提取视频帧

自定义视频帧提取实现代码

你可以直接调用OpenCV原生的set方法跳转到指定起始帧,不需要逐帧读取跳过前面的内容,效率很高,完整实现代码如下:

import cv2

# 可配置参数
video_path = r'C:\my_folder\my_video.mp4'
save_dir = r'C:\my_folder\pictures/'
start_frame = 2700  # 起始提取帧
frame_interval = 1800  # 间隔帧数
extract_count = 30  # 需要提取的总图片数

cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
    print("视频打开失败")
    exit()

# 直接跳转到起始帧位置
cap.set(cv2.CAP_PROP_POS_FRAMES, start_frame)

current_frame = start_frame
saved_count = 0

while cap.isOpened() and saved_count < extract_count:
    ret, frame = cap.read()
    if not ret:
        break
    # 每间隔指定帧数保存
    if (current_frame - start_frame) % frame_interval == 0:
        cv2.imwrite(f"{save_dir}{current_frame}.jpg", frame)
        saved_count += 1
    current_frame += 1

cap.release()
cv2.destroyAllWindows()

代码说明

  • 直接通过cap.set(cv2.CAP_PROP_POS_FRAMES, 起始帧)定位到提取起点,避免逐帧跳过前面的内容,不需要提前裁剪视频
  • 三个可配置参数可以根据需求灵活调整:
    • 要设置结束帧而非提取数量的话,把循环条件改成current_frame < end_frame即可
    • 间隔帧数如果要对应每分钟提取的话,直接用视频帧率 * 60计算即可,适配不同帧率的视频
  • 提取到指定数量的图片后会自动终止循环,不会多余读取后续视频内容

内容的提问来源于stack exchange,提问作者Kriszti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:27:02