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

如何使用Python的cv2获取视频的第一帧与最后一帧编号

获取视频第一帧和最后一帧编号的方法

OpenCV本身没有直接提供获取第一帧和最后一帧编号的API,但可以通过以下两种方法实现:

方法一:定位首尾帧查询编号

  • 第一帧编号:将视频指针定位到起始位置(默认就是第一帧),调用cv2.CAP_PROP_POS_FRAMES即可获取当前帧编号,也就是第一帧的编号。
  • 最后一帧编号:先通过cv2.CAP_PROP_FRAME_COUNT获取总帧数,再将视频指针跳转到总帧数减1的位置(基于0的偏移),之后调用cv2.CAP_PROP_POS_FRAMES得到最后一帧编号。

示例代码:

import cv2

video_path = "你的视频路径.mp4"
cap = cv2.VideoCapture(video_path)

# 获取第一帧编号
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
first_frame_idx = cap.get(cv2.CAP_PROP_POS_FRAMES)
print(f"第一帧编号: {first_frame_idx}")

# 获取最后一帧编号
total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
cap.set(cv2.CAP_PROP_POS_FRAMES, total_frames - 1)
last_frame_idx = cap.get(cv2.CAP_PROP_POS_FRAMES)
print(f"最后一帧编号: {last_frame_idx}")

cap.release()

方法二:逐帧遍历记录编号(适合短视频)

如果视频文件不大,可以逐帧读取,直接记录第一帧和最后一帧的编号:

import cv2

video_path = "你的视频路径.mp4"
cap = cv2.VideoCapture(video_path)

first_frame_idx = None
last_frame_idx = None

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    current_idx = cap.get(cv2.CAP_PROP_POS_FRAMES)
    if first_frame_idx is None:
        first_frame_idx = current_idx
    last_frame_idx = current_idx

print(f"第一帧编号: {first_frame_idx}")
print(f"最后一帧编号: {last_frame_idx}")

cap.release()

注意事项

  • 部分特殊编码的视频可能会导致cap.set()跳转位置不准确,这种情况下优先使用遍历法。
  • cv2.CAP_PROP_POS_FRAMES返回的是浮点数,实际使用时可根据需求转为整数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:35:20