首页 > 其他分享 >用Electron开发一个视频压缩软件

用Electron开发一个视频压缩软件

时间:2023-11-08 18:15:29浏览次数:37  
标签:const ffmpeg 视频压缩 ffmpegCommand Electron 软件 null resolution opts

前段时间用Electron开发了一个图片压缩软件,使用起来很好,然后又想到何不再做一个视频压缩的?公司网站上视频蛮多,每月消耗流量也不是个小数目,这都是钱啦,在清晰度可接受的范围内把视频压缩下,有可能就省一半的流量费。

说干就干,开始查资料,首先找到的就是FFMPEG,它号称多媒体业界的瑞士军刀,暴风影音、qq影音、原来的快播等等都在用它,牛逼吧!

然后找到了npm下的fluent-ffmpeg,该包将ffmpeg的复杂命令做了抽象转换,我们可以直接用它的方法来执行ffmpeg命令。

1、下载ffmpeg

到ffmpeg官网(ffmpeg.org)下载对应系统dll,放到项目中,比如我下载的windows版本放置位置如下图

 2、封装执行ffmpeg命令方法

此代码位置在preload.js中,将执行压缩命令,停止压缩命令两个方法暴露给渲染器

const { contextBridge, ipcRenderer, shell } = require('electron')
const fs = require('fs');
const path = require('path');
const os = require('os');
const ffmpeg = require('fluent-ffmpeg');

(function(){
  const platform = os.platform()
  const arch = os.arch()
  const basePath = path.resolve(
    __dirname.replace('app.asar', 'app.asar.unpacked'),
    'bin',
    platform,
    // arm64 is limit supported only for macOS
    platform === 'darwin' && arch === 'arm64'
      ? 'arm64'
      : 'x64',
  )
  var name='ffmpeg';
  var binPath = path.resolve(
    basePath,
    platform === 'win32' ? `${name}.exe` : name,
  )
  ffmpeg.setFfmpegPath(binPath);
})();

var ffmpegCommandArr=[];

contextBridge.exposeInMainWorld('electronAPI', {
  execFfmpeg: (input, output, opts, progressCallback,endCallback,errorCallback) => {
    try{
      ffmpegCommand = ffmpeg(input)
      if(opts.frameRate!=null){
        ffmpegCommand = ffmpegCommand.fps(opts.frameRate);
      }
      if(opts.resolution[0]!=null || opts.resolution[1]!=null){
        ffmpegCommand=ffmpegCommand
          .size((opts.resolution[0]!=null?opts.resolution[0]:'?')+'x'+(opts.resolution[1]!=null?opts.resolution[1]:'?'))
          .autopad();
      }
      if(opts.crf!=null){
        ffmpegCommand=ffmpegCommand.outputOptions('-crf '+opts.crf);
      }
      if(opts.bitRate!=null){
        ffmpegCommand=ffmpegCommand.outputOptions(['-b:v',opts.bitRate+'k']);
      }
      ffmpegCommand = ffmpegCommand
        .on('progress', function (progress) {
          if(progressCallback!=null){
            progressCallback(progress);
          }
        })
        .on('end', function (stdout, stderr) {
          if(endCallback!=null){
            endCallback();
          }
        })
        .on('error', function (err, stdout, stderr) {
          console.log('Cannot process: ', err);
          if(errorCallback!=null){
            errorCallback();
          }
        })
        .save(output);
        ffmpegCommandArr.push(ffmpegCommand);
    }catch(e){
      console.log(e);
      if(errorCallback!=null){
        errorCallback();
      }
    }
  },

  killFfmpegCommand:()=>{
    for(var i=ffmpegCommandArr.length-1;i>=0;i--){
      ffmpegCommandArr[i].kill();
      ffmpegCommandArr.splice(i,1);
    }
  }
})

其他就是写UI方面和ffmpeg命令的东东了,详情看源码。

3、最后附上效果图和源码地址

 

压缩效果不要不要的

源码地址:https://github.com/chwrywj/VideoCompress

下载地址:https://www.world0101.com/zh/Soft/Detail/2

标签:const,ffmpeg,视频压缩,ffmpegCommand,Electron,软件,null,resolution,opts
From: https://www.cnblogs.com/chwrywj/p/17818014.html

相关文章

  • 蓝绿部署:实现无缝可靠的软件发布
    在快节奏的软件开发世界中,在不造成中断或停机的情况下向用户提供新功能和更新是一项至关重要的挑战。这就是蓝绿部署策略有用的地方。组织可以通过使用称为“蓝绿部署”的发布管理策略,以安全有效的方式推出其软件的新版本。在快节奏的软件开发世界中,组织努力快速可靠地部署新功能和......
  • 打车网约车app小程序软件开发定制
      网约车市场发展到至今,很多的平台都在受到市场的影响开始遍地开花,而其他的小平台也在抢占市场。那么我们就提供了相关的各种打车网约车的app,小程序软件定制服务。为客户提供便捷的软件系统,高效的客户体验,提升市场的竞争力。  一、功能特点  1.实时定位:打车软件通过......
  • 代驾小程序app软件开发解决方案
      一、需求分析  1.功能模块:打车软件的接单界面,下单,历史记录,支付,速配等功能。  2.车辆调度:按照附近的实时路线,车况,合理的调度司机和车辆。  3.用户界面:软件开发界面设计简单,易于操作,符合用户的使用习惯。  二、技术选型  1.开发语言:使用Java后者php开......
  • 跑腿系统app软件开发程序系统
      跑腿APP系统软件为用户提供便捷,高效的,配送服务功能,该系统的介绍以软件的全方位功能介绍,涵盖了用户端和商家端,后台端。  一、用户端功能  1.订单管理:平台的所有订单管理,选择跑腿的服务类型,配送物品,时间,地点,联系方式,系统自动匹配附近的骑手接单。  2.实时追踪:跑......
  • 租车小程序app软件开发定制市场需求
      租车市场一直都是这样,需求量大,租车平台为了让用户在租车合理的规划话指定区域的车辆,就开发一款租车管理平台的软件,方便用户和平台的管理。  租车小程序软件开发,用户在不同的场景下实现租车的需求,在旅途,商务车,日常的出行。用户通过手机app,小程序软件,预订汽车,电车,无需前往......
  • 顺风车拼车app软件开发功能介绍
      一、智能匹配路线:  顺风车拼车app软件提供平台智能用户司机匹配功能,用户在平台下单后,输入相关的出发地,目的地,人数,提交系统。平台按照司机和路线进行匹配,用户自主选择沿途的路线,实现灵活的拼车体验。  二、在线支付功能:  方便用户在线支付下单,顺风车,拼车app软......
  • 拼车顺风车app软件开发小程序功能开发
      拼车顺风车已成为当前的出行方式,为了让出行的人享受一个私家车的待遇,我们开发出了一款拼车顺风车软件,可以是app或者小程序,下面看看我们的软件都有那些功能。  一、拼车功能  用户的出行通过发布相关的出行需求,出发地,目的地,出行时间,出行人数。其他的用户看到后按照......
  • 共享租车车app软件开发小程序多功能
      共享经济已经成为一种新的模式,当然也包括共享租车。app软件开发小程序多功能模式也受到了众多人的关注,下面就来看看共享租车APP小程序的功能都有那些。  一、用户注册和登录功能  APP小程序软件开发之前下考虑软件的界面,功能,符合用户的需求,选择不同的车型,租车方式......
  • 软件测试|好用的pycharm插件推荐(三)——Rainbow Brackets
    简介我们平时写代码的时候,括号是让我们非常头疼的地方,特别是代码逻辑很多,层层嵌套的情况。一眼很难看出,代码是从哪个括号开始,到哪个反括号结束的。这个时候要是有一款工具能够让我们一眼就看出代码从哪个括号开始,到哪个反括号结束,无疑对我们会有很大帮助。PyCharmRainbowBra......
  • 软件测试|MySQL BETWEEN AND:范围查询详解
    简介在MySQL数据库中,使用BETWEENAND操作符可以进行范围查询,即根据某个字段的值在指定范围内进行检索数据。这个操作符非常有用,因为它可以让我们轻松地筛选出位于两个特定值之间的数据,而不需要使用复杂的条件语句。BETWEENAND操作符的语法BETWEENAND操作符的基本语法如下:SE......