gpt4 book ai didi

node.js - 如何正确地从 lambda 运行二进制文件?

转载 作者:太空宇宙 更新时间:2023-11-04 01:41:44 24 4
gpt4 key购买 nike

我试图让 sox 音频二进制文件从 lambda 运行,我遵循了这个指南: http://marcelog.github.io/articles/static_sox_transcoding_lambda_mp3.html因此,我使用 docker 和最新的 Amazon Linux 版本创建了 sox 二进制文件,并将 lambda 部署为具有以下结构的 zip 包:

sox
index.js

Lambda代码:

exports.handler = async (event) => {
initializeContext();

try {
const object = await getFile("test.mp3");

const fs = require('fs');
fs.writeFileSync("/tmp/test.mp3", object.Body);

let result = child_process.execFileSync('sox', ['/tmp/test.mp3', '/tmp/testOutput.mp3', ... <filter params here>], {
encoding: 'ascii'
// shell: true
});

const file = fs.readFileSync("/tmp/testOutput.mp3");

await putFile("testOutput.mp3", file);
}
catch(err) {
try {
await log("error", err);
}
catch(err) {}
}
};
let getFile = async function(fileName) {
const params = {
Bucket: bucket,
Key: fileName
};
return await s3.getObject(params).promise();
};

let putFile = async function(fileName, body) {
const params = {
Bucket: bucket,
Key: fileName,
Body: body
};
await s3.putObject(params).promise();
};

所以,我需要从 S3 获取文件,处理它并返回结果。 S3加载经过测试可以正常工作。但是,我在尝试启动“sox”进程时收到“EACCES”错误。我能错过什么?是否是因为我使用了最后一个 Amazon Linux 镜像,但 Lambda 使用了更旧的版本?

最佳答案

我在处理音频文件时也遇到了同样的问题。 npm 包很方便。

https://github.com/stojanovic/lambda-audio

如果你的命令是,

sox input.mp3 -c 1 output.wav

您的 Node 代码将如下所示,

const lambdaAudio = require('lambda-audio')
lambdaAudio.sox('./input.mp3 -c 1 /tmp/output.wav')
.then(response => {
// Do something when the file was converted
})
.catch(errorResponse => {
console.log('Error from the sox command:', errorResponse)
})

并将所有复杂的问题留给 npm 包。

希望有帮助。

关于node.js - 如何正确地从 lambda 运行二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52670575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com