简体   繁体   中英

fluent-ffmpeg from an array of input files

I want to use fluent-ffmpeg to create a video of last n images of a directory, or database entries.

Which is the correct syntax?

These are my tries:

Mimic shell command

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

but it does not accept shell commands;

space - separated paths

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

but it does not accept list of files separated by spaces;

Array of image paths

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

but it does not accept arrays.

EDIT:

Also, from Merge Multiple Videos using node fluent ffmpeg , I am able to add multiple inputs using an array of files as

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

But running

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

I obtain just a video of 0 seconds containing the first png of the list.

The ffmpeg methods are chainable, so you could use a reducer like so:

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

Your last edit nearly did the same thing, but it keeps calling .input() on the same level instead of on top of the previous

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM