50 lines
1.4 KiB
Python
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)
|