File size: 1,722 Bytes
6819784
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Build the cut 1080p base with dense keyframes for HyperFrames.

Extracts each keep-segment at 1080p (re-encode, dense keyframes, 30ms boundary audio fades),
concats losslessly. Output: hf/base_full.mp4
"""
import subprocess
from pathlib import Path
from cutmap import keep_segments, out_duration

SRC = r"D:\PromptEngineer48\In-Progress\P11-Editor\LMSTUDIO-MTP1.mp4"
EDIT = Path(r"D:\PromptEngineer48\In-Progress\P11-Editor\edit")
SEG_DIR = EDIT / "clips"
SEG_DIR.mkdir(exist_ok=True)

segs = keep_segments()
parts = []
for i, (a, b) in enumerate(segs):
    dur = b - a
    out = SEG_DIR / f"seg{i:02d}.mp4"
    # 30ms fades at boundaries to avoid pops
    af = f"afade=t=in:st=0:d=0.03,afade=t=out:st={max(dur-0.03,0):.3f}:d=0.03"
    cmd = [
        "ffmpeg", "-y", "-ss", f"{a:.3f}", "-i", SRC, "-t", f"{dur:.3f}",
        "-vf", "scale=1920:1080:flags=lanczos",
        "-c:v", "libx264", "-crf", "18", "-preset", "medium",
        "-g", "30", "-keyint_min", "30", "-sc_threshold", "0",
        "-af", af, "-c:a", "aac", "-b:a", "192k",
        "-movflags", "+faststart", str(out),
    ]
    subprocess.run(cmd, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
    parts.append(out)
    print(f"  seg{i:02d}: {a:.2f}-{b:.2f} ({dur:.2f}s)")

# concat
listfile = SEG_DIR / "concat.txt"
listfile.write_text("\n".join(f"file '{p.as_posix()}'" for p in parts))
base = EDIT / "hf" / "base_full.mp4"
subprocess.run(["ffmpeg", "-y", "-f", "concat", "-safe", "0", "-i", str(listfile),
                "-c", "copy", "-movflags", "+faststart", str(base)],
               check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
print(f"base -> {base}  (expected out duration {out_duration():.2f}s)")