【发布时间】:2022-07-01 14:19:41
【问题描述】:
在 CV2 中,这段代码会读取给定帧号的帧还是下一帧?
desiredFrames = [3,5,7,n]
cap = cv2.VideoCapture("somefile")
for idx in desiredFrames:
cap.set(cv2.CAP_PROP_POS_FRAMES,idx);
cap.read() #Does it Read Frame idx or Frame idx+1
我会得到帧 [3,5,7,n] 或帧 [4,6,8,n+1]
谢谢。
【问题讨论】:
-
documentation 表示“接下来要解码/捕获的帧的基于 0 的索引”。视频文件中第一帧的索引为
0。所以索引3是第 4 帧。 -
谢谢,但我知道它是 0 索引。我的问题是 cap.set(1,idx);转到第 i 帧,然后当我调用 cap.read() 时它读取 i+1?换句话说,如果我告诉它分页到第 5 帧然后进行读取,它是从第 5 帧开始翻页并返回第 6 帧还是 cap.read 读取然后再分页?
-
我已经发布了一个代码示例,证明框架是
[3,5,7,n]... 请在您的机器中执行代码示例(我想确保示例代码正常工作,尤其是部分与 FFmpeg 相关)。如果您使用的是 Windows,请从here 下载 FFmpeg。并将ffmpeg.exe放在与 Python 脚本相同的文件夹中。 -
请使用
CAP_PROP_POS_FRAMES而不是幻数1。并删除所有你所遵循的教你使用1的可怕指南的书签。 -
好的,我修复了 cap.set(1,...) 问题。如果可能的话,您选择其中一个的理由是什么?是的,我同意有很多可怕的指南对我们这些菜鸟的 Python 资源中的视频管理有什么建议吗?
标签: python python-3.x opencv computer-vision