OpenCV 提供的视频帧率和帧数计数不正确。

3
我想使用Python中的OpenCV读取、处理并保存一个.mp4视频,但是对于某些视频,cap.get(cv2.CAP_PROP_FPS)返回了错误的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和帧数?

1
你能够统计读取的图像数量并与属性进行比较吗?也许一个图像由多个帧组成? - Micka
1个回答

1

我知道这个帖子已经很老了,但是仍然有人遇到这个问题,似乎这是一个持续存在的问题:https://github.com/opencv/opencv/issues/16821。我也遇到了同样的问题,使用.mp4格式时出现了问题,解决方法是导出为.mov格式。不确定为什么.mp4会出现问题,但在github问题中似乎是一个普遍趋势。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接