某些浏览器在其 WebCodecs 实现中缺乏对 AAC 编码的支持。此扩展包为与 Mediabunny 配合使用提供了一个可靠的 AAC-LC 编码器。它基于 Mediabunny 的 自定义编码器 API 实现,并在底层使用了 FFmpeg AAC 编码器经过优化、体积更小的快速 WASM 构建版本。

GitHub 页面

安装 ​

本库作为 peer 依赖项依赖于 Mediabunny。请使用 npm 同时安装两者:

npm install mediabunny @mediabunny/aac-encoder

或者,直接使用 script 标签引入:

<script src="mediabunny.js"></script>
<script src="mediabunny-aac-encoder.js"></script>

这将暴露全局对象 Mediabunny 和 MediabunnyAacEncoder。使用 mediabunny-aac-encoder.d.ts 可为这些全局变量提供类型定义。您可以从 发布页面 下载已构建的分发文件。

用法 ​

import { registerAacEncoder } from '@mediabunny/aac-encoder';

registerAacEncoder();

完成——Mediabunny 现在会自动使用注册的 AAC 编码器。

如果您希望更加严谨,请先检查浏览器的原生支持情况:

import { canEncodeAudio } from 'mediabunny';
import { registerAacEncoder } from '@mediabunny/aac-encoder';

if (!(await canEncodeAudio('aac'))) {
    registerAacEncoder();
}

示例 ​

此处,我们将输入文件转换为带有 AAC 音频的 MP4 文件:

import {
    Input,
    ALL_FORMATS,
    BlobSource,
    Output,
    BufferTarget,
    Mp4OutputFormat,
    canEncodeAudio,
    Conversion,
} from 'mediabunny';
import { registerAacEncoder } from '@mediabunny/aac-encoder';

if (!(await canEncodeAudio('aac'))) {
    // 如果没有原生支持,仅注册自定义编码器
    registerAacEncoder();
}

const input = new Input({
    source: new BlobSource(file), // 例如来自文件选择器
    formats: ALL_FORMATS,
});
const output = new Output({
    format: new Mp4OutputFormat(),
    target: new BufferTarget(),
});

const conversion = await Conversion.init({
    input,
    output,
});
await conversion.execute();

output.target.buffer; // => 包含 MP4 文件的 ArrayBuffer