我想使用Python中的OpenCV读取、处理并保存一个.mp4视频,但是对于某些视频,cap.get(cv2.CAP_PROP_FPS)返回了错误的FPS值。
因为代码的详细内容与问题无关,所以我不会提供完整的细节。我注意到程序输出的视频播放速度过快,当我进行调试时,决定简单地播放一下输入视频以查看它的外观。
因此,播放代码大致如下:
但是视频播放得太快了,所以我右键单击- > 属性 - > 详细信息,果然显示
另一个奇怪的问题是,当我将
所以我的问题是:
1)这里到底发生了什么?
2)是否有更好\更可靠的方法来检查视频fps和帧数?
因为代码的详细内容与问题无关,所以我不会提供完整的细节。我注意到程序输出的视频播放速度过快,当我进行调试时,决定简单地播放一下输入视频以查看它的外观。
因此,播放代码大致如下:
cap = cv2.VideoCapture(video_path)
video_fps = cap.get(cv2.CAP_PROP_FPS)
#returns 49.8
while cap.isOpened():
ret, frame = cap.read()
if ret:
cv2.imshow('a', frame)
cv2.waitkey(int(1000/video_fps))
else:
break
但是视频播放得太快了,所以我右键单击- > 属性 - > 详细信息,果然显示
每秒帧数:49
...但我知道大多数视频都是25 fps(约为49.8的一半),所以出于好奇心,我将延迟时间增加了两倍:cv2.waitkey(int(2000/video_fps))
。 突然之间,视频就以完美的速度播放了。另一个奇怪的问题是,当我将
cap.get(cv2.CAP_PROP_POS_FRAMES)
的结果除以视频长度(秒),我再次得到49.8,由于我知道长度必须正确,所以我只能猜测OpenCV获取的帧数错误(?)。所以我的问题是:
1)这里到底发生了什么?
2)是否有更好\更可靠的方法来检查视频fps和帧数?