#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.
Я пробовал два:
- https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest
- 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