将视频转换为帧python

时间:2019-08-28 09:02:33

标签: python opencv python-imaging-library

我正在尝试将c.5分钟的视频转换为c.600帧,每秒2帧。当我使用下面的代码时,它似乎吐出了600多个帧,在退出命令之前,我打了13,000帧。

这是我的mp3文件的属性。 长度:00:05:06 镜框宽度:256 镜框高度:144 数据速率:78kbps 总比特率:204kbps 帧频:30

我已经确认vidcap.set(cv2.CAP_PROP_POS_MSEC,sec*1000)以毫秒为单位,因此sec*1000应该以秒为单位。

我用打印检查了秒值,它们正在正确计数。

from PIL import Image
import os, sys
import cv2
import numpy as numpy
import matplotlib.pyplot as plt


vidcap = cv2.VideoCapture('4K Traffic camera video - Low.mp4')

def getFrame(sec):
    vidcap.set(cv2.CAP_PROP_POS_MSEC,sec*1000)
    hasFrames,image = vidcap.read()
    if hasFrames:
        cv2.imwrite(os.path.join('Video_Frame_Low', str(count) + '.jpg'), image)     # save frame as JPG file
    return hasFrames

sec = 0
frameRate = 0.5 #//it will capture image in each 0.5 second
count=1
success = getFrame(sec)

while success:
    count = count + 1
    sec = sec + frameRate
    sec = round(sec, 2)
    success = getFrame(sec)

取自https://medium.com/@iKhushPatel/convert-video-to-images-images-to-video-using-opencv-python-db27a128a481

的代码

我希望得到612帧

1 个答案:

答案 0 :(得分:0)

我用自己的视频文件尝试了此操作,它似乎可以正常工作。

您可以尝试手动设置FPS:

vidcap.set(cv2.CV_CAP_PROP_FPS, 30.0)

如果失败,请尝试直接移动框架并观察其吐出的图像:

vidcap.set(cv2.CV_CAP_PROP_POS_FRAMES, sec*30.0)