-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvideo_to_imgs.py
48 lines (40 loc) · 1.74 KB
/
video_to_imgs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import cv2
import argparse
import os
def parse_args():
"""
Parse input arguments
"""
parser = argparse.ArgumentParser(description='Process pic')
parser.add_argument('--input', help='video to process', dest='input', default=None, type=str)
parser.add_argument('--output', help='pic to store', dest='output', default=None, type=str)
# default为间隔多少帧截取一张图片;我这里用10刚刚好!
parser.add_argument('--skip_frame', dest='skip_frame', help='skip number of video', default=10, type=int)
# input为输入视频的路径 ,output为输出存放图片的路径
args = parser.parse_args(['--input', r'/home/fly/AWYY/interaction/train_test_data/cwj/1-0-0-2.mp4',
r'--output', '/home/fly/AWYY/interaction/train_test_data/img-cwj/1-0-0-2'])
return args
# 处理过程
def process_video_imgs(i_video, o_video, num):
cap = cv2.VideoCapture(i_video) # 捕获视频
num_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT) # 有多少帧
expand_name = '.jpg' # 扩展维jpg
if not cap.isOpened():
print("Please check the path.")
cnt = 0
count = 0 # 计数器
while 1:
ret, frame = cap.read() # 读一帧
cnt += 1
if cnt % num == 0: # 每num帧保存一张图片
count += 1
cv2.imwrite(os.path.join(o_video, str(count) + expand_name), frame) # 写图片
if not ret: # ret为false就意味着视频帧没了
break
if __name__ == '__main__':
args = parse_args()
if not os.path.exists(args.output):
os.makedirs(args.output) # 输出没有的话,自建
print('Called with args:')
print(args)
process_video_imgs(args.input, args.output, args.skip_frame)