#!/usr/bin/env cached-nix-shell #!nix-shell -i python3 -p python3 import sys import subprocess import json def is_number(value): numeric_chars = [*map(str, range(10)), "-"] numeric_charcodes = list(map(ord, numeric_chars)) return all(ord(char) in numeric_charcodes for char in value) def parse_encoder_params(encoder_params): for param in encoder_params.split(" / "): if "=" in param: key, value = param.split("=", 1) if is_number(value): value = int(value) elif is_number(value.replace(".", "", 1)): value = float(value) else: key = param value = True yield key, value def run_mediainfo(file): cmd = [ "mediainfo", "--Inform=Video;%Encoded_Library%\\n%Encoded_Library_Settings%", file, ] process = subprocess.run(cmd, stdout=subprocess.PIPE) output = process.stdout.decode("utf-8").split("\n") encoder = output[0] params = dict(parse_encoder_params(output[1])) return {"file": file, "encoder": encoder, "params": params} info = list(map(run_mediainfo, sys.argv[1:])) print(json.dumps(info, indent=2, sort_keys=True))