|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import os |
|
import time |
|
from datetime import datetime as dt |
|
|
|
from pyUltroid.fns.tools import set_attributes |
|
|
|
from . import ( |
|
LOGS, |
|
ULTConfig, |
|
bash, |
|
downloader, |
|
eod, |
|
eor, |
|
genss, |
|
get_help, |
|
get_string, |
|
humanbytes, |
|
mediainfo, |
|
stdr, |
|
time_formatter, |
|
ultroid_cmd |
|
) |
|
|
|
__doc__ = get_help("help_audiotools") |
|
|
|
|
|
@ultroid_cmd(pattern="makevoice$") |
|
async def vnc(e): |
|
if not e.reply_to: |
|
return await eod(e, get_string("audiotools_1")) |
|
r = await e.get_reply_message() |
|
if not mediainfo(r.media).startswith(("audio", "video")): |
|
return await eod(e, get_string("spcltool_1")) |
|
xxx = await e.eor(get_string("com_1")) |
|
file, _ = await e.client.fast_downloader( |
|
r.document, |
|
) |
|
await xxx.edit(get_string("audiotools_2")) |
|
await bash( |
|
f"ffmpeg -i '{file.name}' -map 0:a -codec:a libopus -b:a 100k -vbr on out.opus" |
|
) |
|
try: |
|
await e.client.send_message( |
|
e.chat_id, file="out.opus", force_document=False, reply_to=r |
|
) |
|
except Exception as er: |
|
LOGS.exception(er) |
|
return await xxx.edit("`Failed to convert in Voice...`") |
|
await xxx.delete() |
|
os.remove(file.name) |
|
os.remove("out.opus") |
|
|
|
|
|
@ultroid_cmd(pattern="atrim( (.*)|$)") |
|
async def trim_aud(e): |
|
sec = e.pattern_match.group(1).strip() |
|
if not sec or "-" not in sec: |
|
return await eod(e, get_string("audiotools_3")) |
|
a, b = sec.split("-") |
|
if int(a) >= int(b): |
|
return await eod(e, get_string("audiotools_4")) |
|
vido = await e.get_reply_message() |
|
if vido and vido.media and mediainfo(vido.media).startswith(("video", "audio")): |
|
if hasattr(vido.media, "document"): |
|
vfile = vido.media.document |
|
name = vido.file.name |
|
else: |
|
vfile = vido.media |
|
name = "" |
|
if not name: |
|
name = dt.now().isoformat("_", "seconds") + ".mp4" |
|
xxx = await e.eor(get_string("audiotools_5")) |
|
c_time = time.time() |
|
file = await downloader( |
|
f"resources/downloads/{name}", |
|
vfile, |
|
xxx, |
|
c_time, |
|
f"Downloading {name}...", |
|
) |
|
|
|
o_size = os.path.getsize(file.name) |
|
d_time = time.time() |
|
diff = time_formatter((d_time - c_time) * 1000) |
|
file_name = (file.name).split("/")[-1] |
|
out = file_name.replace(file_name.split(".")[-1], "_trimmed.aac") |
|
if int(b) > int(await genss(file.name)): |
|
os.remove(file.name) |
|
return await eod(xxx, get_string("audiotools_6")) |
|
ss, dd = stdr(int(a)), stdr(int(b)) |
|
xxx = await xxx.edit( |
|
f"Downloaded `{file.name}` of `{humanbytes(o_size)}` in `{diff}`.\n\nNow Trimming Audio from `{ss}` to `{dd}`..." |
|
) |
|
cmd = f'ffmpeg -i "{file.name}" -preset ultrafast -ss {ss} -to {dd} -vn -acodec copy "{out}" -y' |
|
await bash(cmd) |
|
os.remove(file.name) |
|
f_time = time.time() |
|
n_file, _ = await e.client.fast_uploader( |
|
out, show_progress=True, event=e, message="Uploading...", to_delete=True |
|
) |
|
attributes = await set_attributes(out) |
|
|
|
caption = get_string("audiotools_7").format(ss, dd) |
|
await e.client.send_file( |
|
e.chat_id, |
|
n_file, |
|
thumb=ULTConfig.thumb, |
|
caption=caption, |
|
attributes=attributes, |
|
force_document=False, |
|
reply_to=e.reply_to_msg_id, |
|
) |
|
await xxx.delete() |
|
else: |
|
await e.eor(get_string("audiotools_1"), time=5) |
|
|
|
|
|
@ultroid_cmd(pattern="extractaudio$") |
|
async def ex_aud(e): |
|
reply = await e.get_reply_message() |
|
if not (reply and reply.media and mediainfo(reply.media).startswith("video")): |
|
return await e.eor(get_string("audiotools_8")) |
|
name = reply.file.name or "video.mp4" |
|
vfile = reply.media.document |
|
msg = await e.eor(get_string("com_1")) |
|
c_time = time.time() |
|
file = await downloader( |
|
f"resources/downloads/{name}", |
|
vfile, |
|
msg, |
|
c_time, |
|
f"Downloading {name}...", |
|
) |
|
|
|
out_file = f"{file.name}.aac" |
|
cmd = f"ffmpeg -i {file.name} -vn -acodec copy {out_file}" |
|
o, err = await bash(cmd) |
|
os.remove(file.name) |
|
attributes = await set_attributes(out_file) |
|
|
|
f_time = time.time() |
|
try: |
|
n_file, _ = await e.client.fast_uploader( |
|
out_file, show_progress=True, event=e, message="Uploading...", to_delete=True |
|
) |
|
|
|
except FileNotFoundError: |
|
return await eor(msg, get_string("audiotools_9")) |
|
await e.reply( |
|
get_string("audiotools_10"), |
|
file=n_file, |
|
thumb=ULTConfig.thumb, |
|
attributes=attributes, |
|
) |
|
await msg.delete() |
|
|