|
import json |
|
import subprocess |
|
import re |
|
from datetime import datetime, timedelta |
|
|
|
|
|
def get_readable_time(seconds: int) -> str: |
|
result = "" |
|
(days, remainder) = divmod(seconds, 86400) |
|
days = int(days) |
|
if days != 0: |
|
result += f"{days}d " |
|
(hours, remainder) = divmod(remainder, 3600) |
|
hours = int(hours) |
|
if hours != 0: |
|
result += f"{hours}h " |
|
(minutes, seconds) = divmod(remainder, 60) |
|
minutes = int(minutes) |
|
if minutes != 0: |
|
result += f"{minutes}m " |
|
seconds = int(seconds) |
|
result += f"{seconds}s " |
|
return result.strip() |
|
|
|
|
|
def convert_bytes(size: float) -> str: |
|
"""humanize size""" |
|
if not size: |
|
return "" |
|
power = 1024 |
|
t_n = 0 |
|
power_dict = {0: " ", 1: "Ki", 2: "Mi", 3: "Gi", 4: "Ti"} |
|
while size > power: |
|
size /= power |
|
t_n += 1 |
|
return "{:.2f} {}B".format(size, power_dict[t_n]) |
|
|
|
|
|
async def int_to_alpha(user_id: int) -> str: |
|
alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"] |
|
text = "" |
|
user_id = str(user_id) |
|
for i in user_id: |
|
text += alphabet[int(i)] |
|
return text |
|
|
|
|
|
async def alpha_to_int(user_id_alphabet: str) -> int: |
|
alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"] |
|
user_id = "" |
|
for i in user_id_alphabet: |
|
index = alphabet.index(i) |
|
user_id += str(index) |
|
user_id = int(user_id) |
|
return user_id |
|
|
|
|
|
def time_to_seconds(time): |
|
stringt = str(time) |
|
return sum(int(x) * 60**i for i, x in enumerate(reversed(stringt.split(":")))) |
|
|
|
|
|
def seconds_to_min(seconds): |
|
if seconds is not None: |
|
seconds = int(seconds) |
|
d, h, m, s = ( |
|
seconds // (3600 * 24), |
|
seconds // 3600 % 24, |
|
seconds % 3600 // 60, |
|
seconds % 3600 % 60, |
|
) |
|
if d > 0: |
|
return "{:02d}:{:02d}:{:02d}:{:02d}".format(d, h, m, s) |
|
elif h > 0: |
|
return "{:02d}:{:02d}:{:02d}".format(h, m, s) |
|
elif m > 0: |
|
return "{:02d}:{:02d}".format(m, s) |
|
elif s > 0: |
|
return "00:{:02d}".format(s) |
|
return "-" |
|
|
|
|
|
def speed_converter(seconds, speed): |
|
if str(speed) == str("0.5"): |
|
seconds = seconds * 2 |
|
if str(speed) == str("0.75"): |
|
seconds = seconds + ((50 * seconds) // 100) |
|
if str(speed) == str("1.5"): |
|
seconds = seconds - ((25 * seconds) // 100) |
|
if str(speed) == str("2.0"): |
|
seconds = seconds - ((50 * seconds) // 100) |
|
collect = seconds |
|
if seconds is not None: |
|
seconds = int(seconds) |
|
d, h, m, s = ( |
|
seconds // (3600 * 24), |
|
seconds // 3600 % 24, |
|
seconds % 3600 // 60, |
|
seconds % 3600 % 60, |
|
) |
|
if d > 0: |
|
convert = "{:02d}:{:02d}:{:02d}:{:02d}".format(d, h, m, s) |
|
return convert, collect |
|
elif h > 0: |
|
convert = "{:02d}:{:02d}:{:02d}".format(h, m, s) |
|
return convert, collect |
|
elif m > 0: |
|
convert = "{:02d}:{:02d}".format(m, s) |
|
return convert, collect |
|
elif s > 0: |
|
convert = "00:{:02d}".format(s) |
|
return convert, collect |
|
return "-" |
|
|
|
|
|
def check_duration(file_path): |
|
command = [ |
|
"ffprobe", |
|
"-loglevel", |
|
"quiet", |
|
"-print_format", |
|
"json", |
|
"-show_format", |
|
"-show_streams", |
|
file_path, |
|
] |
|
|
|
pipe = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) |
|
out, err = pipe.communicate() |
|
_json = json.loads(out) |
|
|
|
if "format" in _json: |
|
if "duration" in _json["format"]: |
|
return float(_json["format"]["duration"]) |
|
|
|
if "streams" in _json: |
|
for s in _json["streams"]: |
|
if "duration" in s: |
|
return float(s["duration"]) |
|
|
|
return "Unknown" |
|
|
|
|
|
formats = [ |
|
"webm", |
|
"mkv", |
|
"flv", |
|
"vob", |
|
"ogv", |
|
"ogg", |
|
"rrc", |
|
"gifv", |
|
"mng", |
|
"mov", |
|
"avi", |
|
"qt", |
|
"wmv", |
|
"yuv", |
|
"rm", |
|
"asf", |
|
"amv", |
|
"mp4", |
|
"m4p", |
|
"m4v", |
|
"mpg", |
|
"mp2", |
|
"mpeg", |
|
"mpe", |
|
"mpv", |
|
"m4v", |
|
"svi", |
|
"3gp", |
|
"3g2", |
|
"mxf", |
|
"roq", |
|
"nsv", |
|
"flv", |
|
"f4v", |
|
"f4p", |
|
"f4a", |
|
"f4b", |
|
] |
|
|
|
|
|
def parse_time(time_str: str) -> timedelta: |
|
matches = re.match(r"(\d+)([d|h|m|s])", time_str) |
|
if matches: |
|
quantity, unit = matches.groups() |
|
quantity = int(quantity) |
|
if unit == 'd': |
|
return timedelta(days=quantity) |
|
elif unit == 'h': |
|
return timedelta(hours=quantity) |
|
elif unit == 'm': |
|
return timedelta(minutes=quantity) |
|
elif unit == 's': |
|
return timedelta(seconds=quantity) |
|
return timedelta(minutes=0) |
|
|