child_process.exec ffmpeg зависает на неопределенный срок

#node.js #ffmpeg

Вопрос:

Следующий код зависает на неопределенный срок:

 const pathToFfmpeg = require('ffmpeg-static');
const { promisify } = require('util');
const exec = promisify(require('child_process').exec)

(async function() {
  console.log("Starting.");
  let outputLogs = await exec(`${pathToFfmpeg} -i input.mp4 output.gif`);
  console.log("Finished:", outputLogs);
})();
 

Это сработало в первый раз, но потом молча зависает навсегда.

Комментарии:

1. В подобных случаях вам следует зарегистрировать stdout и stderr, чтобы узнать, что происходит.

Ответ №1:

Это потому ffmpeg , что ждет ввода пользователя о том, следует ли перезаписывать output.gif, которая уже существует. Передайте -y флаг (который отвечает «да» на вопрос о перезаписи автоматически/без взаимодействия) следующим образом:

 await exec(`${pathToFfmpeg} -y -i input.mp4 output.gif`);
 

(Создаю эти вопросы и ответы, чтобы, надеюсь, таким, как я, не пришлось тратить полчаса на отладку этого.)