首页 > 编程语言 >【NodeJs】使用ffmpeg将其他的视频格式都转换为mp4格式

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

时间:2024-09-03 12:52:38浏览次数:15  
标签:文件 const ffmpeg NodeJs MP4 mp4 file 上传

由于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. 文件清理:在转换完成后,要确保删除原始文件,避免服务器存储空间被占满。

标签:文件,const,ffmpeg,NodeJs,MP4,mp4,file,上传
From: https://blog.csdn.net/m0_62442882/article/details/141857593

相关文章

  • Nodejs的安装
    一.下载安装包及安装官网下载: (英文)https://nodejs.org/en(中文)https://nodejs.org/zh-cn/nodejs中文网下载: https://nodejs.cn/以上两个地址都可以下载     查询是否安装成功win+R运行cmd,输入node-v查看  二.配置全局安装目......
  • ffmpeg错误Invalid audio stream. Exactly one MP3 audio stream is required. Could
    错误消息Invalidaudiostream.ExactlyoneMP3audiostreamisrequired.Couldnotwriteheaderforoutputfile#0(incorrectcodecparameters?):InvalidargumentErrorinitializingoutputstream0:0--OnlyAACstreamscanbemuxedbytheADTSmuxerCoul......
  • 一个练习项目,好玩的bbs-nodejs-restify
    代码:varrestify=require('restify')varserver=restify.createServer()constmd5=require('md5');constquerystring=require('querystring');//npminstallrestifyvarsecretKey='saacac3423@21212';varpagesize......
  • 一个练习项目,好玩的bbs-nodejs-fastify
    代码:constfastify=require("fastify")();constmd5=require('md5');constquerystring=require('querystring');//npminstallfastifyvarsecretKey='saacac3423@21212';varpagesize=20;varmysql=req......
  • 基于nodejs+vue宠物网站[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着社会经济的快速发展与人们生活水平的提高,宠物已成为许多家庭不可或缺的一员,它们不仅带来了陪伴与欢乐,还促进了宠物相关产业的蓬勃发展。然而,在享受宠物......
  • 基于nodejs+vue宠物网络社区论坛系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码毕设程序文件开题报告内容研究背景在当今社会,随着人们生活水平的提高和情感需求的日益增长,宠物已成为许多家庭不可或缺的重要成员。宠物市场的繁荣不仅体现在宠物数量的激增,还体现在宠物主人对宠......
  • 音视频入门基础:WAV专题(7)——FFmpeg源码中计算WAV音频文件每个packet的size值的实现
    一、引言从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以显示WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的size:这个“size”实际是AVPacket结构体中的成员变量size,为WAV......
  • FFmpeg源码:av_rescale_rnd、av_rescale_q_rnd、av_rescale_q、av_add_stable函数分析
    一、av_rescale_rnd函数(一)av_rescale_rnd函数的声明av_rescale_rnd函数声明在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavutil/mathematics.h中:/***Roundingmethods.*/enumAVRounding{AV_ROUND_ZERO=0,///<Roundtowardzero.AV_......
  • 基于nodejs+vue宠物互助领售平台[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着现代社会生活节奏的加快和孤独感的普遍增加,宠物已成为许多人生活中不可或缺的伴侣。然而,宠物市场的信息不对称、领养渠道不畅、宠物医疗知识普及不足等......
  • 基于nodejs+vue宠物户籍管理[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着现代社会生活节奏的加快与城市化进程的推进,宠物已成为许多家庭不可或缺的一员,它们不仅是情感的寄托,更是家庭的重要组成部分。然而,宠物数量的激增也带来......