#!/usr/local/bin/python # выбирает информацию по видео файлу. import subprocess import json 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 = "d:/vids/sea/Ça (1978) (+18) - поиск Яндекса по видео.mp4" 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"] = data["streams"][0]["avg_frame_rate"] info["codec"] = data["streams"][0]["codec_name"] info["filename"] = data["format"]["filename"] info["size"] = humanbytes(data["format"]["size"]) print(info)