File size: 1,324 Bytes
7279c87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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()