from chain_service.utils.sync_to_async import sync_to_async import os import ffmpeg import aiofiles from uuid import uuid4 from io import BytesIO class AudioConverterService: @sync_to_async def __mp3_to_ogg(self, mp3: BytesIO) -> str: filename = f"./audios/{uuid4()}.ogg" process = ( ffmpeg.input("pipe:") .output(filename, loglevel="quiet") .overwrite_output() .run_async(pipe_stdin=True) ) process.communicate(input=mp3.getbuffer()) return filename async def mp3_to_ogg(self, mp3: BytesIO) -> BytesIO: filename = await self.__mp3_to_ogg(mp3) async with aiofiles.open(filename, "rb") as file: content = BytesIO(initial_bytes=await file.read()) os.remove(filename) return content