如何修改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
相关产品推荐
相关产品推荐

