# 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 # . """ ✘ Commands Available - •`{i}sample ` Creates Short sample of video.. • `{i}vshots ` Creates screenshot of video.. • `{i}vtrim - in seconds` Crop a Lengthy video.. """ import glob import os from pyUltroid.fns.tools import set_attributes from . import ( ULTConfig, bash, duration_s, eod, genss, get_string, mediainfo, stdr, ultroid_cmd, ) @ultroid_cmd(pattern="sample( (.*)|$)") async def gen_sample(e): sec = e.pattern_match.group(1).strip() stime = int(sec) if sec and sec.isdigit() else 30 vido = await e.get_reply_message() if vido and vido.media and "video" in mediainfo(vido.media): msg = await e.eor(get_string("com_1")) file, _ = await e.client.fast_downloader( vido.document, show_progress=True, event=msg ) file_name = (file.name).split("/")[-1] out = file_name.replace(file_name.split(".")[-1], "_sample.mkv") xxx = await msg.edit(f"Generating Sample of `{stime}` seconds...") ss, dd = await duration_s(file.name, stime) cmd = f'ffmpeg -i "{file.name}" -preset ultrafast -ss {ss} -to {dd} -codec copy -map 0 "{out}" -y' await bash(cmd) os.remove(file.name) attributes = await set_attributes(out) mmmm, _ = await e.client.fast_uploader( out, show_progress=True, event=xxx, to_delete=True ) caption = f"A Sample Video Of `{stime}` seconds" 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_8"), time=5) @ultroid_cmd(pattern="vshots( (.*)|$)") async def gen_shots(e): ss = e.pattern_match.group(1).strip() shot = int(ss) if ss and ss.isdigit() else 5 vido = await e.get_reply_message() if vido and vido.media and "video" in mediainfo(vido.media): msg = await e.eor(get_string("com_1")) file, _ = await e.client.fast_downloader( vido.document, show_progress=True, event=msg ) xxx = await msg.edit(f"Generating `{shot}` screenshots...") await bash("rm -rf ss && mkdir ss") cmd = f'ffmpeg -i "{file.name}" -vf fps=0.009 -vframes {shot} "ss/pic%01d.png"' await bash(cmd) os.remove(file.name) pic = glob.glob("ss/*") text = f"Uploaded {len(pic)}/{shot} screenshots" if not pic: text = "`Failed to Take Screenshots..`" pic = None await e.respond(text, file=pic) await bash("rm -rf ss") await xxx.delete() @ultroid_cmd(pattern="vtrim( (.*)|$)") async def gen_sample(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 "video" in mediainfo(vido.media): msg = await e.eor(get_string("audiotools_5")) file, _ = await e.client.fast_downloader( vido.document, show_progress=True, event=msg ) file_name = (file.name).split("/")[-1] out = file_name.replace(file_name.split(".")[-1], "_trimmed.mkv") if int(b) > int(await genss(file.name)): os.remove(file.name) return await eod(msg, get_string("audiotools_6")) ss, dd = stdr(int(a)), stdr(int(b)) xxx = await msg.edit(f"Trimming Video from `{ss}` to `{dd}`...") cmd = f'ffmpeg -i "{file.name}" -preset ultrafast -ss {ss} -to {dd} -codec copy -map 0 "{out}" -y' await bash(cmd) os.remove(file.name) attributes = await set_attributes(out) mmmm, _ = await e.client.fast_uploader( out, show_progress=True, event=msg, to_delete=True ) caption = f"Trimmed Video From `{ss}` To `{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_8"), time=5)