目前没有任何浏览器在 WebCodecs 实现中支持 FLAC 编码。此扩展包为 Mediabunny 提供了一个可靠的 FLAC 编码器。它基于 Mediabunny 的 自定义编码器 API 实现,并在底层使用经过快速、大小优化的 WASM 构建版本的 libFLAC。

GitHub 页面

安装 ​

此库与 Mediabunny 互为对等依赖。请使用 npm 同时安装两者:

npm install mediabunny @mediabunny/flac-encoder

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

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

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

用法 ​

import { registerFlacEncoder } from '@mediabunny/flac-encoder';

registerFlacEncoder();

完成 - Mediabunny 现在会自动使用已注册的 FLAC 编码器。

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

import { canEncodeAudio } from 'mediabunny';
import { registerFlacEncoder } from '@mediabunny/flac-encoder';

if (!(await canEncodeAudio('flac'))) {
    registerFlacEncoder();
}

示例 ​

此处,我们将输入文件转换为 FLAC 文件:

import {
    Input,
    ALL_FORMATS,
    BlobSource,
    Output,
    BufferTarget,
    FlacOutputFormat,
    canEncodeAudio,
    Conversion,
} from 'mediabunny';
import { registerFlacEncoder } from '@mediabunny/flac-encoder';

if (!(await canEncodeAudio('flac'))) {
    registerFlacEncoder();
}

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

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

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