今天简单研究了一下怎么用 nodejs 来操作 ffmpeg, 发现这个包, 做了一些简单的尝试, 做个记录!
其中 这段关于计算视频的码率:
// 如果一个视频文件大小有10GB,时长为90分钟(5400秒), 那么它的码率(视频+音频)为:
// 10 x 1024 x 8 / 5400 = 15Mbps
// 视频文件体积:(音频码率+视频码率) x 时长 / 8
// 如果一个视频的视频码率为3Mbps, 音频码率为512Kbps, 时长90分钟(5400秒), 那么整个视频文件的大小就是:
// (512/1024 + 3) x 5400 / 8 = 2362MB
// 相反,如果一个视频文件大小有10GB,时长为90分钟(5400秒), 那么它的码率(视频+音频)为:
// 10 x 1024 x 8 / 5400 = 15Mbps
// 例:有一个1.5小时(5400秒)的影片,希望转换后文件大小刚好为700M
// 计算方法如下:
// 700×8÷5400×1024≈1061Kbps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
/** * Created by 天明 * Date: 2022/3/29 * Time: 5:43 下午 * Description: */ const ffmpeg = require('fluent-ffmpeg'); ffmpeg.setFfmpegPath('/Applications/ffmpeg'); class Then { constructor() { } static init() { new Promise((resolve, reject) => { console.log('获取大小和时长'); resolve() }).then(_ => { return new Promise((resolve, reject) => { const Flow = ffmpeg('test.mp4').size('1280x720') .videoBitrate('24000') //24M .inputFPS(24) .audioBitrate('128k').autopad(true, 'white') .on('progress', (progress) => { console.log('进度: ' + progress.percent + '% done'); }) .on('error', (err) => { console.error('出现错误'); reject(err) }).on('end', () => { console.log('转码完成'); resolve(); }); Flow.output('out.mp4').run(); }) }).then(() => { console.log('加水印开始'); return new Promise((resolve, reject) => { const Flow = ffmpeg('out.mp4').input('logo.png') .inputOptions([ '-filter_complex', 'overlay=10:10' ]) .on('progress', (progress) => { console.log('进度: ' + progress.percent + '% done'); }).on('error', (err) => { console.error('出现错误:'); reject(err) }).on('end', () => { console.log('转换完成'); resolve(); }) Flow.output('out2.mp4').run(); }); }).then(() => { console.log('转码结束') }).catch(err => { console.error(err) }) } static bitRate() {} } Then.init() |
这段记录了视频转码和添加水印的流程!
关于 安装 ffmpeg 流程
首先我们下载到服务器
https://johnvansickle.com/ffmpeg/
在列表中选择适合自己的版本,鼠标右键,复制链接地址。这里我直接选择了amd64的最新版本,复制到的下载地址是https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz。
打开Linux中要安装ffmpeg的目录,使用wget命令下载文件:
wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz。
可以看到下载完成的文件后缀名为 .tar.xz ,执行对应解压命令解压文件:
xz -d ffmpeg-git-amd64-static.tar.xz
再解压
tar -xvf ffmpeg-git-amd64-static.tar
解压完成后进入解压出来的这个目录ffmpeg-git-20190424-amd64-static/:
当然,如果想要ffmpeg命令全局可用,可以在bin目录加个链接。比如,分别执行如下命令,即可在:/usr/bin
目录下创建ffmpeg
和ffprobe
软链接。
cd /usr/bin
ln -s /data/software/ffmpeg-git-20190424-amd64-static/ffmpeg ffmpeg
ln -s /data/software/ffmpeg-git-20190424-amd64-static/ffprobe ffprobe
这样在其他目录也都可以直接使用 ffmpeg 和 ffprobe 而不用加目录前缀了。