【发布时间】:2019-02-13 23:59:27
【问题描述】:
我有一个驻留在用户本地移动设备上的解决方案,我希望它使用 AWS REST API 将音频内容发布到 Lex。问题是该解决方案无法流式传输音频(向上或向下)并且在本地几乎没有音频处理能力。然而,Lex 有非常具体的输入要求和流输出。
因此访问将通过充当代理的 API 网关使用 Lambda (Python 2.7) 函数来处理音频问题。
输出已全部处理完毕,Lambda 代码将 AudioStream 保存到文件中并将该文件作为响应正文发送,这工作正常。但是我无法让输入起作用。
输入音频是作为 POST 请求正文发送的 MP3 文件,我需要将其转换为 Lex 可接受的格式。
我研究了以下方法
原生 AWS
使用 S3 和 Elastic Transcoder - 转码为 PCM 时允许的最低采样率为 22050,但 Lex 要求 16000,这似乎也不允许转码为 Opus 格式
使用 MediaConvert - 看不到要转换为 PCM 或 Opus 的设置
原生 Python
Python 似乎没有本机解压 MP3 的能力。我读到这会很慢,不值得做。
导入库
使用 ffmpeg-python 或 ffmpy - 但这涉及创建部署包或类似的东西。我可以走这条路,但这对于我想做的事情来说似乎过于复杂了。
使用 Python 以外的东西
我选择了 Python,因为我更熟悉在 Lambda 中使用它进行编码,但也许 C#、Node、Java 8 有一些可用的东西可以使这在 Lambda 函数中变得容易。
目前我正在考虑执行以下操作
- 使用 Python 将 MP3 文件保存到 S3 存储桶
- 让 Elastic Transcoder 以 22050 采样率将该 MP3 转换为 PCM(但所有其他设置都设置为 Lex 需要)
- Lambda 从 S3 读回转码文件
- 使用wave(import wav)库读取文件,然后以16000的采样率写入文件(这个步骤我不确定)
- 将文件(以正确的采样率)发布到 Lex
当然这里会有一些延迟问题,但只要它们不太严重,我愿意忍受它们。对于我认为相当简单的任务来说,这似乎过于复杂。不过,这是迄今为止我想出的最好的,但即使要证明它也需要花费数小时的时间,而且我已经花了好几天的时间。
那么主要的问题是是否可以在 AWS Lambda 中使用 Python Wave 库以这种方式修改采样率?
如果没有,有没有办法通过创建部署包、使用我尚未研究的 AWS 功能或在 Python 以外的其他东西中更简洁的方式来解决这个问题?
问题是这个应用程序的 Lex 部分应该是一个不错的选择,它不是主要功能,但它占用了大部分开发时间,我几乎要放弃它了但我想我会先在这里问。
【问题讨论】:
标签: amazon-web-services audio aws-lambda transcoding