audio converter

This commit is contained in:
Robert 2024-03-19 00:24:27 +07:00
parent 90a0343cbb
commit 75eb1196b0
No known key found for this signature in database
GPG Key ID: F631C7FD957D5F22
4 changed files with 48 additions and 0 deletions

2
.gitignore vendored
View File

@ -160,3 +160,5 @@ cython_debug/
#.idea/ #.idea/
.env .env
audios/*.mp3
audios/*.ogg

0
audios/.gitkeep Normal file
View File

View File

@ -0,0 +1,13 @@
from chain_service.services.audio_converter import AudioConverterService
from fastapi import Depends
from typing import Annotated
def get_audio_converter_service() -> AudioConverterService:
return AudioConverterService()
AudioConverterServiceDependency = Annotated[
AudioConverterService, Depends(get_audio_converter_service)
]

View File

@ -0,0 +1,33 @@
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