尝试在 lambda 上执行 FFMPEG 构建时出现"Invalid or unexpected token"错误



我有一个节点.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 构建。

这不是您下载的 ffmpeg 二进制文件中的错误。ELF - 这是意外的令牌 - 意味着您的require语句之一加载二进制文件而不是JavaScript文件或模块(什么是ELF - 换行符?

错误的起源 - 正如堆栈跟踪所说 - 在/download.js:17:18 var ffmpeg = require('ffmpeg'),所以有问题的require语句是你的require('ffmpeg')

require加载ffmpeg而不是ffmpeg模块的原因是,一方面二进制文件位于require查找模块的位置之一,并且在ffmpeg模块之前找到。

相关内容

  • 没有找到相关文章

最新更新