File size: 2,058 Bytes
787b29f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env python3
"""Sorteia 3 clipes para os previews de acompanhamento do treino.

Criterios (decididos com o usuario):
- primeiro frame como imagem de condicao (a caption H3 ancora "<Picture 1> em 0.00s");
- tres aspect ratios visualmente diferentes, para o preview cobrir paisagem,
  retrato e algo intermediario/quadrado;
- pixels quadrados de verdade: o preparador rejeita SAR anamorfico, entao so
  entram clipes com SAR 1:1 / N/A;
- >= 124 frames, para o preview de 124f nao sair de um clipe mais curto.
"""
from __future__ import annotations
import argparse, json, random
from pathlib import Path

OK_SAR = {"1:1", "0:1", "N/A"}


def main() -> None:
    ap = argparse.ArgumentParser()
    ap.add_argument("--inventory", required=True, type=Path)
    ap.add_argument("--seed", type=int, default=42)
    a = ap.parse_args()

    rows = [r for r in json.loads(a.inventory.read_text()) if "error" not in r]
    rows = [r for r in rows if r["caption"] and r["frames"] >= 124
            and r["sar"] in OK_SAR and r["w"] and r["h"]]

    # Faixas de aspect: paisagem larga, quadrado-ish, retrato.
    faixas = {
        "paisagem": lambda ar: ar >= 1.3,
        "quadrado": lambda ar: 0.8 <= ar < 1.3,
        "retrato":  lambda ar: ar < 0.8,
    }
    rng = random.Random(a.seed)
    escolhidos = []
    for nome, teste in faixas.items():
        pool = [r for r in rows if teste(r["w"] / r["h"])]
        if not pool:
            print(f"# sem candidatos para {nome}")
            continue
        r = rng.choice(pool)
        escolhidos.append(r)
        cap = Path(r["path"]).with_suffix(".txt").read_text(encoding="utf-8-sig")
        gatilho = next((g for g in ("A static", "A slow", "A smooth", "An intense",
                                    "A turntable", "A chroma-key") if g + " looping" in cap), "?")
        print(f"# {nome:9s} {r['w']}x{r['h']} ar={r['w']/r['h']:.2f} "
              f"{r['frames']}f tipo={r['folder']} gatilho='{gatilho}'")
    for r in escolhidos:
        print(r["path"])


if __name__ == "__main__":
    main()