Nodejs+ffmpeg 实现视频格式高效转换

1,960 阅读2分钟

这是我的第一篇掘金博客,开启掘金写作之路。

初入职场的小白,接受的第一个任务就是学习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文件(编写主代码);

--  此时目录结构为:

image.png

四、一切准备好之后就可以了撸代码啦(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),就可以迅速将视频进行转码啦~~~~~~~~