Правильный способ отправить mp3-файл в формате Python без потери метаданных. (Base64 или иначе) | AWS Lambda | S3 | Расшифровывать | Base64 | - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь создать простой конвейер, используя AWS Transcribe, службу преобразования речи в текст, предоставляемую Amazon. На входе он принимает mp3 или wav (среди других форматов). Пытаясь создать своего рода API, который мог бы принимать MP3 из внешнего интерфейса, я постоянно получаю format not supported ошибки, такие как Unsupported audio format: matroska,webm.

Результирующий mp3-файл будет работать на Windows Media Player с правильным аудио, но с неработающим временным индексом (показало 400 часов для 10-секундного клипа) и вообще не будет работать на VL C. Я считаю, что мне может не хватать чего-то фундаментального в кодировке base 64.

Я считаю, что предыдущие заголовки, которые обычно передаются, такие как data:audio/mp3;base64, предназначены для синтаксического анализа веб-интерфейса и не сохраняются в конечном файле. У меня ниже самый простой вариант моего кода. Еще одно небольшое дополнение: мне нужно хранить mp3-файл в корзине S3, чтобы конвейер работал

Клиент

with open(mp3_file_name, "rb") as h:
    m = base64.b64encode(h.read()).decode('utf-8')

request_body = {
   "mp3_base64": m
}

headers = {
    'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data = json.dumps(request_body))

Сервер

mp3_base64 = params.get('mp3_base64')
with open(tmp, "wb") as f:
  f.write(base64.b64decode(mp3_base64))

s3_client = boto3.client('s3')
try:
  response = s3_client.upload_file(tmp, bucket, object_name)
...