#!/usr/bin/env python import re import sys import json import time import base64 import hashlib import subprocess as sp try: from copyparty.util import fsenc except: def fsenc(p): return p """ dep: ffmpeg """ def det(): # fmt: off cmd = [ "ffmpeg", "-nostdin", "-hide_banner", "-v", "fatal", "-i", fsenc(sys.argv[1]), "-f", "framemd5", "-" ] # fmt: on p = sp.Popen(cmd, stdout=sp.PIPE) # ps = io.TextIOWrapper(p.stdout, encoding="utf-8") ps = p.stdout chans = {} for ln in ps: if ln.startswith(b"#stream#"): break m = re.match(r"^#media_type ([0-9]): ([a-zA-Z])", ln.decode("utf-8")) if m: chans[m.group(1)] = m.group(2) hashers = [hashlib.sha512(), hashlib.sha512()] for ln in ps: n = int(ln[:1]) v = ln.rsplit(b",", 1)[-1].strip() hashers[n].update(v) r = {} for k, v in chans.items(): dg = hashers[int(k)].digest()[:12] dg = base64.urlsafe_b64encode(dg).decode("ascii") r[v[0].lower() + "hash"] = dg print(json.dumps(r, indent=4)) def main(): try: det() except: pass # mute if __name__ == "__main__": main()