探しても見当たらなかったので作りました。
OpenCVで開ける動画ファイルを適当なフレーム毎に間引きながらリサイズして画像ファイルとして保存します。
コード
何も難しいことはしてないので特に説明は不要かと思います。
video2jpg.py
import cv2
import os
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--video_path", type=str)
parser.add_argument("--save_dir", type=str, default="save/")
parser.add_argument("--interval", type=int, default=10)
parser.add_argument("--resize", type=int, default=None, nargs="+")
opt = parser.parse_args()
def video2jpg():
if not os.path.exists(opt.save_dir):
os.makedirs(opt.save_dir)
cap = cv2.VideoCapture(opt.video_path)
l_cap = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
for i in range(l_cap):
flag, frame = cap.read()
if flag == True and i % opt.interval == 0:
save_path = os.path.join(opt.save_dir, "{}_{}.jpg".format(os.path.basename(opt.video_path).split(".")[0], i))
if opt.resize != None:
frame = cv2.resize(frame, (opt.resize[0], opt.resize[1]))
cv2.imwrite(save_path, frame)
print("{} has been saved".format(save_path))
if __name__ == "__main__":
video2jpg()
実行
例えばvideo2jpg.pyと同ディレクトリに存在するdouga.aviを10フレーム毎に480×480にリサイズして画像ファイルとして保存したい場合は次のようにターミナルに入力します。
python3 video2jpg.py --video_path douga.avi --interval 10 --resize 480 480