Blob 파일을 특정 형식으로 변환하는 방법은 무엇입니까?

Aug 19 2020

ReactJS와 Django 프레임 워크로 웹 애플리케이션을 구축하고 있습니다.

이 웹 어플리케이션에는 오디오 파일을 녹음하고 저장하기 위해 백엔드로 보내는 부분이 있습니다.

이것은 내가 보내는 ReactJS의 blob 데이터입니다.

Blob {
size: 29535, 
type: "audio/wav; codecs=0"
}

그리고 이것은 내가 백엔드에서 사용하는 코드입니다.

@api_view(['POST'])
@csrf_exempt
def AudioModel(request):
    try:
        audio = request.FILES.get('audio')
    except KeyError:
        return Response({'audio': ['no audio ?']}, status=HTTP_400_BAD_REQUEST)

    destination = open('audio_name.wav', 'wb')
    for chunk in audio.chunks():
        destination.write(chunk)
    destination.close()  # closing the file

    return Response("Done!", status=HTTP_200_OK) 

저장 한 파일을 재생하면 약간의 소리가 나지만 끝을 달성하면 충돌이 발생합니다.

이 문제로 인해 내가 저장 한 파일 (확장자, ...)에 대한 정보를 찾게됩니다.

이런 이유로 fleep라이브러리를 사용했습니다 .

import fleep

with open("audio_name.wav", "rb") as file:
    info = fleep.get(file.read(128))

print(info.type)
print(info.extension)
print(info.mime)

산출:

['video']
['webm']
['video/webm']

그러나 비디오 출력!

  • 내가 뭘 잘못하고 있니?
  • 이 문제를 어떻게 해결할 수 있습니까?
  • 원하는 형식으로 파일을 저장하는 데 사용할 수있는 것이 있습니까?

도움을 주시면 감사하겠습니다.

편집하다:

저장된 파일의 처음 128 바이트 출력 :

b'\x1aE\xdf\xa3\x9fB\x86\x81\x01B\xf7\x81\x01B\xf2\x81\x04B\xf3\x81\x08B\x82\x84webmB\x87\x81\x04B\x85\x81\x02\x18S\x80g\x01\xff\xff\xff\xff\xff\xff\xff\x15I\xa9f\x99*\xd7\xb1\x83\x0fB@M\x80\x86ChromeWA\x86Chrome\x16T\xaek\xbf\xae\xbd\xd7\x81\x01s\xc5\x87\xbd\x8d\xc0\xd5\xc6\xaf\xd0\x83\x81\x02\x86\x86A_OPUSc\xa2\x93OpusHead\x01\x01\x00\x00\x80\xbb\x00\x00'

답변

Benny Aug 28 2020 at 16:19

SciPy 를 사용 하여 다양한 파일 형식에서 데이터를 읽고 쓸 수 있습니다.

사용 예 :

  • SciPy에서 wavfile.write를 사용하여 Python에서 wav 파일 작성
  • scipy.io.wavfile.write