前言
商家在发布商品的时候,大部分情况下是没有视频的,这样往往会造成商品展示不全等问题,而视频制作又比较麻烦,为了解决此痛点,我们需要提供一键合成视频的功能。
之所以选择 FFmpeg,是因为我们期望后续能够进行视频剪辑、字幕添加等更复杂的音视频操作。下面我们就来了解下什么是 FFmpeg。
什么是FFmpeg
FFmpeg 是一款知名的开源音视频处理软件,它提供了丰富而友好的接口支持开发者进行二次开发,也就是说,我们可以把 FFmpeg 看作是一个跨平台的视频处理程序:
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec。
FFmpeg中的 “FF” 指的是 “Fast Forward”,“mpeg” 则是 “Moving Picture Experts Group”
FFmpeg的原理
FFmpeg对音视频的处理过程可以简概为:解复用 => 解码 => 编码 => 复用器。
FFmpeg的使用
常见情况下使用 FFmpeg 首先要在当前系统配置 FFmpeg 环境,也就是对 FFmpeg 工具进行安装和配置,环境配置完成之后就可以使用命令行工具进行 FFmpeg 的调用。
FFmpeg部分简单的命令行操作示例:
获取音视频文件信息:
$ ffmpeg -i video.mp4
转换视频文件格式(转换 mp4 文件到 avi 文件):
$ ffmpeg -i video.mp4 video.avi
更改视频文件分辨率:
$ ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4
视频中提取图像:
$ ffmpeg -i input.mp4 -r 1 -f image2 image-%3d.png
当然,FFmpeg 还可以进行更多的操作,在此不进行更多的举例,感兴趣的同学可以参考官方文档(http://www.ffmpeg.org/)
FFmpeg在Node.js中的应用
在Node.js中有一个非常好用的模块,它就是 fluent-ffmpeg:
This library abstracts the complex command-line usage of ffmpeg into a fluent, easy to use node.js module. In order to be able to use this module, make sure you have ffmpeg installed on your system (including all necessary encoding libraries like libmp3lame or libx264).
简而言之 fluent-ffmpeg 对 FFmpeg 复杂的命令行进行了一定的封装,抽象为我们使用起来非常舒服的各类方法和API,可以看下它的一些常见操作:
fluent-ffmpeg的部分简单示例:
指定输入:
ffmpeg('input1.avi')
.input('input2.avi')
.input(fs.createReadStream('input3.avi'));
音频选项:
// 禁用音频
ffmpeg('input1.avi').noAudio();
// 设置音频比特率
ffmpeg('input1.avi').audioBitrate(128);
// 设置音频频率
ffmpeg('input1.av