Node.js ffmpeg, создавая видео в формате mp4 из 2 или более изображений jpg - PullRequest
0 голосов
/ 09 мая 2020

Я делаю видеоаниматор, который сначала генерирует .jpg изображения из тега html canvas, а затем использует изображения в качестве кадров для видео. Я использую ffmpeg для создания видео.

Он работает, когда используется только 1 изображение

const ffmpeg = require('fluent-ffmpeg');
ffmpeg.setFfmpegPath("C://Program Files/ffmpeg/bin/ffmpeg.exe");

var command = ffmpeg();

command
    .input("./test.jpg")
    .save("./test.mp4")
    .outputFPS(1)
    .on('end', () => {
        console.log("done");
    });

Я получил его для создания видео в формате mp4, которое 1 секунда с этим кодом, но это только одно изображение / кадр.

То, что я пытаюсь сделать (2+ изображения)

const ffmpeg = require('fluent-ffmpeg');
ffmpeg.setFfmpegPath("C://Program Files/ffmpeg/bin/ffmpeg.exe");

var command = ffmpeg();

command
    .input("./test.jpg")
    .input("./another.jpg")
    .save("./test.mp4")
    .outputFPS(1)
    .frames(2)
    .on('end', () => {
        console.log("done");
    });

Это не работает, поскольку генерирует то же видео, что и в первом примере. Вместо того, чтобы показывать одно изображение для первой секунды и другое изображение для второй секунды, он генерирует односекундное видео, в котором есть только первое изображение.

Кто-нибудь может показать, как это исправить?

1 Ответ

1 голос
/ 09 мая 2020

Хорошо. После просмотра документации кажется, что единственный способ добавить два изображения в качестве входных данных - это использовать шаблон файла изображения.

Мне просто нужно было назвать изображения в шаблоне, например

image0.jpg
image1.jpg
image2.jpg

Или с дополнительными предшествующими нулями, если мне нужно 10+ или 100+ изображений.

Теперь я могу просто сделай command.input("./image%1d.jpg"). Надеюсь, это поможет людям в будущем, у которых была такая же проблема, как и у меня.

...