# @diffusion-studio/ffmpeg-js 中文文档

规范地址：https://npmcn.com/package/%40diffusion-studio/ffmpeg-js/

版本：0\.2\.3
npm 元数据更新时间：2023-08-13T14:13:12.874Z
中文译文更新时间：2026-11-12T07:50:32.265Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40diffusion-studio/ffmpeg-js
原文对照：https://npmcn.com/package/%40diffusion-studio/ffmpeg-js/?lang=original
项目主页：https://github.com/diffusion-studio/ffmpeg-js#readme
源码仓库：https://github.com/diffusion-studio/ffmpeg-js

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：48 kB，15 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2023-06-29T13:18:14.710Z
- 最新版本发布：2023-08-13T14:13:12.659Z
- 近 30 天下载量：139711（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

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

## 安装

```sh
npm install @diffusion-studio/ffmpeg-js
```

也可以使用：`pnpm add @diffusion-studio/ffmpeg-js`、`yarn add @diffusion-studio/ffmpeg-js`、`bun add @diffusion-studio/ffmpeg-js`

## README

![Library Icon](https://npmcn.com/package/%40diffusion-studio/ffmpeg-js/public/icon.png)

[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/diffusion-studio/ffmpeg-js/graphs/commit-activity) [![Website shields.io](https://img.shields.io/website-up-down-green-red/http/shields.io.svg)](https://ffmpeg-js-preview.vercel.app/) [![Discord](https://badgen.net/badge/icon/discord?icon=discord&label)](https://discord.gg/n3mpzfejAb) [![GitHub license](https://badgen.net/github/license/Naereen/Strapdown.js)](https://github.com/diffusion-studio/ffmpeg-js/blob/main/LICENSE) [![TypeScript](https://badgen.net/badge/icon/typescript?icon=typescript&label)](https://typescriptlang.org/)

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

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

## 演示

![GIF Converter Demo](https://npmcn.com/package/%40diffusion-studio/ffmpeg-js/public/preview.gif)

[打开演示程序](https://ffmpeg-js-preview.vercel.app/)

## 为什么是FFmpeg.js?

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

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

## 拯救队的FFmpeg.js!

解决上述问题,FFmpeg.js:

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

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

## QQ 设置

建立FFmpeg.js是一个微风!

```bash
npm i @diffusion-studio/ffmpeg-js
```

这应安装库. 现在因为ffmpeg.js需要使用 [共享对话框](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) 您需要启用 `Cross-Origin-Opener-Policy: same-origin` 财务报告和审定财务报表 `Cross-Origin-Embedder-Policy: require-corp` 在服务器侧.

### 视频

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

```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 实例.

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

const ffmpeg = new FFmpeg();
```

默认这个会拉出一个 [LGPLv2.1 兼容构建](https://github.com/diffusion-studio/ffmpeg-wasm-lgpl-build) 从 FFmpeg 从 [UNPKG传送网络](https://www.unpkg.com/)。 。 。 .  
因此,如果你一意孤行地想要运行命令,你需要等待到二进制成功获取,像这样:

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

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

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

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

```typescript
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');
```

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

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

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

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

## 实例

请看看这些测试

-   [https://github.com/diffusion-studio/ffmpeg-js/blob/main/examples/src/main.ts 互联网档案馆的存檔,存档日期2014-12-21](https://github.com/diffusion-studio/ffmpeg-js/blob/main/examples/src/main.ts)
-   [https://github.com/diffusion-studio/ffmpeg-js/blob/main/tests/export.spec.ts](https://github.com/diffusion-studio/ffmpeg-js/blob/main/tests/export.spec.ts)
-   [https://github.com/diffusion-studio/ffmpeg-js/blob/main/tests/commands.spec.ts](https://github.com/diffusion-studio/ffmpeg-js/blob/main/tests/commands.spec.ts)

## \* 限制

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

## • 配置

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

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

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

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

这样您就可以切换配置 :

```typescript
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 是什么？

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 和提交记录判断。

