#导入需要的库 import cv2 import os import argparse #avi视频位置\保存的图片位置\输出视频的名称,按照自己的路径修改 #avi_path = r'D:\tools\4154.avi' #img_path = r'D:\tools\video' #定义avi转img函数 def avi2img(avi_path,img_path): if os.path.exists(img_path) is False: os.makedirs(img_path) print(avi_path) cap=cv2.VideoCapture(avi_path) #读入一个视频,打开cap fps=cap.get(cv2.CAP_PROP_FPS) #获取视频的帧频 isOpened=cap.isOpened #判断是否打开 width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取宽度 height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取高度 n = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) #获取总帧数 print(n) i=0 #进入循环 print("start") while(isOpened): #循环达到帧总数时退出 if i==n: break else: i+=1 (flag,frame)=cap.read() #读取每一帧,一张图像flag 表明是否读取成果frame内容 if i%opt.skip_frame == 0: fileName = img_path+'\image'+str(i).zfill(4)+'.jpg' #要保存图片的名称 #flag表示是否成功读图 print(fileName) if flag==True: # cv2.IMWRITE_JPEG_QUALITY控制质量 #cv2.imwrite(fileName,frame,[cv2.IMWRITE_JPEG_QUALITY,100]) #写入图片 #支持中文路径写入 cv2.imencode('.jpg', frame)[1].tofile(fileName) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--avi_path', type=str, default='D:\\tools\\4154.avi', help='input path') parser.add_argument('--img_path', type=str, default='D:\\tools\\video', help='out path') parser.add_argument('--skip_frame', type=int, default=1, help='skip_frame') opt = parser.parse_args() avi_name =os.path.basename(opt.avi_path) avi_name = avi_name.split('.')[0] img_path = opt.img_path+'\\'+ avi_name avi2img(opt.avi_path,img_path) #使用函数
python .\video2img_skip_frame.py --avi_path D:\tools\4154.avi --skip_frame 24