nodeJs批量抽取视频某一帧保存为图片

JavaScript06

nodeJs批量抽取视频某一帧保存为图片,第1张

const fs = require('fs')

const PATH = require('path')

const { exec } = require('child_process')

let rootPath = E:\\dev

var saveDir = 'image'

let arr = []

let obj = querydir(rootPath)

var classId = null

function layer(b) {

b.forEach(e =>{

if (e.child &&e.child.length) {

layer(e.child)

} else if (!e.child) {

arr.push(e)

}

})

}

layer(obj)

let str = JSON.stringify(arr, "", "\t")

write('./data.json', str)

/**

/**

function createDir(path) {

// console.log(path)

if (!path) return false

path = path.replace(//[\w_.?=\w\d]+$/, '')

let pathArr = PATH.normalize(path).split('\')

let a = ''

pathArr.forEach(e =>{

a += e

if (!fs.existsSync(a)) {

fs.mkdirSync(a)

}

a += '\'

})

return true

}

我知道的跟nodejs关系不大,可以用ffmpeg 来获取,然后nodejs 调用ffmpeg的命令。

可以获得视频的时长 duration 和 分辨率 272X480 。

然后把输出的内容通过正则获取出来即可。

代码: 具体获取文件路径并判断的我就不写了

var url = 'd:/a.mp4'

var exec = require('child_process').exec

var cp = exec('d:/soft/ffmpeg/bin/ffmpeg -i '+url,function(err,stdout,stderr){

var outStr = stderr.toString()

// console.log(outStr)

var regDuration =/Duration\: ([0-9\:\.]+),/

var rs = regDuration.exec(outStr) 

if(rs[1]){

var timeStr = rs[1]

//获得时长

console.log(timeStr)

}

})