cut video to clips and then merge clips
cut video to clips and then merge clips
[{"id":"77de1242.7f835c","type":"function-npm","z":"2f73cdd.dbeac32","name":"proccess clips","func":"var base64 = require('file-base64');\nvar ffmpeg = require('fluent-ffmpeg');\nlet videoUrl = flow.get('videoUrl');\nlet videoClone = ('videoClone.mp4');\nvar fileExt = '.mp4';\nvar series = msg.payload;\nvar i = 0;\nvar len = series.length;\n\nfunction generateVideoCore(from, to) {\n return new Promise(function(resolve, reject) {\n generateVideov2(from, to).then(function() {\n if (i === 0) {\n mergeVideos(['test' + fileExt], 'output' + fileExt).then(function () {\n cloneVideo('output' + fileExt, 'tmp' + fileExt).then(function () {\n resolve('ok');\n })\n });\n } else {\n mergeVideos(['tmp' + fileExt, 'test' + fileExt], 'output' + fileExt).then(function () {\n cloneVideo('output' + fileExt, 'tmp' + fileExt).then(function () {\n resolve('ok');\n })\n });\n }\n });\n });\n}\n\n\nfunction generateVideov2(from, to) {\n return new Promise(function(resolve, reject) {\n var formatFrom = new Date(from).toISOString().substr(11, 8);\n var duration = (to - from) / 1000;\n\n ffmpeg(videoClone) //./sos_4-16_anadarko.mp4\n .setStartTime(formatFrom)\n .setDuration(duration)\n .output('test' + fileExt)\n\n .on('end', function(err) { \n if(!err) {\n resolve('ok');\n } \n })\n .on('error', function(err){\n reject('error');\n }).run();\n });\n}\n\nfunction mergeVideos(videoNames, videoOut) {\n return new Promise(function(resolve, reject) {\n var mergedVideo = ffmpeg();\n videoNames.forEach(function(videoName){\n mergedVideo = mergedVideo.addInput(videoName);\n });\n mergedVideo.mergeToFile(videoOut, '/tmp/')\n .on('end', function() {\n node.error('merged');\n resolve('ok');\n })\n .on('error', function(err) {\n reject('err.message');\n });\n });\n}\n\nfunction cloneVideo(videoIn, videoOut) {\n return new Promise(function(resolve, reject) {\n ffmpeg(videoIn) //output.mp4\n .clone()\n .save(videoOut) //tmp.mp4\n .on('end', function() {\n resolve('ok');\n })\n .on('error', function(err) {\n reject('err.message');\n });\n });\n}\n\nfunction recursive(from, to) {\n node.error('merging');\n generateVideoCore(from, to).then(function (data) {\n i++;\n if (i <= len - 1) {\n recursive(series[i].startTimeMs, series[i].stopTimeMs);\n } else {\n base64.encode('output' + fileExt, function(err, base64String) {\n msg.payload = base64String;\n flow.set('video', base64String);\n node.send(msg);\n });\n }\n });\n}\ncloneVideo(videoUrl, videoClone).then(()=>{\n recursive(series[i].startTimeMs, series[i].stopTimeMs);\n})\n","outputs":1,"noerr":0,"x":404.0173645019531,"y":326.0103940963745,"wires":[["ae623b1b.3aeb58","2e62b79f.d8afb8"]]}]