2016-12-15 4 views
6

Я хочу использовать fluent-ffmpeg для создания видео из последних n изображений каталога или записей в базе данных.fluent-ffmpeg из массива входных файлов

Каков правильный синтаксис?

Это мои попытки:

Мимической команда оболочки

ffmpeg() 
    .addInput('ls *png | tail -n 17') 
    .inputOptions("-pattern_type glob") 
    .output("output.mp4").run() 

но не принимает команды оболочки;

пространство - отделенный пути

ffmpeg() 
    .addInput('a*.png b*.png ') 
    .inputOptions("-pattern_type glob") 
    .output("output.mp4").run() 

но не принимает список файлов, разделенных пробелами;

Массив изображения путей

ffmpeg() 
    .addInput(array) // ['aa.png', 'a1.png',,,'bbb.png'] 
    .inputOptions("-pattern_type glob") 
    .output("output.mp4").run() 

но не принимает массивы.

EDIT:

Кроме того, из Merge Multiple Videos using node fluent ffmpeg, я могу добавить несколько входов, используя массив файлов,

var ffmpeg= require('fluent-ffmpeg'); 
var f=ffmpeg() 
pngarr.forEach(p => f.input(p)) /// pngarr is my array of png paths 

Но работает

f.output("./output.mp4").run() 

я получаю только видео из 0 секунд, содержащих первый png списка.

ответ

3

В FFmpeg методы цепной, так что вы можете использовать редуктор, как так:

var chainedInputs = inputlist.reduce((result, inputItem) => result.addInput(inputItem), ffmpeg()); 

Ваше последнее редактирование почти сделал то же самое, но он продолжает называть .Входной() на том же уровне, а не на top of previous

+0

Но 'chainedInputs.output (" ./ output.mp4 "). run()' все еще возвращает 0-секундное видео, содержащее первый png списка –