我们先来看看node如何操作ffmpeg?一种是使用node C++插件操作,另外一种是使用命令组合方式操作。
在GitHub中搜索了两种实现方式:
- 使用C++插件实现的有ffmpeg.js
- 使用命令组合方式的是node-fluent-ffmpeg
因为命令组合方式能快速理解使用方式,为了快速完成需求,选择了后者node-fluent-ffmpeg
node-fluent-ffmpeg
This library abstracts the complex command-line usage of ffmpeg into a fluent, easy to use node.js module.
这个库将ffmpeg的复杂命令行用法抽象为一个流,使得它是一个易于使用的node.js模块。
node-fluent-ffmpeg可以操作ffmpeg 和 ffprobe
为了更深入了解这个库和优化视频加载速度,简单阅读了一下该库的源码。该库整体围绕着Node.js的子进程知识点。
文件与文件夹 | 解析 |
---|---|
options | 命令 |
preset | 预设 |
capabilities.js | 检查是否有ffmpeg |
ffprobe.js | fprobe方法封装 |
fluent-ffmpeg.js | 主体 |
processor.js | 进程封装 |
recipes.js | 常用方法 |
utils.js | 工具 |
其中最重要的知识点是子进程child_process操作。
node-fluent-ffmpeg库的使用
node-fluent-ffmpeg使用简便。引入后可以直接使用。并且整体是链式操作,使用对象上的方法非常方便。
const ffmpeg = require('fluent-ffmpeg');
const command = ffmpeg('/path/to/file.avi')
.videoBitrate('1024k')
.videoCodec('mpeg4')
.size('720x?')
.audioBitrate('128k')
.audioChannels(2)
.audioCodec('libmp3lame')
.outputOptions(['-vtag DIVX']);
为了能高效的实现需求,最终选择使用node-fluent-ffmpeg。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。