scripts/encoder-parameters.py

48 lines
1.2 KiB
Python
Executable File

#!/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))