之前一直觉得音视频处理,都是高大上的东西,自从知道了 ffmpeg 之后,甚至我都觉得,我也能做音视频处理了

视频转换格式,是一件很耗CPU的事情,如果放在服务端处理,那需要考虑的东西太多,带宽消耗也大。所以我打算做一个客户端

用nodeJS怎么做客户端呢?

Electron 这个框架就是为nodejs客户端开发而生的,大家所知道的 VScode 就是它开发的

视频转换大师bate0.1版本

该软件的主要功能是:将远程的视频文件下载下来并转换成指定的视频格式

注: 看这里的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 不存在的话,就安装下扩展。

Leave a Reply

Your email address will not be published. Required fields are marked *