@diffusion-studio/ffmpeg-js

中文文档
0.2.3发布于 2023/08/13MITTypeScriptES Module零依赖近 30 天下载 14万

FFmpeg.js - 在 Web Assembly 驱动的浏览器中使用 FFmpeg

中文使用文档
文档目录11 节
  1. 演示
  2. 为什么是FFmpeg.js?
  3. 拯救队的FFmpeg.js!
  4. QQ 设置
  5. 视频
  6. 下一个.js
  7. 使用量
  8. 实例
  9. * 限制
  10. • 配置
  11. 分会

Library Icon

Maintenance Website shields.io Discord GitHub license TypeScript

FFmpeg.js:供浏览器使用的由WebAssembly驱动的FFmpeg接口

欢迎使用 FFmpeg.js , 这是一个创新的库, 它提供一个Web Assembly的界面,用于在浏览器中使用 FFmpeg 。 🌐💡

演示

GIF Converter Demo

打开演示程序

为什么是FFmpeg.js?

这个项目的灵感来自 ffmpeg.wasm (英语)但是,我们注意到一些缺陷,这些缺陷可能限制其适用于更广泛的用途:

  1. 该项目利用了FFmpeg的GPL3建造,限制了其在商业项目中的使用。 🚫💼
  2. 它由JavaScript所开发,因此提供了有限的打字,限制了更严格的静态类型检查的潜力. ❗⌨️
  3. 缺乏面向对象的写出FFmpeg命令的方法. 🔄📝

拯救队的FFmpeg.js!

解决上述问题,FFmpeg.js:

  • 为FFmpeg提供LGPL构建,使其在商业上更加可行,退出 https://ffmpeg.org/legal.html (中文(简体) ) 更详细
  • 被写入了TypeScript,引入了静态类型检查以提高代码可靠性. 👌🔍
  • 为写入 FFmpeg 命令提供面向对象的界面,灵感来自 fluent-ffmpeg 更方便程序员。 🎯🔄

然而,需要注意的是,截至目前,FFmpeg.js只在Chrome,Firefox和Edge浏览器中运行. 它不支持萨法里或节点

QQ 设置

建立FFmpeg.js是一个微风!

npm i @diffusion-studio/ffmpeg-js

这应安装库. 现在因为ffmpeg.js需要使用 共享对话框 您需要启用 Cross-Origin-Opener-Policy: same-origin 财务报告和审定财务报表 Cross-Origin-Embedder-Policy: require-corp 在服务器侧.

视频

在阴道环境中,您只需将以下内容添加到您 vite.config.js数字 :

...
server: {
    ...
    headers: {
      'Cross-Origin-Embedder-Policy': 'require-corp',
      'Cross-Origin-Opener-Policy': 'same-origin',
    },
},
...

下一个.js

这是一个例子 next.config.js 支持共享箭头缓冲器 :

module.exports = {
    async headers() {
        return [
            {
                source: '/',
                headers: [
                    {
                        key: 'Cross-Origin-Embedder-Policy',
                        value: 'require-corp',
                    },
                    {
                        key: 'Cross-Origin-Opener-Policy',
                        value: 'same-origin',
                    },
                ],
            },
        ];
    },
};

使用量

在您的项目中,你需要启动 ffmpeg 实例.

import { FFmpeg } from '@diffusion-studio/ffmpeg-js';

const ffmpeg = new FFmpeg();

默认这个会拉出一个 LGPLv2.1 兼容构建 从 FFmpeg 从 UNPKG传送网络。 。 。 .
因此,如果你一意孤行地想要运行命令,你需要等待到二进制成功获取,像这样:

ffmpeg.whenReady(async () => {
  await ffmpeg.exec(['-help']);
});

这将输出 ffmpeg 帮助尽可能快 .

HINT: 尽管此库旨在为ffmpeg提供一个面向对象的界面, 您仍然可以使用 exec 方法.

当处理文件时, 您需要先将其保存到内存文件系统 :

const source = 'https://<path to file>/<filename>.mp4';

// write to file system
await ffmpeg.writeFile('input.mp4', source);

// convert mp4 to avi
await ffmpeg.exec(['-i', 'input.mp4', 'output.avi']);

// read from file system
const result: Uint8Array = ffmpeg.readFile('output.avi');

// free memory
ffmpeg.deleteFile('input.mp4');
ffmpeg.deleteFile('output.avi');

让我们来看看,你会如何得到 同样的结果 面向对象 就是这样.

const source = 'https://<path to file>/<filename>.mp4';

const result: Uint8Array = ffmpeg
  .input({ source })
  .ouput({ format: 'avi' })
  .export();

如果你想知道, 是的, 记忆是为你管理.

实例

请看看这些测试

* 限制

  • Web组装仅限于 2GB
  • 在单位测试中难以处理,也许最好还是去嘲笑FFmpeg类,把测试留给我们(这也是好的做法).
  • 没有硬件缓冲,使得视频编码/解码相当慢.

• 配置

目前已有两种不同的FFmpeg配置,在路上还有更多.

  • lgpl-base (默认) : 它是一个没有任何外部库的FFmpeg的编译,用于音频和视频的muxing/demuxing和音频编码/解码. 它符合v2.1LGPL,因此可用于商业项目.
  • gpl-extended: 这是 @ffmpeg/ core (中文(简体) ) 配置, 已经用 --enable-gpl 财务报告和审定财务报表 --enable-nonfree 因此,只有在整个密码库可以公开使用的情况下,才能用于商业项目。 它支持流行的快递编码器,例如: h264/h265/vp9 包括:.

关于所支持的解码器和粘合器的更多信息,运行以下命令:

console.log(await ffmpeg.codecs());
console.log(await ffmpeg.formats());

这样您就可以切换配置 :

import {
  FFmpeg,
  FFmpegConfigurationGPLExtended,
} from '@diffusion-studio/ffmpeg-js';

// FFmpegConfigurationGPLExtended will add the type extensions
const ffmpeg = new FFmpeg<FFmpegConfigurationGPLExtended>({
  config: 'gpl-extended',
});

就这样!

我们相信,FFmpeg.js将会在浏览器中大大地精简您与FFmpeg的互动,提供更高效和高效的编码体验. 快乐的编码

分会

本案文所载资料仅供参考。 它并不打算作为GPL和LGPL许可证使用的全面指南,也没有提供法律咨询。 有关软件许可证的法律和条例可能十分复杂,并可能随时间而变化。 这种信息的作者和提供者不能对与您使用这种信息有关的任何错误、遗漏或结果负责.

虽然已尽一切努力确保本文提供的信息在公布之日是准确的,但没有保证其货币或适用于你的具体情况。 您不应依赖这些信息来替代与法律专业人士或其他主管顾问的磋商。 在做出可能涉及法律问题的决定之前,必须先征求熟悉你具体情况的合格专业人员的意见.

版本与发布记录

@diffusion-studio/ffmpeg-js 共发布 7 个版本,首次发布于 2023/06/29;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.2.3latest2023/08/133 年前
0.2.22023/07/103 年前
0.2.12023/07/103 年前
0.2.02023/07/093 年前
0.1.02023/07/043 年前
0.0.22023/07/013 年前

关于 @diffusion-studio/ffmpeg-js 的常见问题

@diffusion-studio/ffmpeg-js 是什么?

FFmpeg.js - 在 Web Assembly 驱动的浏览器中使用 FFmpeg

如何安装 @diffusion-studio/ffmpeg-js?

在项目目录运行 npm install @diffusion-studio/ffmpeg-js,或使用 pnpm add / yarn add / bun add。

@diffusion-studio/ffmpeg-js 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@diffusion-studio/ffmpeg-js 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@diffusion-studio/ffmpeg-js 可以商用吗?

@diffusion-studio/ffmpeg-js 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@diffusion-studio/ffmpeg-js 的下载量有多少?

根据 npm 官方下载统计,@diffusion-studio/ffmpeg-js 在 2026/10/12 – 2026/11/10 这 30 天内被下载 139,711 次,日均约 4,657 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@diffusion-studio/ffmpeg-js 还在维护吗?

最新版本 0.2.3 发布于 2023/08/13(3 年前);至今共发布 7 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/06/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。