2017-06-08 4 views
2

J'ai trouvé beaucoup d'échantillons pour cela, mais aucun d'eux ne fonctionnait correctement pour moi.Utilisation du nœud fluent-ffmpeg pour convertir des images en vidéo

J'ai quelques images. Soit les URL, Base64s ou Buffers.

Je dois les convertir en vidéo, sans altérer la qualité.

Le plus proche que je suis venu était cette commande:
ffmpeg -framerate 1 pattern_type glob -i 'images/*.jpg' -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

Mais il a montré une image par seconde. J'ai besoin de la vidéo à 30fps, pas 1 image avec 30 images, mais 30 images en une seconde.

Quelqu'un peut-il m'aider?

Répondre

0

j'ai fini à l'aide d'un autre paquet - ffmpeg-stream

Je recevais les images de AWS, donc il y a un code AWS ci-dessous:

const frames = ['frame1.jpg', 'frame2.jpg', ...] 

const conv = ffmpeg() // create converter 
const input = conv.input({f: 'image2pipe', r: 30}) // create input writable stream 
conv.output('out.mp4', {vcodec: 'libx264', pix_fmt: 'yuv420p'}) // output to file 

// for every frame create a function that returns a promise 
frames.map(filename =>() => 
    new Promise((fulfill, reject) => 
    s3 
     .getObject({Bucket: '...', Key: filename}) 
     .createReadStream() 
     .on('end', fulfill) // fulfill promise on frame end 
     .on('error', reject) // reject promise on error 
     .pipe(input, {end: false}) // pipe to converter, but don't end the input yet 
) 
) 
// reduce into a single promise, run sequentially 
.reduce((prev, next) => prev.then(next), Promise.resolve()) 
// end converter input 
.then(() => input.end()) 

conv.run() 

Voilà la question que j'avais posté sur le repo github : https://github.com/phaux/node-ffmpeg-stream/issues/5