#!/usr/bin/env python3

import sys
import subprocess
import logging

import coloredlogs

coloredlogs.install(level="DEBUG", fmt="%(levelname)s %(message)s")
log = logging.getLogger()


def duration_file(path: str) -> float:
    cmd = [
        "ffprobe",
        "-v",
        "error",
        "-show_entries",
        "format=duration",
        "-of",
        "default=noprint_wrappers=1:nokey=1",
        path,
    ]
    run = subprocess.run(cmd, stdout=subprocess.PIPE, check=True)
    ret = run.stdout.decode().strip()
    return float(ret)


# Constants
audio_br_bi = 128000

# TODO Arguments if you feel like it
quota_by = int(sys.argv[1])
in_file = sys.argv[2]
out_file = sys.argv[3]
filters = sys.argv[4:]

quota_bi = quota_by * 8
duration = duration_file(in_file)
tot_br_bi = quota_bi / duration
video_br_bi = int(tot_br_bi - audio_br_bi)
assert video_br_bi > 0, "Not even enough space for audio"

cmd = (
    [
        "ffmpeg",
        "-i",
        in_file,
    ]
    + filters
    + [
        "-b:v",
        str(video_br_bi),
        "-b:a",
        str(audio_br_bi),
        out_file,
    ]
)

print(" ".join(cmd))
subprocess.run(cmd, check=True)