import subprocess, sys, statistics
W,H = 640,360
def load(f, y0, y1):
    raw = subprocess.run(["ffmpeg","-v","error","-i",f,"-vf","scale=%d:%d"%(W,H),"-pix_fmt","gray","-f","rawvideo","-"],
                         capture_output=True).stdout
    fs=W*H; n=len(raw)//fs
    frames=[raw[i*fs:(i+1)*fs] for i in range(n) if len(raw[i*fs:(i+1)*fs])==fs]
    return [fr[y0*W:y1*W] for fr in frames], y1-y0
def shift_resid(a,b,w,h,dx,dy):
    tot=0;cnt=0
    y0=max(0,-dy); y1=min(h,h-dy); x0=max(0,-dx); x1=min(w,w-dx)
    for y in range(y0,y1):
        rowa=a[y*w:y*w+w]; rowb=b[(y+dy)*w:(y+dy)*w+w]
        for x in range(x0,x1):
            tot += abs(rowa[x]-rowb[x+dx]); cnt+=1
    return tot/max(cnt,1)
for f in sys.argv[1:]:
    sky, hh_ = load(f, int(H*0.02), int(H*0.22))
    w=W; h=hh_
    vs=[];hs=[]
    for i in range(1, min(len(sky),21)):
        a,b=sky[i-1],sky[i]
        if len(a)!=w*h or len(b)!=w*h: continue
        vs.append(min(shift_resid(a,b,w,h,0,dy) for dy in range(-5,6) if dy))
        hs.append(min(shift_resid(a,b,w,h,dx,0) for dx in range(-5,6) if dx))
    if not vs: print(f,"no data"); continue
    v=statistics.mean(vs); h2=statistics.mean(hs)
    d = "垂直下落" if v<h2*0.95 else ("水平吹动" if h2<v*0.95 else "方向不明显")
    print("%-42s 垂直残差=%.2f 水平残差=%.2f => %s" % (f.split('/')[-1], v, h2, d))
