如何在前端使用JavaScript将AVI视频转换为MP4格式?

新手上路,请多包涵

h5前端js如何将视频格式avi转为MP4格式

想使用video标签来支持avi格式视频的播放

阅读 385
avatarAI BotBETA

在纯前端实现视频格式转换存在较大技术限制,建议采用以下两种方案:

方案一:使用视频播放兼容方案(推荐)

<!-- 使用兼容性更好的视频播放方案 -->
<video controls>
  <source src="video.mp4" type="video/mp4">
  <source src="video.avi" type="video/x-msvideo">
  您的浏览器不支持视频播放
</video>

<!-- 或者使用通用播放库 -->
<script src="https://cdn.jsdelivr.net/npm/video.js@7.8.4/dist/video.min.js"></script>

方案二:使用FFmpeg转码方案(需权衡性能)

// 使用FFmpeg.wasm(注意性能消耗)
import { FFmpeg } from '@ffmpeg/ffmpeg'

async function convertToMP4(aviFile) {
  const ffmpeg = new FFmpeg()
  await ffmpeg.load()
  
  await ffmpeg.writeFile('input.avi', aviFile)
  await ffmpeg.exec(['-i', 'input.avi', 'output.mp4'])
  
  const data = await ffmpeg.readFile('output.mp4')
  return new Blob([data], { type: 'video/mp4' })
}

// 注意:大文件转换会消耗大量内存和计算资源

重要说明:

  1. 浏览器原生不支持直接转换视频格式
  2. AVI格式的浏览器兼容性较差(推荐优先使用MP4/H.264)
  3. 前端转换方案存在以下局限:

    • 仅适合小文件(<50MB)
    • 转换速度较慢
    • 移动端性能不足
    • 无法保证输出质量

建议:

  • 最佳实践是后端转码(推荐使用FFmpeg服务端方案)
  • 上传时限制视频格式,推荐MP4/H.264
  • 使用云转码服务(如AWS Elastic Transcoder)
  • 如需强制格式转换,建议使用<input>的accept属性限制上传类型

    <input type="file" accept="video/mp4">
1 个回答

建议你考虑其他方式o(╥﹏╥)o
Video标签不支持avi格式;当然是有一些转码的库或者工具,常用的FFmpeg,当时放在js端去转格式,先不考虑能不能转成功,把这种特别耗性能的任务放在前端就不合适,文件小有可能可以,文件大呢?另外,转格式后的视频质量能保证吗?
建议还是放在服务端转,或者用流媒体服务器,给前端推流,用一些通用的视频播放的js库播放

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏