ffmpeg 抛出“errorMessage”:“spawn ffmpeg ENOENT”

问题描述 投票:0回答:1

我作为 shell 命令运行的 ffmpeg 函数不起作用。 我认为这是因为“ffmpeg”并没有真正指代任何东西。 我的包中有 ffmpeg 节点模块,但我不知道 execFile 命令在这里引用它。

我以 aws-lambda-ffmpeg 作为如何调用此特定函数的示例。他们将“ffmpeg”称为他们在 gulp 函数中根据 John Vansickle 的静态 FFMPEG 构建创建的 64 位 Linux 构建。

我想知道如何用像 node_module 一样识别它的东西替换“ffmpeg”,而不必执行整个 gulp 静态构建过程。据我了解,他们这样做的唯一原因是获得我真正不需要的最新版本。

如果我错了,并且出于其他原因需要使用 gulp 进行静态构建,请告诉我。

function ffmpegProcess(description, cb) {
console.log('Starting FFmpeg');

child_process.execFile(
    'ffmpeg',
    [
        '-y',
        '-loglevel', 'warning',
        '-i', 'download',
        '-c:a', 'copy',
        '-vf', scaleFilter,
        '-movflags', '+faststart',
        '-metadata', 'description=' + description,
        'out.' + config.format.video.extension,
        '-vf', 'thumbnail',
        '-vf', scaleFilter,
        '-vframes', '1',
        'out.' + config.format.image.extension
    ],
    {
        cwd: tempDir
    },
    function(err, stdout, stderr) {
        console.log('FFmpeg done.');
        return cb(err, 'FFmpeg finished:' + JSON.stringify({ stdout: stdout, stderr: stderr}));
    }
);
}
node.js ffmpeg gulp executable
1个回答
0
投票

在您引用的 aws-lambda-ffmpeg 文章中,构建了一个 Docker 映像,其中包含 ffmpeg 二进制文件。这些文件将存储在可执行路径上的某个位置,这就是

execFile
可以找到它们的方式。

在撰写本文时,我不知道有什么简单的方法可以“像节点模块一样”包含与 Lambda 兼容的 ffmpeg。最简单的方法是创建一个 Nodejs Lambda 函数(即不是基于 Docker 映像的函数)并将 ffmpeg 二进制文件添加到部署 zip 文件中。在调用

execFile
:

之前,您需要将类似的内容添加到搜索路径中
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT']
© www.soinside.com 2019 - 2024. All rights reserved.