python frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) # 获取视频的总帧数 fps = video.get(cv2.CAP_PROP_FPS) # 获取当前视频帧率 如何通过中甲帧数截图
时间: 2024-09-14 08:17:13 浏览: 57
在Python中,如果你想按照视频帧数的间隔来定期截图,你可以结合视频的总帧数(`frame_count`)和帧率(`fps`)计算出应该抓取的时间戳。以下是一个示例,展示如何每隔固定帧数截图:
```python
import cv2
import time
# 打开视频文件
video_path = 'your_video.mp4' # 替换为你的视频路径
video = cv2.VideoCapture(video_path)
# 获取视频的总帧数和帧率
frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
fps = video.get(cv2.CAP_PROP_FPS)
# 计算每秒内的帧数,用于设置间隔
interval_frames = int(frame_count / fps)
# 设定截图的间隔帧数(例如每隔10帧)
frame_interval = 10
# 定义存储截图的列表
screenshots = []
while True:
# 遍历每一帧,直到达到最后一帧
for i in range(0, frame_count, interval_frames):
# 计算对应的时间戳,单位是秒
timestamp = i / fps
# 设置视频读取位置到当前帧
video.set(cv2.CAP_PROP_POS_FRAMES, i)
# 读取一帧
ret, frame = video.read()
# 检查帧是否读取成功
if not ret:
break
# 截图并添加到列表
screenshot_name = f'screenshot_{i}.jpg'
cv2.imwrite(screenshot_name, frame)
screenshots.append((timestamp, screenshot_name))
# 控制输出频率,防止打印过多信息
if i % (frame_interval * 10) == 0:
print(f"{timestamp:.2f}s: 截取了帧 {i}")
# 判断是否到达视频结尾
if not ret:
break
# 关闭视频流
video.release()
# 打印所有截图的信息
for i, (timestamp, screenshot_name) in enumerate(screenshots):
print(f"截图{i+1}: 时间={timestamp:.2f}, 文件名={screenshot_name}")
阅读全文