这是我的第一篇掘金博客,开启掘金写作之路。
初入职场的小白,接受的第一个任务就是学习ffmpeg,利用ffmpeg进行视频格式高效转换。ffmpeg本身可以通过执行命令行进行视频格式转换,但是在项目中不能高效开发,利用Nodejs+ffmpeg进行高效开发,具体步骤如下:
一、nodejs的安装 -- nodejs的安装及环境配置可参考:www.cnblogs.com/liuqiyun/p/…
二、FFmpeg的安装 -- FFmpeg的安装及环境配置可参考:www.jianshu.com/p/2b609afb9…
三、需要的环境配置好之后就可以创建项目安装插件啦
-- 快速生成一个nodejs项目(npm init),根据提示进行相关选项的选择;
-- 安装express (npm install express),此时目录中会有node_modules文件夹生成;注意:需要把FFmpeg的文件引入到当前项目中,和node_modules文件夹同级;
-- 安装ffmpeg插件(npm install ffmpeg);
-- 安装文件流fs插件(npm install fs)
-- 创建一个文件夹(offVideo),里边存放需要转码的视频;
-- 同目录下创建一个server.js文件(编写主代码);
-- 此时目录结构为:
四、一切准备好之后就可以了撸代码啦(server.js)
const express = require('express')
const ffmpeg = require('fluent-ffmpeg')
const fs = require('fs')
const path = require('path')
const app = express()
const filePath = path.resolve('./offVideo')
// 设置跨域
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By",' 3.2.1');
res.header("Content-Type", "application/json;charset=utf-8");
next();
});
//遍历文件 将MP4格式转为webm格式
function fileDisplay(filePath){
fs.readdir(filePath, function(err,files){
if(err){
console.warn(err)
}else{
files.forEach(function(filename){
//获取当前文件的绝对路径
var filedir = path.join(filePath,filename);
//根据文件路径获取文件信息
fs.stat(filedir,function(eror,stats){
if(eror){
console.warn('获取文件stats失败')
}else{
var isFile = stats.isFile() //文件
var num = filedir.split("\\")[6].split('.')[0]
//判断是否是文件;若是进而判断是否是MP4格式,如果是则进行转码
if(isFile){
console.log(filedir)
var savePath = "绝对路径" + num + ".webm"
if(filedir.split(".")[1] == 'mp4'){
console.log(filedir.split(".")[1])
var ffm = new ffmpeg({source:filedir})
.setFfmpegPath('./ffmpeg/ffmpeg-N-99793-gae9a1a9698-win64-gpl-shared/bin/ffmpeg.exe')
.withAspect('4:3')
// .withSize('1280×960')
.applyAutopadding(true,'white')
.toFormat('webm')
.saveToFile(savePath, function(retcode,error) {
error?console.log(error):console.log(retcode)
})
}
}
}
})
})
}
})
}
fileDisplay(filePath)
五、终端运行server.js(node server.js),就可以迅速将视频进行转码啦~~~~~~~~