74 lines
1.3 KiB
Python
74 lines
1.3 KiB
Python
#!/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.encode("utf-8")
|
|
|
|
|
|
"""
|
|
dep: ffmpeg
|
|
"""
|
|
|
|
|
|
def det():
|
|
# fmt: off
|
|
cmd = [
|
|
b"ffmpeg",
|
|
b"-nostdin",
|
|
b"-hide_banner",
|
|
b"-v", b"fatal",
|
|
b"-i", fsenc(sys.argv[1]),
|
|
b"-f", b"framemd5",
|
|
b"-"
|
|
]
|
|
# 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()
|