34 lines
833 B
Python
34 lines
833 B
Python
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
|