Не удается заставить пакет сборки FFMPEG работать в Heroku Node.js сервер (с использованием Fluent-FFMPEG)

#node.js #heroku #ffmpeg #fluent-ffmpeg

Вопрос:

Я использую библиотеку «fluent-ffmpeg» на своем сервере Nodejs, которая упрощает использование инструмента редактирования аудио/видео под названием FFmpeg, который загружается локально на мой компьютер.

При запуске на моем компьютере я указываю fluent-ffmpeg на локальные исполняемые файлы FFmpeg и FFprobe на моем компьютере, вот так:

 import ffmpeg from "fluent-ffmpeg";

// When running locally, set FFmpeg and FFprobe path to the local executable files
ffmpeg.setFfmpegPath("C:/Program Files/FFMPEG/ffmpeg.exe");
ffmpeg.setFfprobePath("C:/Program Files/FFMPEG/ffprobe.exe");
 

При развертывании в Heroku я должен использовать «пакет сборки» FFmpeg.

Я пробовал два:

  1. https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest
  2. https://github.com/HasibulKabir/heroku-buildpack-ffmpeg-ffprobe

Ни один из них не работал на меня. Всякий раз, когда я использую команду FFmpeg, я получаю следующую ошибку в своих журналах heroku:

 2021-07-24T15:22:52.970990 00:00 app[web.1]:   code: 'ENOENT',
2021-07-24T15:22:52.970990 00:00 app[web.1]:   syscall: 'spawn C:/Program Files/FFMPEG/',
2021-07-24T15:22:52.970990 00:00 app[web.1]:   path: 'C:/Program Files/FFMPEG/',
2021-07-24T15:22:52.970991 00:00 app[web.1]:   spawnargs: [
2021-07-24T15:22:52.970991 00:00 app[web.1]:     '-show_streams',
2021-07-24T15:22:52.970991 00:00 app[web.1]:     '-show_format',
2021-07-24T15:22:52.970992 00:00 app[web.1]:     'temp/cf3b5f1ae270df824921364573a4366b'
2021-07-24T15:22:52.970992 00:00 app[web.1]:   ]
2021-07-24T15:22:52.970992 00:00 app[web.1]: }
 

Как я могу использовать fluent-ffmpeg на своем сервере Nodejs при развертывании в Heroku?

Заранее благодарю вас за помощь!

Ответ №1:

Я не смог заставить его работать с fluent-ffmpeg, но с помощью пакета buildpack:

https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest

Я смог работать с использованием команд «exec» вместо fluent-ffmpeg. Это требует, чтобы вы записывали команды ffmpeg, как вы бы делали в командной строке.

Например:

 import { exec } from "child_process";

    exec(`ffmpeg -f concat -safe 0 -i ${filesListPath} -c copy ${mergedFilePath}`, async (error, stdout, stderr) => {
            if (error) {
                console.log(`error: ${error.message}`);
                //Do stuff to handle error
            }
            else {
               //Do stuff to handle success