def fill_props(settings: str, clip: vs.VideoNode, x265: bool, sar: str | None = None) -> str:
props = get_props(clip, x265)
if sar is not None:
if not isinstance(sar, str):
sar = str(sar)
sarnum = sar if ":" not in sar else sar.split(":")[0]
sarden = sar if ":" not in sar else sar.split(":")[1]
else:
sarnum = props.get("sarnum")
sarden = props.get("sarden")
if sarnum != "1" or sarden != "1":
warn(f"Are you sure your SAR ({sarnum}:{sarden}) is correct?\nAre you perhaps working on an anamorphic source?", None, 2)
settings = re.sub(r"{chromaloc(?::.)?}", props.get("chromaloc"), settings)
settings = re.sub(r"{primaries(?::.)?}", props.get("primaries"), settings)
settings = re.sub(r"{bits(?::.)?}", props.get("depth"), settings)
settings = re.sub(r"{matrix(?::.)?}", props.get("colormatrix"), settings)
settings = re.sub(r"{range(?::.)?}", props.get("range"), settings)
settings = re.sub(r"{transfer(?::.)?}", props.get("transfer"), settings)
settings = re.sub(r"{frames(?::.)?}", props.get("frames"), settings)
settings = re.sub(r"{fps_num(?::.)?}", props.get("fps_num"), settings)
settings = re.sub(r"{fps_den(?::.)?}", props.get("fps_den"), settings)
settings = re.sub(r"{min_keyint(?::.)?}", props.get("min_keyint"), settings)
settings = re.sub(r"{keyint(?::.)?}", props.get("keyint"), settings)
settings = re.sub(r"{sarnum(?::.)?}", sarnum, settings)
settings = re.sub(r"{sarden(?::.)?}", sarden, settings)
settings = re.sub(r"{min_luma(?::.)?}", props.get("min_luma"), settings)
settings = re.sub(r"{max_luma(?::.)?}", props.get("max_luma"), settings)
settings = re.sub(r"{lookahead(?::.)?}", props.get("lookahead"), settings)
return settings