python多线程视频转为图片保存

# -*- coding: utf-8 -*-   
import os 
import cv2
import csv
import numpy as np
import concurrent.futures

def GetImgNameByEveryDir(file_dir,videoProperty):  
    FileNameWithPath = [] 
    FileName         = []
    FileDir          = []
    # videoProperty=['.png','jpg','bmp']
    for root, dirs, files in os.walk(file_dir):  
        for file in files:  
            if os.path.splitext(file)[1] in videoProperty:  
                FileNameWithPath.append(os.path.join(root, file))  # 保存图片路径
                FileName.append(file)                              # 保存图片名称
                FileDir.append(root[len(file_dir):])               # 保存图片所在文件夹
    return FileName,FileNameWithPath,FileDir

# 以视频文件名创建文件夹,然后保存图像到对应文件夹
def AVI_To_Img_And_save(video_file):
	video_name = video_file.split('/')[-1].split('.')[0]
	print('当前处理的视频为:',video_file)
	cap = cv2.VideoCapture(video_file)
	rval = cap.isOpened()
	framenum=0
	while rval:
		rval, frame  = cap.read()
		if framenum%25!=0:
			framenum+=1
			continue
		save_dir     = './图片/'
		Img_savename = save_dir + '/' + 'DKY_image_' + video_name + '_' + '%08d'%framenum +'.jpg'
		if rval:
			if os.path.exists(Img_savename)==False:
				cv2.imwrite(Img_savename, frame,[int(cv2.IMWRITE_JPEG_QUALITY), 100]) 
		else:
			break
		framenum+=1
		print('正在处理视频{}的第{}帧,rval = {}...'.format(video_name,framenum,rval))
	cap.release()
	return ''
	

FileName,FileNameWithPath,FileDir = GetImgNameByEveryDir('./2021.12.24处理/',['.wmv','.mkv','.mp4'])
print('FileName = ',FileName)
# raise
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as process:
# with concurrent.futures.ProcessPoolExecutor(max_workers=batch_size) as process:
	process.map(AVI_To_Img_And_save,FileNameWithPath)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值