hav1w/main.py

50 lines
1.4 KiB
Python

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)