import os from glob import glob from moviepy.editor import VideoFileClip import multiprocessing import cv2, math def get_video_length(file_path): video = VideoFileClip(file_path) return video.duration def process_video(video_path): video_name = video_path.split('/')[-1] video_name = video_name.split('.')[:-1] video_name = '.'.join(video_name) path = video_path.split('/')[1:-1] path = '/'.join(path) image_path = './SD_frames/'+path+'/'+ video_name+'/' print(video_name) if os.path.exists(image_path): print("路径存在") else: print(video_name, "路径不存在") try: try: video_length = get_video_length(video_path) print(video_name, f"视频长度为:{video_length} 秒") os.makedirs(os.path.dirname(image_path), exist_ok=True) if video_length >= 4 : inter_val = 2 os.system(f"cd {image_path} | ffmpeg -loglevel quiet -i {video_path} -r {inter_val} {image_path}%d.jpg") else: inter_val = math.ceil(8 / video_length) os.system(f"cd {image_path} | ffmpeg -loglevel quiet -i {video_path} -r {inter_val} {image_path}%d.jpg") except Exception as e: print("发生异常:", str(e)) except: print("Skip") if __name__ == '__main__': print("Getting frames!!") video_paths = './SD' all_dirs = [] all_dirs = glob(video_paths+'/*') print(all_dirs) pool = multiprocessing.Pool(processes=8) pool.map(process_video, all_dirs) pool.close() pool.join()