Archivo video.js
Código Javascript:
Ver original
"use strict" const os=require("os");//modulo nodejs aceso SO const fs=require("fs");//acceso archivos const path=require("path");//ruta archivos const async=require("async"); const datauribuffer=require("data-uri-to-buffer"); const uuid=require("uuid"); const EventEmitter=require("events").EventEmitter; const listfiles=require("./lista.js"); const ffmpeg=require('./ffmpeg.js'); module.exports=function (images) { let events=new EventEmitter(); let count=0; let nombase=uuid.v4(); let tmpDir=os.tmpDir(); async.series([ imagenescodificar, crearvideo, codificarvideo, //limpieza ],terminarconversion); function imagenescodificar (done) { //eachSeries() por orden async.eachSeries(images,decodeImage,done); } function decodeImage (image,done) { let filename=`${nombase}-${count++}.jpg`; let buffer= datauribuffer(image); let ws=fs.createWriteStream(path.join(tmpDir,filename)); ws.on("error",done); ws.end(buffer,done); events.emit("log","convertir "+filename); } // Creando video de images con ffmpeg function crearvideo (done) { events.emit('log', 'Creando video'); ffmpeg({ baseName:nombase, folder:tmpDir },done); } //convertir function codificarvideo (done) { done(); } //limpieza disco duro de temporales function limpieza (done) { events.emit("log","Limpiando.."); listfiles(tmpDir,nombase,function (err,files) { if (err) {return done(err)} //borrado de archivos deleteFIles(files,done); }); } function deleteFIles (files,done) { async.each(files,borrfiles,done); } function borrfiles (file,done) { events.emit("log","Borrando "+file); fs.unlink(path.join(tmpDir,file),function (err) { //ignoro el error done(); }); } function terminarconversion (err) { setTimeout(function () { events.emit("video","esto es el codec video"); },1000); } return events; }
Archivo ffmpeg.js
Código Javascript:
Ver original
"use strict" const os=require("os"); const path=require("path"); const spawn=require("child_process").spawn; module.export=function (options,callback) { if (!options.baseName) { return callback(new TypeError("no has especificado el nombre base")); } let folder=options.folder || os.tmpDir(); let baseName=options.baseName; let fileSrc=path.join(folder,baseName+"-%d.jpg"); let fileDest=path.join(folder,baseName+".webm"); //ffmpeg -i images-%d.jpg - filter:v "setpts=2.5*PTS" -vcoded libvpx -an video.webm let ffmpeg=spawn("ffmpeg",[ "-i", fileSrc, "-filer:v", "setpts=2.5*PTS", "-vcoded", "libvpx", "-an", fileDest ]); ffmpeg.stdout.on("close",function (code) { if (!code) { return callback(null); } callback(new Error("ffmpeg termino con el codigo "+code)); }); }