hav1w/hav1w.py

53 lines
1.5 KiB
Python
Raw Normal View History

2022-12-10 14:01:39 +01:00
import argparse
import subprocess
import yaml
# Hannes' AV1 wrapper script
2022-12-29 00:07:04 +01:00
# Version 2.0.0
2022-12-10 14:01:39 +01:00
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")
2022-12-21 19:28:46 +01:00
parser.add_argument("--crop")
2022-12-29 00:07:04 +01:00
parser.add_argument("--no10bit")
2022-12-21 19:20:19 +01:00
parser.add_argument("--dry", action="store_true")
2022-12-10 14:01:39 +01:00
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",
2022-12-21 19:28:46 +01:00
"-crf", preset["crf"], "-b:v", "0"]
if args.crop is not None:
cmd += ["-vf", "crop=" + args.crop]
2022-12-29 00:07:04 +01:00
if args.no10bit is None: # Encode to 10 bit per default
cmd += ["-pix_fmt", "yuv420p10le"]
2022-12-21 19:28:46 +01:00
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]
2022-12-10 14:01:39 +01:00
2022-12-21 19:20:19 +01:00
if args.dry:
print(" ".join(cmd))
exit(0)
2022-12-10 14:01:39 +01:00
p = subprocess.run(cmd)
exit(p.returncode)