FFmpeg.wasm (英语)
关于这个叉子
感谢 杰罗姆·吴 创建非常酷的 ffmpegwasm 软件包!
然而,由于这个软件包在很长一段时间内没有更新过,很多功能被搁置,与节点18及以上功能不相容(因为emsdk版本已经太老了). 于是我决定维持一个分叉,解决问题,继续发展迭代.
最新情况:杰罗姆 Wu更新了ffmpegwasm,但放弃了节点支持,因为"如果你不在浏览器中,有很多更好的选择,比使用Web Assembly来达到更好的性能". 然而,我并不完全同意这一点。 WebAssembly让我们有可能以高性能运行程序,在本地和浏览器环境都有相同的代码. 它带来的方便和可移植性是任何其他解决办法所无法比拟的,目前的业绩问题可望在可预见的将来得到解决。 所以我决定继续维持这个项目.
随意创建问题或拉动请求 {(≧▽≦*)o
释放计划
见 待办事项 更多计划的章节
- v0.12 与 ffmpegwasm v0. 11. x 完全兼容, 但将 emsdk 更新到最新版本并修正一些错误
- 从v0.13开始,我们将尝试添加一些新的特性,并使用现代的工具链来重构它 这可能会给小版本带来一些突破性修改。 。 。 .
从ffmpegwasm移徙
- 更改套件名称并更新导入 :
@ffmpeg/ffmpeg=>@ffmpeg.wasm/main@ffmpeg/core打开@ffmpeg/core-mt=>@ffmpeg.wasm/core-mt@ffmpeg/core-st=>@ffmpeg.wasm/core-st
- 更新版本为
^0.12.0
待办事项
- 将 emsdk 更新到最近
- 用 Github 动作发布
- 迁移到 pnpm
- 无害环境管理支助
- 测试
vitest - 更新道具
- 用类型脚本重写
- 在多行模式下支持并行任务
- 文件网站
- 迁移到单列波
- 以 开始
- 支持构建缓存
- SIMD 和 WASI 版本
- 升级到 FFmpeg@ 6
- 动作快点
libsvtav1改为libaom(目前因太慢而残疾)
原始读取器
ffmpeg.wasm是一个纯Web组装的FFmpeg港口. 它可以在浏览器内进行视频和音频记录、转换和流出.
安装
节点
$ npm install @ffmpeg.wasm/main @ffmpeg.wasm/core-mt
浏览器
或者,在浏览器中使用脚本标记(只在部分浏览器中工作,见下文列表) :
只有浏览器
SharedArrayBuffer支持可以使用多线程核心( s)@ffmpeg.wasm/core-mt,你可以检查 这里 为完整的列表.
共享对话框 仅供页 跨原生个体。需要发送信头
Cross-Origin-Embedder-Policy: require-corp财务报告和审定财务报表Cross-Origin-Opener-Policy: same-origin,并确保您的静态资源服务器(或公共的 CDN) 包含标题Cross-Origin-Resource-Policy: cross-origin(例如:. 联合公报没有 开口公斤(中文(简体) )
<script src="https://cdn.jsdelivr.net/npm/@ffmpeg.wasm/main/dist/index.global.js"></script>
<script>
const ffmpeg = FFmpeg.create({
/* ... */
});
</script>
使用量
ffmpeg.wasm 提供使用 API 的简单程序, 将您只需要几行代码的视频转码 :
import { readFile, writeFile } from "fs/promises";
import { FFmpeg } from "@ffmpeg.wasm/main";
const ffmpeg = await FFmpeg.create({ core: "@ffmpeg.wasm/core-mt" });
ffmpeg.fs.writeFile("test.avi", await readFile("./test.avi"));
await ffmpeg.run("-i", "test.avi", "test.mp4");
await writeFile("./test.mp4", ffmpeg.fs.readFile("test.mp4"));
process.exit(0);
使用 ffmpeg.wasm 核心的其他版本
对于ffmpeg.wasm的每个版本,有一个默认的版本: @ffmpeg.wasm/core-mt (你可以发现它在 devDependencies 节 软件包.json),但有时可能需要使用更新版本的 @ffmpeg.wasm/core-mt 使用最新的/实验性特征.
警告: 在达到v1.0.0之前,每个小版本的核心之间可能存在相容性,参见 移徙指南 更多细节!
节点
只需要安装所需的特定版本 :
$ npm install @ffmpeg.wasm/core-mt@$version
或使用自己的版本, 附带定制路径
const ffmpeg = await FFmpeg.create({
core: "path/to/your/ffmpeg.wasm/core.js",
});
浏览器
const ffmpeg = await FFmpeg.create({
core: "https://cdn.jsdelivr.net/npm/@ffmpeg.wasm@$version/core-mt/dist/core.min.js",
});
使用单线程版本
const ffmpeg = await FFmpeg.create({
core: "@ffmpeg.wasm/core-st",
});
多线程
多线程需要每个外部库配置, 现在只有后面的库支持它 :
x264 (中文(简体) )
默认运行它多线程模式,不需要通过任何参数.
libvpx / 网点
需要通过 -row-mt 1,但只能使用一线程帮助,可以加速30%左右
文档
财务问题
Ffmpeg.wasm的执照是什么?
Ffmpeg内部有两个组件. 主题 :
- @ffmpeg.wasm/ main (英语)https://github.com/FFmpeg-wasm/ffmpeg.wasm 页面存档备份,存于互联网档案馆(中文(简体) )
- @ffmpeg.wasm/core-mt (英语)https://github.com/FFmpeg-wasm/ffmpeg.wasm-core (英语)(中文(简体) )
@ffmpeg.wasm/core-mt 包含WebAssembly代码, 由原始的 FFmpeg C 代码转接而来.
@ffmpeg.wasm/main 包含一种可以处理加载核心的复杂性并调用低级API的包装. 这是一个很小的代码基础 并且根据麻省理工学院的许可.
输入文件的最大大小是多少 ?
1GB,这是WebAssembly的一个硬限制. 将来可能会变成4GB.