The encoding loop was doing frame_lookup + copy + mask write for every frame including interpolated gap-filler frames. Now only real detections trigger a full composite; interpolated frames reuse the previous frame's result (cv2.VideoWriter copies internally on write).