2017-12-26 8 views
0
import argparse 
import os 

#import skvideo.io 
import cv2 

def main(video_path, nth_sample, output_path): 
    if not os.path.exists(output_path): 
     os.makedirs(output_path) 

    cap = cv2.VideoCapture(video_path) 
    frame_num = 1 
    ret, frame = cap.read() 
    while ret: 
     frame_num += 1 
     if frame_num % nth_sample == 0: 
      cv2.imwrite(os.path.join(output_path, 'frame_' + str(frame_num).zfill(5) + '.png'), frame) 
     ret, frame = cap.read() 
     print (frame_num) 


if __name__ == '__main__': 
    parser = argparse.ArgumentParser(description='Extrace frames from a video file') 

    parser.add_argument('C:/Users/Pratik/AppData/Local/Programs/Python/Python36-32/WhatsApp Video 2017-11-21 at 18.59.55.mp4',help='path to video file') 

    parser.add_argument('-n','--5',help='Sample rate to extract every nth frame',type = int,default=1) 
    parser.add_argument('-o','--C:/Users/Pratik/AppData/Local/Programs/Python/Python36-32/frame',help='path to output test images, defaults to out',default='out') 
    args = parser.parse_args() 
    main(**vars(args)) 

나는 아래의 오류가 나타납니다. 나는 변수를 전달하는 데 실수를 저지르고 있다고 생각하기에 파이썬에 익숙하지 않습니다. 그러나 나는 어디 있는지 모르겠습니다. 나는이 프로그램에 약간의 조정의 문제를 해결할 수 있어요비디오 파일 파이썬의 프레임 폴더로

usage: Frme.py [-h] [-n 5] 
       [-o C:/USERS/PRATIK/APPDATA/LOCAL/PROGRAMS/PYTHON/PYTHON36_32/FRAME] 
       C:/Users/Pratik/AppData/Local/Programs/Python/Python36-32/WhatsApp 
       Video 2017-11-21 at 18.59.55.mp4 
Frme.py: error: the following arguments are required: C:/Users/Pratik/AppData/Local/Programs/Python/Python36-32/WhatsApp Video 2017-11-21 at 18.59.55.mp4 
+0

경우' 꼭 필요한 것은 아니며 매개 변수에'sys.argv'를 사용하십시오. 그건 그렇고,'main()'함수는 괜찮습니다. – Silencer

+0

argparse가 필수 항목 인 것 같습니다.이 경우 오류가 무엇인지 감지 할 수 없습니다. –

+0

문제는 전적으로 'argparse'를 사용하는 데 있습니다 - 제발, [mcve]를 제공하고 관련없는 것들을 섞어서는 안됩니다 opencv in | 'parser.add_argument'에 대한 첫 번째 호출의 의도는 무엇입니까? –

답변

0

, 이것은 당신이 언급 한 프레임 번호에 따라 프레임에 입력 된 비디오 파일을 확인합니다.

:

가져 오기 운영 체제

수입 SYS

수입

수입 CV2

데프 X (video_path, nth_sample, output_path) skvideo.io

argparse 그렇지 않으면 os.path.exists (output_path) : os. makedirs (output_path)

캡 = cv2.VideoCapture (video_path)

frame_num과

= 1

RET 프레임 cap.read =()

동안 RET : frame_num과 + = 1의 경우 frame_num % nth_sample == 0 : cv2.imwrite (os.path.join (output_path, 'frame_'+ str (frame_num) .zfill (5) + '.png') 프레임) ret, frame = cap.read() print (frame_num)

()

데프 주 : '- V', '- video_path'(

파서 = argparse.ArgumentParser (설명 = 'Extrace 비디오 파일에서 프레임')

parser.add_argument 도움이 =)

parser.add_argument ("비디오 파일 경로 '- L', '- nth_sample'도움말 = (TYPE = INT)

parser.add_argument '샘플 레이트는 모든 n 번째 프레임을 추출하는' '-o', '- output_path', help = '테스트 이미지 출력 경로, 기본값은 out')

의 인수에 parser.parse_args =()

X (** VARS (인수))

이름 경우 == '메인'argparse`이다 주()