如何将Blob文件转换为特定格式?

6

我正在使用ReactJS和Django框架构建一个Web应用程序。

在这个Web应用程序中,有一部分是我录制音频文件并将其发送到后端进行保存。

这是我从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'

1
请问您能否提供更多关于如何在JS中创建blob的细节? - kerasbaz
@kerasbaz 我会查看这个链接。 - Youness Saadna
@okawo 我已经做了,看一下编辑 - Youness Saadna
是的,那不是一个wav文件(我的wav文件看起来像这样`b'RIFF:\ x10x00WAVEfmt \ x10\x00\x00\x00\x01\x00\x02\x00@ \ x1f\x00\x00\x00} \ x00\x00\x04\x00x10x00data4_ \ x1 ...'),Fleep正确描述了您的文件,我猜测Python也正确地编写了您的文件(因为您直接编写了二进制文件),所以我猜测您的数据格式不正确。在写入之前打印出第一块进行双重检查。 - Oleg Vorobiov
你尝试过将保存的文件打开成视频吗? - Oleg Vorobiov
显示剩余9条评论
2个回答

0

-2

看起来 react-voice-recorder 内部使用默认选项的 MediaRecorder 对象。但是在选项中,您可以设置正确的 mimeType,例如 audio/webm; codecs=opus


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接