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

如何修改Python+OpenCV代码将每秒提取帧数降至12-14帧?

调整OpenCV提取视频帧的帧率至12-14帧/秒

要实现将提取帧率调整为12-14帧/秒,核心是先获取视频原始帧率,计算出需要跳过的帧间隔,再只保存符合间隔条件的帧。以下是修改后的代码及说明:

修改后的完整代码

import numpy as np
import os
from glob import glob
import cv2

def create_dir(path):
    try:
        if not os.path.exists(path):
            os.makedirs(path)
    except OSError:
        print(f"ERROR: creating directory with name {path}")

def save_frame(video_path, save_dir, target_fps=13):
    name = video_path.split("/")[-1].split(".")[0]
    save_path = os.path.join(save_dir, name)
    create_dir(save_path)
    
    cap = cv2.VideoCapture(video_path)
    # 获取视频原始帧率
    original_fps = cap.get(cv2.CAP_PROP_FPS)
    # 计算帧间隔:每original_fps/target_fps帧保存一次
    frame_interval = int(round(original_fps / target_fps))
    # 记录当前读取的帧序号
    current_frame = 0
    # 保存的帧索引
    save_idx = 0
    
    while True:
        ret, frame = cap.read()
        
        if not ret:
            cap.release()
            break
        
        # 仅当当前帧是间隔的倍数时保存
        if current_frame % frame_interval == 0:
            cv2.imwrite(f"{save_path}/{save_idx}.png", frame)
            save_idx += 1
        
        current_frame += 1

video_paths = glob("video/*")
save_dir = "frames"
# 可按需修改target_fps为12、13或14
for path in video_paths:
    save_frame(path, save_dir, target_fps=13)

关键修改说明

  • 新增target_fps参数,默认设为13(处于12-14范围内),可直接修改为12或14
  • 通过cap.get(cv2.CAP_PROP_FPS)获取视频原始帧率
  • 计算frame_interval:即每多少帧保存一次,公式为原始帧率 / 目标帧率,取整后得到间隔值
  • 新增current_frame变量记录读取的帧序号,仅当该序号是frame_interval的倍数时,才保存当前帧并递增保存索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:17:24