import argparse import subprocess import yaml # Hannes' AV1 wrapper script # Version 1.0.0 parser = argparse.ArgumentParser(prog="hav1w") parser.add_argument("input") parser.add_argument("output") parser.add_argument("preset") parser.add_argument("--crf") parser.add_argument("--ba") parser.add_argument("--alayout") parser.add_argument("--cpu") parser.add_argument("--mf") parser.add_argument("--crop") parser.add_argument("--dry", action="store_true") args = parser.parse_args() with open("av1_presets.yml", "r") as stream: presets = yaml.safe_load(stream) preset = presets[args.preset] if args.crf is not None: preset["crf"] = args.crf if args.ba is not None: preset["ba"] = args.ba if args.alayout is not None: preset["alayout"] = args.alayout if args.cpu is not None: preset["cpu"] = args.cpu if args.mf is not None: preset["mf"] = args.mf cmd = ["ffmpeg", "-i", args.input, "-c:v", "libaom-av1", "-c:a", "libopus", "-c:s", "copy", "-map", "0", "-crf", preset["crf"], "-b:v", "0"] if args.crop is not None: cmd += ["-vf", "crop=" + args.crop] cmd += ["-b:a", preset["ba"], "-af", f"aformat=channel_layouts={preset['alayout']}", "-mapping_family", preset["mf"], "-cpu-used", preset["cpu"], "-row-mt", "1", "-tiles", "2x2", args.output] if args.dry: print(" ".join(cmd)) exit(0) p = subprocess.run(cmd) exit(p.returncode)