

あるフォルダの中の複数の動画ファイルを対象に、各動画の1フレーム目（または１～ｎ枚目）を抜き出して画像として保存したいと考えています。

動画ファイル1個であれば下記で達成しているのですが、複数個の動画ファイルに対する処理の仕方で迷っております。  
基本的なことが理解できていないかもしれませんが、よろしくお願いいたします。

[code]

    import cv2
     
    video_path = "E:\UserX\Test\Trial1.mp4"
    cap = cv2.VideoCapture(video_path)
     
    for num in range(1):　#数値を変えれば取得する画像枚数を指定可能
        cap.set(cv2.CAP_PROP_POS_FRAMES, num)
        cv2.imwrite("E:\UserX\Test\picture{:0=4}".format(num)+".tif", cap.read()[1])
        print("save picture{:0=4}".format(num)+".tif")
     
    cap.release()
    
[/code]


CC BY-SA 4.0
2021-03-17T15:22:03.987
74723
2021-05-18T03:23:30.417
2021-03-17T16:13:12.683
3060
44360
question
python opencv 画像
複数の動画の1フレーム目を抜き出したい


下記のようにコードを書いてみました。この書き方ですと、ファイルパスのところで'/Users/~/sample' + str(i+1) +
'mp4'のように指定するようになっています。また、外に抜き出されたフレーム画像を保存するために任意のフォルダを作っておく必要があります(4行目の部分）。自分もまだ勉強中なので、うまく書けませんが参考程度になればと思います。

[code]

    import cv2
    import os # 追記
    
    img_outdir = './img' # 追記
    os.makedirs(img_outdir, exist_ok=True) # 追記
    number = len(os.listdir('動画ファイルが入っているフォルダのパス')) # 追記
    
    for i in range(number): # 追記
      movie_file = 'ファイルパス' + str(i+1) + 'ファイルの形式' # 追記
      cap = cv2.VideoCapture(movie_file)
      
      for num in range(1):　# 数値を変えれば取得する画像枚数を指定可能
        cap.set(cv2.CAP_PROP_POS_FRAMES, num)
        ouimg_file = "{}/{:05d}.jpg".format(img_outdir, i+1) # 追記
        cv2.imwrite("E:\UserX\Test\picture{:0=4}".format(num)+".tif", cap.read()[1])
        print("save picture{:0=4}".format(num)+".tif")
    
      cap.release()
    
[/code]


CC BY-SA 4.0
2021-05-18T03:23:30.417
75909
2021-05-18T03:23:30.417
45364
74723
answer