audio converter
This commit is contained in:
parent
90a0343cbb
commit
75eb1196b0
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -160,3 +160,5 @@ cython_debug/
|
||||||
#.idea/
|
#.idea/
|
||||||
|
|
||||||
.env
|
.env
|
||||||
|
audios/*.mp3
|
||||||
|
audios/*.ogg
|
||||||
|
|
|
||||||
0
audios/.gitkeep
Normal file
0
audios/.gitkeep
Normal file
13
chain_service/dependencies/audio_converter_service.py
Normal file
13
chain_service/dependencies/audio_converter_service.py
Normal 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)
|
||||||
|
]
|
||||||
33
chain_service/services/audio_converter.py
Normal file
33
chain_service/services/audio_converter.py
Normal 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
|
||||||
Loading…
Reference in New Issue
Block a user