import argparse import os import shutil import glob def scan_videos(root: str) -> list[str]: exts = ("*.MOV", "*.mov", "*.MP4", "*.mp4", "*.AVI", "*.avi", "*.MKV", "*.mkv") videos = [] for ext in exts: videos.extend(glob.glob(os.path.join(root, "*", ext))) return sorted(set(videos)) def copy_or_link(src: str, dst: str): os.makedirs(os.path.dirname(dst), exist_ok=True) if os.path.exists(dst): return try: os.link(src, dst) except OSError: shutil.copy2(src, dst) def main(): parser = argparse.ArgumentParser(description="Combine two datasets into one folder") parser.add_argument("--src_a", required=True, help="first dataset root") parser.add_argument("--src_b", required=True, help="second dataset root") parser.add_argument("--output_dir", required=True, help="output combined dataset root") args = parser.parse_args() for src_root in (args.src_a, args.src_b): videos = scan_videos(src_root) if not videos: raise SystemExit(f"No videos found in {src_root}") for src in videos: label = os.path.basename(os.path.dirname(src)) dst = os.path.join(args.output_dir, label, os.path.basename(src)) copy_or_link(src, dst) if __name__ == "__main__": main()