首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么OpenCV cap.get(cv2.CAP_PROP_POS_MSEC)只返回0?

为什么OpenCV cap.get(cv2.CAP_PROP_POS_MSEC)只返回0?
EN

Stack Overflow用户
提问于 2017-06-26 20:09:59
回答 1查看 12.3K关注 0票数 3

我最近在我的mac上按照以下教程安装了OpenCV:http://www.pyimagesearch.com/2016/12/19/install-opencv-3-on-macos-with-homebrew-the-easy-way/

我写了一个读取视频文件的代码,它能够检索fps,时间戳,总共没有。在读取的每一帧上:

代码语言:javascript
运行
复制
cap = cv2.VideoCapture(particle_name + video_file_type)

while True:
    time = cap.get(cv2.CAP_PROP_POS_MSEC)
    fps = cap.get(cv2.CAP_PROP_FPS)
    total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)

    print(time, fps, total_frames)

    ret, frame = cap.read()
    cv2.imshow('frame', frame)

cap.release()
cv2.destroyAllWindows()

我在视频A、.mov格式、Motion JPEG Video (dmb1)编解码器上试用了此代码。和视频B,.avi格式,运动JPEG视频(MJPG)编解码器。

对于视频A和视频B,输出的fps和total_frames都是常量。然而,对于视频A,时间逐渐增加(这是应该的),但对于视频B,时间保持恒定为0。

我认为可能是视频的格式导致了这种差异,所以我将视频B的格式改为.mov,同时保留相同的编解码器,但是问题仍然存在。

我可以知道如何从视频B中检索准确的时间戳吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 01:01:15

我不确定为什么cap.get(cv2.CAP_PROP_FRAME_COUNT)没有返回正确的时间戳。这可能是编解码器问题。Yoo可以尝试其他编解码器,如XVID、MP4V等。请注意,扩展名仅表示文件的容器,更改可能不会真正导致视频文件中的任何有意义的更改。

如果你仍然不能让它工作,使用帧计数和图像的FPS来获得时间戳。

代码语言:javascript
运行
复制
fps = cap.get(cv2.CV_CAP_PROP_FPS)
frame_count = 0
while True:
   frame_count++
   time = float(frame_count)/fps

编辑:您可以使用ffmpeg更改编解码器。这里有一个Macs https://www.macxdvd.com/mac-dvd-video-converter-how-to/ffmpeg-avi-to-mp4-free.htm的示例教程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44759407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档