使用cv2将视频转换为帧时如何调整每秒帧率(FPS)?
问题解答
问题1:关于帧率的默认设置说明
你当前的代码没有做任何帧率限制,拿到的24FPS是源视频2017_08_31_0121.mp4本身的固有属性,不存在全局默认帧率的说法:
- 不同视频的帧率由文件压制时的参数决定,24FPS是电影、流媒体内容的常用帧率,25FPS是PAL制式广播电视的常用帧率,30/60FPS是高帧率内容的常用参数
- 如果你需要读取源视频的自带帧率,可以调用OpenCV内置API获取:
vidcap.get(cv2.CAP_PROP_FPS)
问题2:自定义10FPS抽帧的修改方案
实现逻辑为:先读取源视频的原始帧率,计算对应的抽帧间隔,仅保存符合间隔要求的帧即可,修改后的代码如下:
import cv2 import math # 自定义目标帧率,可按需修改 TARGET_FPS = 10 vidcap = cv2.VideoCapture('/content/2017_08_31_0121.mp4') # 获取源视频原始帧率 original_fps = vidcap.get(cv2.CAP_PROP_FPS) # 计算抽帧间隔 frame_interval = original_fps / TARGET_FPS success, image = vidcap.read() count = 0 save_count = 0 while success: # 仅当前帧符合抽帧间隔要求时才保存,避免非整数帧率导致的累计误差 if math.floor(count / frame_interval) > math.floor((count - 1) / frame_interval): if save_count < 10: id = f'00{save_count}' elif save_count < 100: id = f'0{save_count}' else: id = save_count cv2.imwrite(f"./new_frames/frame{id}.jpg", image) save_count += 1 success, image = vidcap.read() count += 1
修改后你只需要调整TARGET_FPS的数值,就可以输出对应帧率的帧文件,10FPS参数下21秒的视频最终会得到约210帧。
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

