* Ultroid 2025 Co-authored-by: New-dev0 <New-dev0@users.noreply.github.com> Co-authored-by: Amit Sharma <buddhhu@users.noreply.github.com> Co-authored-by: TechiError <techierror@users.noreply.github.com> Co-authored-by: Aditya <me@xditya.me> Co-authored-by: Arnab Paryali <Arnabxd@users.noreply.github.com> Co-authored-by: hellboi_atul <hellboi-atul@users.noreply.github.com> Co-authored-by: sppidy <sppidy@users.noreply.github.com>
161 lines
4.8 KiB
Python
161 lines
4.8 KiB
Python
# Ultroid - UserBot
|
|
# Copyright (C) 2021-2025 TeamUltroid
|
|
#
|
|
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
|
|
# PLease read the GNU Affero General Public License in
|
|
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
|
|
|
|
|
|
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,
|
|
uploader,
|
|
)
|
|
|
|
__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()
|
|
mmmm = await uploader(out, out, f_time, xxx, f"Uploading {out}...")
|
|
attributes = await set_attributes(out)
|
|
|
|
caption = get_string("audiotools_7").format(ss, dd)
|
|
await e.client.send_file(
|
|
e.chat_id,
|
|
mmmm,
|
|
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:
|
|
fo = await uploader(out_file, out_file, f_time, msg, f"Uploading {out_file}...")
|
|
|
|
except FileNotFoundError:
|
|
return await eor(msg, get_string("audiotools_9"))
|
|
await e.reply(
|
|
get_string("audiotools_10"),
|
|
file=fo,
|
|
thumb=ULTConfig.thumb,
|
|
attributes=attributes,
|
|
)
|
|
await msg.delete()
|