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

时间:2018-01-30 09:18:20

标签: python opencv image-processing video-streaming opencv3.1

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

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

3 个答案:

答案 0 :(得分:2)

这是一个解决方案:

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或视频结束。

答案 1 :(得分: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:
  success, image = vidcap.read()
  print('Read a new frame: ', success)
  cv2.imwrite("/content/image/frame%d.jpg" % count, image)    
  count += 1

答案 2 :(得分: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()