2017-12-26 11 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)) 

私は以下のエラーを受けています。私はPythonには新しいので、私は変数を渡す際にいくつかの間違いをしていると思います。ビデオファイルPythonのフレームフォルダに

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

)( 主argparse'は '場合あなたのパラメータに 'sys.argv'を使ってください。ところで、あなたの 'main()'関数は大丈夫です。 – Silencer

+0

argparseは必須であると思われますが、私はこの場合のエラーを検出することができません –

+0

問題はあなたの 'argparse'の使用にのみあります - お願いします。[mcve]を提供してください。 | 'parser.add_argument'への最初の呼び出しの目的は何ですか? –

答えて

0

私はプログラムの中で少し微調整の問題を解決することができるよ、これはあなたが言及したフレーム番号に応じてフレームに入力された映像ファイルを解決します。

インポートインポートOS

インポートSYS

インポート

インポートCV2

DEF×(video_path、nth_sample、output_path)skvideo.io

argparseそうでなければos.path.exists(output_path):os。 RET一方makedirs(output_path)

キャップ= cv2.VideoCapture(video_path)

のframe_num = 1

RET、フレーム= cap.read()

: のframe_num + = 1 場合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)

デフメイン():

パーサ= argparse.ArgumentParser(説明= 'Extraceは、ビデオファイルからフレーム')

parser.add_argument( ' - V'、 ' - video_path'、助けます= 'ビデオ・ファイルへのパス')

parser.add_argument( ' - L'、 ' - nth_sample'、ヘルプ= 'N番目毎のフレームを抽出するサンプルレート'、タイプ= INT)

parser.add_argument( '-o'、 ' - output_path'、help = 'テストイメージを出力するパス、デフォルトはout')

引数の=のparser.parse_args()

X(** VARS(引数))

場合名 == ''

関連する問題