1、ubuntu 环境,安装 ffmpeg ,nodejs,
2、git 拉取重点库 video-thumb-grid
3、码上服务代码
var fs = require('fs');
var Grid = require('../video-thumb-grid/index');
var join = require('path').join;
var ffmpeg=require('ffmpeg')
const ora = require('ora');
const chalk=require('chalk')
const spinner = ora(`Creating ${chalk.green('图片生成中')}`);
let sourrce=fs.readdirSync('./file')
function getVideoDuration(url){
return new Promise((resolve,reject)=>{
try{
new ffmpeg(join('file',url),function(err,video){
resolve(video.metadata.duration.seconds)
})
}catch(err){
reject(err)
}
})
}
function gen(path,index,duration){
return new Promise((resolve,reject)=>{
let count=0
let interval=2
if(duration<5*60){
count=parseInt(duration/interval)
}else{
count=100
interval=parseInt(4)
}
try{
// var grid = Grid('./file/6d4f0e67-b361-4b04-a909-dae182a0c06d.mp4');
var grid = Grid(path);
grid.count(count);
grid.interval(interval);
grid.quality(30);
grid.width(80);
grid.height(60);
spinner.start();//开始
grid.render(function(err, buf){
if (err) throw err;
fs.writeFileSync(`./pic/grid${index}-${duration}.jpg`, buf);
spinner.stop();//结束
console.log('图片已生成');
resolve()
});
}catch(err){
reject(err)
}
})
}
//计数器
function makenext(){
let i=0;
return ()=>{
i++
console.log(i,'i');
return i
}
}
const next=makenext();
function mak(ele){
getVideoDuration(sourrce[ele]).then(res=>{
console.log(res,'time');
gen('./file/'+sourrce[ele],ele,res).then(res=>{
let count=next();
console.log('第'+count+'次任务已完成');
if(count>=sourrce.length){
console.log('------end-------');
next('clear')
}else{
mak(count);
}
})
})
}
mak(0)
放上路飞镇楼