#!/usr/local/bin/python # выбирает информацию по видео файлу. import os import subprocess import json import zlib import datetime # правильный перевод! def humanbytes(B): """Return the given bytes as a human friendly KB, MB, GB, or TB string.""" B = float(B) KB = float(1024) MB = float(KB ** 2) # 1,048,576 GB = float(KB ** 3) # 1,073,741,824 TB = float(KB ** 4) # 1,099,511,627,776 if B < KB: return '{0} {1}'.format(B,'Bytes' if 0 == B > 1 else 'Byte') elif KB <= B < MB: return '{0:.2f} KB'.format(B / KB) elif MB <= B < GB: return '{0:.2f} MB'.format(B / MB) elif GB <= B < TB: return '{0:.2f} GB'.format(B / GB) elif TB <= B: return '{0:.2f} TB'.format(B / TB) # file_info def file_info(fn): meta = {} with open(fn, 'rb') as fp: filename, file_extension = os.path.splitext(fn) created = os.path.getmtime(fn) dt_m = datetime.datetime.fromtimestamp(created) size = os.path.getsize(fn) data = fp.read() meta["name"] = fn meta["path"] = os.path.splitdrive(fn)[1] meta["ext"] = file_extension.lower() meta["date"] = dt_m meta["type"] = "meta" meta["crc"] = zlib.crc32(data) meta["size"] = size return meta def humanbitrate(s): items = s.split("/") a = float(items[0]) b = float(items[1]) bitrate = "%8.1f" % (a / b) return bitrate.strip() # =================== начало программы ==================== file = "d:/vids/sea/Ça (1978) (+18) - поиск Яндекса по видео.mp4" meta = file_info(file) #print(meta) cmd = "ffprobe -v quiet -print_format json -show_format -show_streams \"%s\"" % file output = subprocess.run(cmd, capture_output=True, text=True, shell=True) # обычный вывод #output = subprocess.run(cmd, text=True, shell=True) #print(output) data = json.loads(output.stdout) info = {} info["audio"] = len(data["streams"]) > 1 total_seconds = datetime.timedelta(seconds=float(data["format"]["duration"])) info["duration"] = datetime.datetime.strptime(str(total_seconds), "%H:%M:%S.%f").strftime("%H:%M:%S") info["width"] = data["streams"][0]["width"] info["height"] = data["streams"][0]["height"] info["bit_rate"] = humanbitrate(data["streams"][0]["avg_frame_rate"]) info["codec"] = data["streams"][0]["codec_name"] info["filename"] = meta["name"] info["ext"] = meta["ext"] info["crc"] = meta["crc"] info["created"] = meta["date"] info["hcreated"] = meta["date"].strftime("%d.%m.%Y") info["size"] = data["format"]["size"] info["hsize"] = humanbytes(data["format"]["size"]) print(info)