我最近在我的mac上按照以下教程安装了OpenCV:http://www.pyimagesearch.com/2016/12/19/install-opencv-3-on-macos-with-homebrew-the-easy-way/
我写了一个读取视频文件的代码,它能够检索fps,时间戳,总共没有。在读取的每一帧上:
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中检索准确的时间戳吗?
发布于 2017-06-27 01:01:15
我不确定为什么cap.get(cv2.CAP_PROP_FRAME_COUNT)没有返回正确的时间戳。这可能是编解码器问题。Yoo可以尝试其他编解码器,如XVID、MP4V等。请注意,扩展名仅表示文件的容器,更改可能不会真正导致视频文件中的任何有意义的更改。
如果你仍然不能让它工作,使用帧计数和图像的FPS来获得时间戳。
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的示例教程。
https://stackoverflow.com/questions/44759407
复制相似问题