Извлечь кадры из видео в определенную папку - PullRequest
1 голос
/ 06 апреля 2019

Я хочу извлечь кадры из 3 видео в 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 видео, а именно видео1, видео2, видео3.Я хочу извлечь соответствующие кадры в их определенные папки: папка video1, папка video2, папка video3.В настоящее время я могу извлечь кадры только для 3-го видео в папку video3.Как я могу сделать это для видео1 и видео2, а также

1 Ответ

1 голос
/ 06 апреля 2019

Ваш отступ для детали от 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...