Ufoptg's picture
Upload 87 files
cdce48f verified
import os
import time
from pyrogram.types import Message
from PIL import Image
from Hellbot.core import Config
from .tools import runcmd
async def convert_to_gif(file: str, is_video: bool = False) -> str:
resultFileName = f"gif_{round(time.time())}.mp4"
if is_video:
cmd = f"ffmpeg -i '{file}' -c copy '{resultFileName}'"
else:
cmd = f"lottie_convert.py '{file}' '{resultFileName}'"
await runcmd(cmd)
return resultFileName
async def tgs_to_png(file: str) -> str:
resultFileName = f"png_{round(time.time())}.png"
cmd = f"lottie_convert.py '{file}' '{resultFileName}'"
await runcmd(cmd)
return resultFileName
async def image_to_sticker(file: str, max_size: tuple = (512, 512)) -> tuple[bool, str]:
try:
with Image.open(file) as img:
original_width, original_height = img.size
new_width = min(original_width, max_size[0])
new_height = min(original_height, max_size[1])
if original_width > max_size[0] or original_height > max_size[1]:
img = img.resize((new_width, new_height), Image.LANCZOS)
file_name = f"sticker_{int(time.time())}.png"
img.save(file_name, "PNG")
return True, file_name
except Exception as e:
return False, str(e)
async def video_to_png(
file: str, duration: float, output: str = None
) -> tuple[str, bool]:
resultFileName = output or f"{os.path.basename(file)}.png"
cut_at = duration // 2
cmd = f"ffmpeg -ss {cut_at} -i '{file}' -vframes 1 '{resultFileName}'"
_, err, _, _ = await runcmd(cmd)
if err:
return err, False
return resultFileName, True
async def video_to_sticker(file: Message) -> tuple[str, bool]:
try:
if file.animation:
width, height = file.animation.width, file.animation.height
elif file.video:
width, height = file.video.width, file.video.height
else:
return "Unsupported media type.", False
file_path = await file.download(Config.TEMP_DIR)
output_path = os.path.join(Config.TEMP_DIR, "videoSticker.webm")
if height > width:
scale_params = f"scale=-1:512"
else:
scale_params = f"scale=512:-1"
cmd = (
f"ffmpeg -i {file_path} "
f"-vf fps=30,{scale_params} -t 3 -c:v libvpx-vp9 -b:v 256k -an -pix_fmt yuv420p -auto-alt-ref 0 -loop 0 "
f"-f webm {output_path}"
)
await runcmd(cmd)
os.remove(file_path)
return output_path, True
except Exception as e:
return f"Error during conversion: {e}", False