Comment convertir un fichier blob dans un format spécifique?

Aug 19 2020

Je construis une application web avec ReactJS et le framework Django.

Dans cette application Web, il y a une partie où j'enregistre un fichier audio et l'envoie au backend pour le sauvegarder.

Voici les données blob de ReactJS que j'envoie:

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

Et voici le code que j'utilise dans le backend:

@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) 

Lorsque je lis le fichier que j'ai enregistré, il joue du son mais il plante quand il atteint la fin.

Ce problème me fait chercher des informations sur le fichier que j'ai sauvegardé (extension, ...).

Pour cette raison, j'ai utilisé la fleepbibliothèque:

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)

PRODUCTION:

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

Mais obtenir la vidéo en sortie!

  • Est-ce que je fais quelque chose de mal?
  • Comment puis-je résoudre ce problème?
  • Puis-je utiliser quelque chose pour enregistrer mon fichier au format souhaité?

Toute aide est appréciée.

ÉDITER:

Sortie des 128 premiers octets du fichier enregistré:

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'

Réponses

Benny Aug 28 2020 at 16:19

Utilisez SciPy pour lire et écrire des données dans une variété de formats de fichiers.

Exemples d'utilisation:

  • Ecrire un fichier wav en Python avec wavfile.write de SciPy
  • scipy.io.wavfile.write