跳到主要内容

ffmpeg

  • FFmpeg 是一个开源、跨平台的音视频处理工具和多媒体框架
  • FFmpeg是使用C语音开发的

FFmpeg场景​

  • 视频格式转换
  • 视频压缩
  • 视频裁剪
  • 视频合并
  • 视频截图
  • 音频提取
  • 音频转换
  • 添加水印
  • 添加字幕
  • 调整分辨率
  • 调整帧率
  • 编码 / 解码
  • 音视频流处理
  • 直播推流等

FFmpeg主要功能​

  • 格式转换
    • FFmpeg 可以将一种媒体格式转换成另一种格式
  • 视频处理
    • FFmpeg 可以进行视频编码/解码、裁剪、旋转、缩放、调整帧率、添加水印等操作。你可以使用它来调整视频的分辨率、剪辑和拼接视频片段,以及对视频进行各种效果处理
    • 将视频文件提取出mp3文件
  • 音频处理
    • FFmpeg 可以进行音频编码、解码、剪辑、混音、音量调节等操作。你可以用它来提取音频轨道、剪辑和拼接音频片段,以及对音频进行降噪、均衡器等处理。
  • 字幕处理
    • FFmpeg可以添加字幕、移除字幕、提取字幕
  • 流媒体处理
    • FFmpeg 支持处理实时音视频流

浏览器不能直接运行 FFmpeg​

  • FFmpeg 本质是一个本地程序
  • 浏览器出于安全原因,不能直接执行ffmpeg
  • 想让 FFmpeg 在浏览器运行,就需要把 FFmpeg 编译成浏览器能够执行的格式
    • 这个格式就是WebAssembly
    • 通过WASM让C语言编写的程序能够在web环境运行
    • ffmpeg.wasm 是将 FFmpeg 编译成 WebAssembly
    • ffmpeg.wasm 可以理解为“浏览器版本的 FFmpeg”

ffmpeg.wasm和原生的ffmpeg对比​

  • 原生 FFmpeg = 直接运行在操作系统里的 FFmpeg 程序
  • ffmpeg.wasm = 把 FFmpeg 编译成 WebAssembly 后,运行在浏览器里的版本
  • ffmpeg.wasm性能不如原生 FFmpeg
    • 浏览器中的 WASM 运行在沙箱环境里,能使用的系统能力更受限制
      • 对硬件能力的访问受浏览器限制
    • 原生 FFmpeg可以充分利用CPU、GPU(本地操作系统的CPU/GPU)

相关 npm 包​

ffmpeg.wasm 目前主要包括以下几个包:

包作用
@ffmpeg/ffmpegffmpeg.wasm 主 JavaScript API
@ffmpeg/util常用工具函数,例如 fetchFile、toBlobURL
@ffmpeg/typesTypeScript 类型定义
@ffmpeg/core单线程 FFmpeg WASM Core
@ffmpeg/core-mt多线程 FFmpeg WASM Core