import os import decord from decord import VideoReader from concurrent.futures import ThreadPoolExecutor from tqdm import tqdm # 指定路径 root_path = '/home/cn/Datasets/SakugaDataset/split/train_aesthetic' error_file = 'error_ratio.txt' # 获取所有文件夹 folders = [os.path.join(root_path, folder) for folder in os.listdir(root_path) if os.path.isdir(os.path.join(root_path, folder))] # 定义一个函数来处理每个文件夹 def process_folder(folder): try: # 获取文件夹中的任意一个视频文件 video_files = [os.path.join(folder, f) for f in os.listdir(folder) if f.endswith(('.mp4', '.avi', '.mkv'))] if not video_files: return None, None # 读取视频 video_path = video_files[0] vr = VideoReader(video_path) # 获取视频帧的宽高 frame = vr[0] height, width = frame.shape[:2] ratio = width / height # 返回结果 if ratio < 1: return folder, ratio else: return None, None except Exception as e: print(f"Error processing folder {folder}: {e}") return None, None # 使用多线程处理 results = [] with ThreadPoolExecutor(max_workers=8) as executor: futures = [executor.submit(process_folder, folder) for folder in folders] for future in tqdm(futures, desc="Processing folders"): folder, ratio = future.result() if folder is not None: results.append((folder, ratio)) # 打印长宽比小于1的位置和长宽比,并写入文件 with open(error_file, 'w') as f: for folder, ratio in results: print(f"Folder: {folder}, Ratio: {ratio}") f.write(f"{folder}\n")