Spaces:
Running
Running
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) # Default or error case | |