【NodeJs】使用ffmpeg将其他的视频格式都转换为mp4格式

由于MP4 是兼容性最好的视频格式,尤其是在跨浏览器支持方面。为了确保最大程度的兼容性,将客服端上传的视频文件都转换为MP4,下面就分享在nodejs中使用ffmpeg将视频文件转换为MP4格式的方法。

1.电脑安装ffmpeg

ffmpeg是什么呢,

  • 一个免费开源的视频转换工具
  • 一款音视频编解码工具
  • 一组音视频编解码开发套件

可去ffmpeg官方网站前往下载,按照自己的操作系统选择下载,另一个下载点

下载的是一个压缩包ffmpeg7.0-essentials_build.zip文件,解压后,打开bin文件夹,如下图

主要是ffmpeg.exe文件

在对应的文件夹下,鼠标右键选择打开CMD终端,然后执行以下命令

.\ffmpeg -version

2.Nodejs安装ffmpeg

nodejs需要安装的依赖:

  • multer:处理文件上传
  • fluent-ffmpeg:FFmpeg 的 Node.js 封装库
npm install express multer fluent-ffmpeg

后端代码示例:

const express = require('express');
const multer = require('multer');
const ffmpeg = require('fluent-ffmpeg');
//本机电脑ffmpeg.exe的所在处
const ffmpegPath = path.join('e:','program','ffmpeg-7.0.2-essentials_build','bin','ffmpeg.exe');
const path = require('path');
const fs = require('fs');

// 设置 FFmpeg 的路径
ffmpeg.setFfmpegPath(ffmpegPath );

//服务器地址
const baseURL = 'http://127.0.0.1:3000/'

const app = express();

// 配置 multer 来处理文件上传
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'uploads/');
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + path.extname(file.originalname));
  }
});

const upload = multer({ storage: storage });

// 上传视频的接口
app.post('/upload', upload.single('video'), (req, res) => {
  const file = req.file;
  const filePath = path.join(__dirname, 'uploads', file.filename);
  const outputFilePath = path.join(__dirname, 'uploads', `${Date.now()}.mp4`);

  //文件为视频文件
  if(file.mimetype.startsWith('video')){
      if(path.extname(file.filename).toLowerCase() === '.mp4'){
        //视频文件是MP4格式的
        res.send({ code:1,msg:'上传成功',data:`${baseURL}${file.filename}`});
      }else{
        //视频文件是其他格式的
        // 如果不是 MP4,使用 FFmpeg 转换为 MP4
        ffmpeg(filePath)
        .output(outputFilePath)
        .on('end', () => {
          // 删除原始文件
          fs.unlinkSync(filePath);
          // 返回转换后的 MP4 文件的 URL
          res.send({ code:1,msg:'上传成功',data:`${baseURL}${path.basename(outputFilePath)}`});
        })
        .on('error', (err) => {
          console.error('Error:', err);
          res.cc(0,'上传');
        })
        .run();
      }
    }else{
      //其他文件(照片等)
      res.send({ code:1,msg:'上传成功',data:`${baseURL}${req.file.filename}`});
    }
});

// 提供上传后的文件访问
app.use('/uploads', express.static('uploads'));

app.listen(3000, () => {
  console.log('Server started on port 3000');
});

说明:

  1. 文件上传与存储
    • 使用 multer 来处理上传的文件并存储在 uploads 目录中。
  2. 格式判断与转换
    • 使用 path.extname(file.filename) 获取文件扩展名。
    • 如果扩展名为 .mp4,则直接返回上传的 MP4 文件 URL。
    • 如果不是 MP4,使用 FFmpeg 将文件转换为 MP4 格式,转换完成后删除原始文件,并返回转换后的视频 URL。
  3. 静态文件访问
    • 使用 express.static 提供上传文件的静态访问。
  4. ffmpegPath路径:
    • 要填本机电脑ffmpeg.exe的路径地址

3.注意事项

  1. 视频格式兼容性:FFmpeg 支持多种视频格式,几乎可以转换大多数常见的格式(如 AVI、MOV、WMV、FLV 等)。
  2. 服务器性能:视频格式转换会占用服务器资源,特别是处理大型视频时。因此,确保服务器有足够的性能来处理这些任务,或者将视频处理任务交给专门的视频处理服务。
  3. 文件清理:在转换完成后,要确保删除原始文件,避免服务器存储空间被占满。
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值