【发布时间】:2019-01-04 23:27:54
【问题描述】:
我有一个 node.js 脚本,它使用 ffmpeg 将从 YT 下载的 mp4 转换为 mp3 并保存到 Amazon S3。使用无服务器框架上传。 “ffmpeg”文件包含在主目录中(带有 .yml),从这里下载:
https://johnvansickle.com/ffmpeg/
代码:
'use strict'
process.env.PATH = process.env.PATH + ':/tmp/'
process.env['FFMPEG_PATH'] = '/tmp/ffmpeg';
const BIN_PATH = process.env['LAMBDA_TASK_ROOT']
process.env['PATH'] = process.env['PATH'] + ':' + BIN_PATH;
module.exports.download_mp3 = function (event, context, callback)
{
require('child_process').exec('cp /var/task/ffmpeg /tmp/.; chmod 755
/tmp/ffmpeg;', function (error, stdout, stderr) {
if (error)
{
console.log('An error occured', error);
callback(null, null)
}
else
{
var ffmpeg = require('ffmpeg');
const aws = require('aws-sdk')
const s3 = new aws.S3()
const ytdl = require('ytdl-core');
function uploadFromStream(s3) {
const stream = require('stream')
var pass = new stream.PassThrough();
var params = {Bucket: "some-bucket", Key: "some-key", Body: pass};
s3.upload(params, function(err, data) {
console.log(err, data);
});
console.log("Should be finished")
callback(null)
}
let stream = ytdl("some-video-id", {
quality: 'highestaudio',
filter: 'audioonly'
});
ffmpeg(stream)
.audioBitrate(128)
.format('mp3')
.on('error', (err) => console.error(err))
.pipe(uploadFromStream(s3), {
end: true
});
}})
}
触发时,函数会在日志中写入错误:
2019-01-04T14:50:54.525Z 21da4d49-1030-11e9-b901-0dc32b691a16
/var/task/ffmpeg:1
(function (exports, require, module, __filename, __dirname) { ELF
^
SyntaxError: Invalid or unexpected token
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:616:28)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at /var/task/download.js:17:18
这是我上面提到的“ffmpeg”文件中的一个错误(提供了链接)。但我不知道确切的问题是什么,我在这里按照第一个答案:https://stackoverflow.com/questions/47882810/lambda-not-connecting-to-ffmpeg 包含 ffmpeg 构建。
【问题讨论】:
-
如果无法访问您的环境就很难调试。你可能在不同的地方搞砸了。在
require('ffmpeg')之前的console.dir(require.resolve( 'ffmpeg'))为您显示什么?
标签: javascript amazon-web-services ffmpeg aws-lambda serverless-framework