Jourloy
@Jourloy
NodeJS разработчик

Почему fluent-ffmpeg собирает видео неправильной длины?

У меня есть видео, я его разбиваю на фотографии, фотографии обрабатываю и хочу снова собрать точно такое-же видео.
До последнего пункта все идет нормально, но вот сборка видео у меня идет не правильно

Допустим, у меня есть видео на 10 секунд. После сборки это видео уже 14 секунд и когда его включаешь, то такое чувство, что fluent-ffmpeg замедляет его

Я попробовал сделать тоже самое, но уже не через NodeJS, а просто из консоли и все прошло отлично. Видео собралось по длине такое-же, как и оригинал
Команда для терминала

ffmpeg -r 30/1 -I путь_до_папки/frame-%d.jpeg -c:v libx264 -r 30 out.mp4

Как я пытаюсь собрать видео в NodeJS

Я пробовал и без FPS, и с одним, и с двумя, и без кодека. Перепробовал все варианты, но видео все равно какое-то замедленное

Никаких ошибок FFmpeg не выводит
const buildVideo: Promise<void> = new Promise((resolve, reject) => {
    const command = ffmpeg()
        .output(`${videoTmp.path}.mp4`)
        .input(`${tmpDir.path}/frame-%d.jpeg`)
        .input(`${audioTmp.path}.mp3`)
        .videoCodec('libx264')
        .inputFPS(30)
        .outputFPS(30)
        .on('error', (error) => {
            this.logger.error(`FFMPEG ERROR: ${error}`);
            reject(error);
        })
        .on('end', function () {
            resolve();
        })
        .run();
});

await buildVideo;

  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
дело в порядке опций:
в варианте NodeJS -r 30 идёт уже после -i имяфайла и поэтому к нему не относится. Ко входу в результате применяется дефолтная частота 25.

Из документации Fluent:
The following methods enable passing input-related options to ffmpeg. Each of these methods apply on the last input added (including the one passed to the constructor, if any). You must add an input before calling those, or an error will be thrown.

Попробуйте указать опцию .inputFPS(30) сразу за .input(`${tmpDir.path}/frame-%d.jpeg`)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы