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)
- 浏览器中的 WASM 运行在沙箱环境里,能使用的系统能力更受限制
相关 npm 包
ffmpeg.wasm 目前主要包括以下几个包:
| 包 | 作用 |
|---|---|
@ffmpeg/ffmpeg | ffmpeg.wasm 主 JavaScript API |
@ffmpeg/util | 常用工具函数,例如 fetchFile、toBlobURL |
@ffmpeg/types | TypeScript 类型定义 |
@ffmpeg/core | 单线程 FFmpeg WASM Core |
@ffmpeg/core-mt | 多线程 FFmpeg WASM Core |