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

