如何设置从输入视频中获取帧的时间间隔?

0 人关注

我想从输入的视频中获取特定时间间隔的帧,所以建议我任何对我有帮助的解决方案。告诉我如何在以下代码中设置时间限制。

import cv2
vidcap = cv2.VideoCapture('baahubali2.mp4')
vidcap.set(cv2.CAP_PROP_POS_MSEC,1000)
success, image = vidcap.read()
count = 0
success = True
while success:
    success, image = vidcap.read()
    print('Read a new frame: ', success)
    cv2.imwrite("/home/kapil/Documents/major/image/frame%d.jpg" % count, image)     
    count += 1
    
7 个评论
ZdaR
你需要设计一个公式,使用视频的FPS和你获取的帧数来计算视频中经过的时间,并相应地 break
你能在代码中显示吗?
你可以测量帧数并获得具体的帧数
假设视频长度为3.42分钟,我希望帧数为1.2到1.9分钟,对于这个任务我应该怎么做?
这是我第一次在C++中看到这种语法。
这段代码在Python中。
那么,为什么有C++标志而没有Python标志?
python
opencv
image-processing
video-streaming
opencv3.1
Kapil Sen
Kapil Sen
发布于 2018-01-30
3 个回答
Benjamin Barrois
Benjamin Barrois
发布于 2019-11-20
已采纳
0 人赞同

这里有一个解决方案。

import cv2
start_time_ms = 1000
stop_time_ms = 2000
vidcap = cv2.VideoCapture('baahubali2.mp4')
count = 0
success = True
while success and vidcap.get(cv2.cv.CV_CAP_PROP_POS_MSEC) < start_time_ms:
    success, image = vidcap.read()
while success and vidcap.get(cv2.cv.CV_CAP_PROP_POS_MSEC) <= stop_time_ms:
    success, image = vidcap.read()
    print('Read a new frame: ', success)
    cv2.imwrite("/home/kapil/Documents/major/image/frame%d.jpg" % count, image)    
    count += 1

开始和停止时间是以毫秒为单位的。帧的读取不做任何事情,直到start_time_ms ,然后帧被写成图像,直到stop_time_ms 或视频结束。

while success and vidcap.get(cv2.CV_CAP_PROP_POS_MSEC) < start_time_ms:AttributeError: 'module' object has no attribute 'CV_CAP_PROP_POS_MSEC'.
我运行这整个脚本没有错误,我在最后得到了正确的图像(与我的一个视频)。 cv2.CAP_PROP_POS_MSEC 也许你安装的opencv和我的不一样,那么就像你的例子中的 cv2.cv.CV_CAP_PROP_POS_MSEC ,如果它为你运行的话。
我在ubuntu上安装了opencv(只是为了帮助你),使用的是 apt-get python-opencv ,也许我的版本比你的老或新,有细微的差别,但你只要找到存储 CV_CAP_PROP_POS_MSEC 属性的地方。
如果这个答案确实解决了你的问题,请不要忘记接受这个答案。
是的,谢谢。我使用了cv2.CAP_PROP_POS_MSEC.它的工作。
Sourav sambit panda
Sourav sambit panda
发布于 2019-11-20
0 人赞同

以下是我用来获得输出的解决方案,我想它会有所帮助

import cv2
import os
cap = cv2.VideoCapture(vidoname)
time_skips = float(2000) #skip every 2 seconds. You 
need to modify this
count = 0
success,image = cap.read()
while success:
    cv2.imwrite("frame%d.jpg" % count, image)     
    cap.set(cv2.CAP_PROP_POS_MSEC, 
    (count*time_skips))    
    # move the time
    success,image = cap.read()
    count += 1
# release after reading    
cap.release()
    
Darpan Shah
Darpan Shah
发布于 2019-11-20
0 人赞同
import cv2
start_time_ms = 120000
stop_time_ms = 150000
vidcap = cv2.VideoCapture('/content/Players Hunting on Neymar Lionel Messi 
                            Cristiano Ronaldo ● Horror Fouls &amp Tackles HD.mp4')
count = 0
success = True
vidcap.set(cv2.CAP_PROP_POS_MSEC,start_time_ms)
while success and vidcap.get(cv2.CAP_PROP_POS_MSEC) <= stop_time_ms: