'''
注意路径名和文件名不能有中文
路径之间加双斜杠
'''
import cv2
import os
import time
'''
注意路径名和文件名不能有中文
路径之间加双斜杠
'''
# 视频数据主目录,需要自行修改,否则报错
video_path = 'C:\\Users\\wang\\Desktop\\11'
# 帧文件保存目录,需要自行修改,否则报错
save_path = 'C:\\Users\\wang\\Desktop\\12'
framerate = 3 # 每秒读取约30/n张图片,即每隔n帧截取一帧。修改该参数即可修改图片总数
# 视频读取函数
def video_split(v_name, # 读取视频名字
pic_num, # 视频中帧总数
framerate # 帧数截取间隔,每隔n帧截取一阵
):
v_path = video_path + '\\' + v_name # 读取视频地址
cap = cv2.VideoCapture(v_path) # 读取视频
rval = cap.isOpened() # 判断是否读取成功
while rval:
rval, frame = cap.read() # 获取视频帧数图片
if rval:
if (pic_num % framerate == 0): # 符合第n帧取帧数图的条件
cv2.imwrite(save_path + '\\' + str(int(pic_num / framerate)) + '.jpg', frame)
pic_num += 1
# cv2.waitKey(1)
return pic_num # 返回第n个视频的帧总数
pic_num = 0 # 图片序号
video_num = 0 # 视频个数
start_time = time.time()
print('正在读取视频……')
videos = os.listdir(video_path) # 读取所有视频列表
if videos:
print('正在截图,请稍后……')
for video in videos:
pic_num = video_split(video, pic_num, framerate)
video_num += 1
end_time = time.time()
print('截取图片完成!')
print('从' +
str(video_num) +
'个视频中共截取约' +
str(int(pic_num / framerate)) +
'张图片,每秒截取约' +
str("%.1f" % (30 / framerate)) +
'张图片,共耗费' +
str("%.2f" % (end_time - start_time)) +
'秒')
else:
print('没有检测到视频。请在指定文件夹中放入视频,或检查文件夹路径是否错误')