import subprocess, sys, statistics
# 中心裁切 + 原生分辨率的运动量（比整帧缩放更敏感）
def load(f, cw=0.5, ch=0.6, tw=480):
    probe = subprocess.run(["ffprobe","-v","error","-select_streams","v:0","-show_entries","stream=width,height",
                            "-of","csv=p=0",f],capture_output=True,text=True).stdout.strip().split(",")
    W,H = int(probe[0]), int(probe[1])
    w,h = int(W*cw)//2*2, int(H*ch)//2*2
    th = int(tw*h/w)//2*2
    raw = subprocess.run(["ffmpeg","-v","error","-i",f,"-vf",
        "crop=%d:%d:%d:%d,scale=%d:%d"%(w,h,(W-w)//2,(H-h)//2,tw,th),
        "-pix_fmt","gray","-f","rawvideo","-"],capture_output=True).stdout
    fs=tw*th; n=len(raw)//fs
    return [raw[i*fs:(i+1)*fs] for i in range(n)], fs
def mad(a,b,fs): return sum(abs(p-q) for p,q in zip(a,b))/fs
for f in sys.argv[1:]:
    fr, fs = load(f)
    d = [mad(fr[i-1],fr[i],fs) for i in range(1,len(fr))]
    print("%-46s 中心区(原生分辨率) 逐帧差 mean=%.2f max=%.2f  首尾差=%.2f" % (f.split('/')[-1], statistics.mean(d), max(d), mad(fr[0],fr[-1],fs)))
