之前一直觉得音视频处理,都是高大上的东西,自从知道了 ffmpeg 之后,甚至我都觉得,我也能做音视频处理了
视频转换格式,是一件很耗CPU的事情,如果放在服务端处理,那需要考虑的东西太多,带宽消耗也大。所以我打算做一个客户端
用nodeJS怎么做客户端呢?
Electron 这个框架就是为nodejs客户端开发而生的,大家所知道的 VScode 就是它开发的

该软件的主要功能是:将远程的视频文件下载下来并转换成指定的视频格式
注: 看这里的CPU使用率,直接100%了

Nodejs端
const ffmpegInstaller = require('@ffmpeg-installer/ffmpeg'); const ffmpeg = require('fluent-ffmpeg'); ffmpeg.setFfmpegPath(ffmpegInstaller.path);
这样你只能用到视频的转换基础功能,如果你要用到 视频信息获取和截屏的话,需要使用到 ffprobe 项目,它已经封装在这个扩展中,但在windows 平台,你还是需要安装 fprobe.exe 才行 注: 这里你是百度不到的
所以这个项目需要配合使用
const ffprobeInstaller = require('@ffprobe-installer/ffprobe');
基于于不同平台, ffprobe.exe 文件
ffmpeg.setFfprobePath(ffprobeInstaller.path); //设置调用地址
其他的操作就能手册上面没有啥区别了。
fluent-ffmpeg 开发指南
页面跟服务端怎么通信呢?
WEB开发中,页面跟服务器绝大部分都是通过HTTP协议通信的,但客户端开发不一样,都是基于事件监听
Electron 主要是分2线程,一个是主线程,一个是渲染线程,主线程和渲染线程通过事件监听来通行, ipcMain 为事件监听提供了方法
const {ipcMain} = require('electron')
// 主线程代码
ipcMain.on("get-video-info",function(event, arg) {
event.sender.send('asynchronous-reply', 1); // 异步发送
event.returnValue = '1';
// 同步发送
});
// 同步发送和异步发送2选一就好了
// 渲染层代码
const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.send('get-video-info', 1);
ipcRenderer.on('asynchronous-reply', function(event, arg) {
// todo
});
渲染层代码,如果 报 require 不存在的话,就安装下扩展。