【发布时间】:2018-07-27 14:30:19
【问题描述】:
使用 OpenCV 在视频文件中寻找随机点似乎比在 Windows Media Player 或 VLC 等媒体播放器中慢得多。我正在尝试使用VideoCapture 在以 H264(或 MPEG-4 AVC(part10))编码的视频文件上寻找不同的位置,寻找该位置所需的时间似乎与查询的帧数成正比。这是我正在尝试做的一个小代码示例:
import cv2
cap = cv2.VideoCapture('example_file')
frame_positions = [200, 400, 8000, 200000]
for frame_position in frame_positions:
cap.set(cv2.cv.CV_CAP_PROP_FRAMES, frame_position)
img = cap.read()
cv2.imshow('window', img)
cv2.waitKey(0)
从上方显示图像的感知时间与帧数成正比。也就是说,第 200 帧和第 400 帧几乎没有任何延迟,8000 帧有些明显的滞后,但 200000 帧几乎需要半分钟。
为什么 OpenCV 不能像 Windows Media Player 那样“快速”搜索?会不会是 OpenCV 在搜索时没有正确使用 FFMPEG 编解码器?使用编解码器的一些替代配置从源构建 OpenCV 会有所帮助吗?如果是这样,谁能告诉我配置可能是什么?
我只在 Windows 7 和 10 PC 上测试过这个,OpenCV 二进制文件原样,系统路径中有相关的 FFMPEG DLL。
另一个观察结果:对于高于 2.4.9 的 OpenCV(二进制)版本(例如 2.4.11、3.3.0),第一次搜索有效,但后续搜索无效。也就是说,它可以从上面的例子中寻找帧 200,但不能寻找 400 和其余部分;视频只是跳回到第 0 帧。但由于它适用于 2.4.9,所以我现在很高兴。
【问题讨论】: