将视频中的帧提取到特定文件夹中

时间:2019-04-06 11:48:44

标签: python opencv

我想将3个视频中的帧提取到3个不同的文件夹中。每个文件夹都有其相应视频文件的帧。我只能访问第三个视频的目标。如何提取前2个视频的帧

到目前为止,我已经使文件夹的名称与视频文件相同。开发了用于帧提取的代码,但只能从最后一个视频中提取。下面是我的代码

import cv2
import glob
from glob import glob
import os
import shutil

def extractFrames(m,n):

    if not os.path.exists:
        os.makedirs(n)

    vid_files=glob(m)
    print(vid_files)

    for v_f in range(len(vid_files)):
        v1=os.path.basename(vid_files[v_f])
        print(v1)
        vid_name = os.path.splitext(v1)[0]
        print(vid_name)
        output = n +'\\video_' + vid_name
        os.makedirs(output)
        print(output)





    vidcap = cv2.VideoCapture(vid_files[v_f])
    print(vidcap)
    success,image = vidcap.read()
    seconds = 2
    fps = vidcap.get(cv2.CAP_PROP_FPS) # Gets the frames per second
    multiplier = fps * seconds
    count=0

    while success:
        img_name = vid_name + '_f' + str(count) + ".jpg"
        image_path = output + "/" + img_name
        frameId = int(round(vidcap.get(1)))
        success,image = vidcap.read()
        if frameId % multiplier == 0:
            cv2.imwrite(filename = image_path, img = image)
            count+=1


    vidcap.release()
    cv2.destroyAllWindows()

    print('finished processing video {0} with frames {1}'.format(vid_files[v_f], count))
    return output


x=("C:\\Python36\\videos\\*.mp4")
y=("C:\\Python36\\videos\\videos_new")

z=extractFrames(x,y)

如果有3个视频,即video1,video2,video3。我想将相应的帧提取到其特定的文件夹中,即video1文件夹,video2文件夹,video3文件夹。目前,我只能将第三个视频的帧提取到文件夹video3中。我该如何同时对video1和video2进行操作

1 个答案:

答案 0 :(得分:1)

您从vidcap = ...向下的那部分的缩进已关闭。因此,仅使用for循环中的最后一个文件。

import cv2
import glob
from glob import glob
import os
import shutil

def extractFrames(m,n):
if not os.path.exists:
        os.makedirs(n)

    vid_files=glob(m)
    print(vid_files)

    for v_f in range(len(vid_files)):
        v1=os.path.basename(vid_files[v_f])
        print(v1)
        vid_name = os.path.splitext(v1)[0]
        print(vid_name)
        output = n +'\\video_' + vid_name
        os.makedirs(output)
        print(output)


        vidcap = cv2.VideoCapture(vid_files[v_f])
        print(vidcap)
        success,image = vidcap.read()
        seconds = 2
        fps = vidcap.get(cv2.CAP_PROP_FPS) # Gets the frames per second
        multiplier = fps * seconds
        count=0

        while success:
            img_name = vid_name + '_f' + str(count) + ".jpg"
            image_path = output + "/" + img_name
            frameId = int(round(vidcap.get(1)))
            success,image = vidcap.read()
            if frameId % multiplier == 0:
                cv2.imwrite(filename = image_path, img = image)
                count+=1

        vidcap.release()
        cv2.destroyAllWindows()

        print('finished processing video {0} with frames {1}'.format(vid_files[v_f], count))
    return output # indent this less

x=("C:\\Python36\\videos\\*.mp4")
y=("C:\\Python36\\videos\\videos_new")

z=extractFrames(x,y)