Yahweasel/libav.js

This is a compilation of the libraries associated with handling audio and video in ffmpeg—libavformat, libavcodec, libavfilter, libavutil, libswresample, and libswscale—for emscripten, and thus the web.

解決する問題

Web アプリケーションは、オーディオやビデオファイルの処理(形式変換、フレーム抽出、フィルタ適用など)を必要とすることがよくあります。従来、ブラウザでこれを行うにはサーバーサイドの支援やネイティブプラグインが必要でした。libav.js は、主要なオープンソースマルチメディアフレームワークである FFmpeg のパワーを、純粋な JavaScript と WebAssembly にもたらします。FFmpeg のコアライブラリ(libavformat、libavcodec、libavfilter、libavutil、libswresample)を WebAssembly と asm.js にコンパイルすることで、ネイティブコードなしでブラウザ(または Node.js)内でオーディオとビデオを直接エンコード、デコード、マックス、デマックス、フィルタリングできます。

仕組み

libav.js は Emscripten を使用して FFmpeg のライブラリを WebAssembly と asm.js にコンパイルします。グローバルな LibAV オブジェクトを公開する JavaScript ファイルをロードします。LibAV.LibAV() を呼び出すと、使用可能なインスタンスに解決される Promise が返されます。インスタンスは、writeFile、ff_init_demuxer_file、ff_init_decoder、ff_read_multi、ff_decode_multi などの関数を提供し、メディア操作を処理します。仮想デバイスを介した非同期 I/O をサポートしており、FFmpeg のインメモリファイルシステムの制限を回避します。このプロジェクトは高度にカスタマイズ可能です。特定のコーデックとコンテナを含むプリビルドバリアント(例:default、opus、flac、webm、aac)を選択したり、設定フラグメントを使用して独自のバリアントを作成したりできます。各バリアントは、ffmpeg および ffprobe CLI ツールを含めるかどうかを選択してビルドでき、オプションのデバッグバージョンも利用できます。ライセンスは慎重に処理されています。FFmpeg は LGPL であるため、ソースコードが含まれています。ラッパーコードは寛容な 0-clause BSD ライセンスを使用しています。

対象読者

これは、ブラウザでオーディオやビデオを処理する必要がある Web 開発者向けです。たとえば、メディアエディタ、コンバータ、ストリーミングアプリケーションの構築などです。また、ブラウザのサポートに関係なく特定のコーデックセットを保証したい場合(特に、マキシング/デマキシングがなく、コーデックのカバレッジが一貫していない WebCodecs と組み合わせる場合)にも役立ちます。このライブラリはブラウザと Node.js で動作しますが、Node.js ユーザーはネイティブ FFmpeg を使用することをお勧めします。TypeScript プロジェクトへの統合のために、TypeScript 型定義が提供されています。

ハイライト

  • 純粋な JavaScript と WebAssembly — プラグインやサーバーは不要。
  • 完全な FFmpeg ライブラリに基づく:libavformat、libavcodec、libavfilter、libavutil、libswresample。
  • ffmpeg および ffprobe CLI(特定のバリアント)を JavaScript 関数として含む。
  • モジュール式バリアント:各デマキサーまたはデコーダー用に個別のビルドを提供し、AVGuesser や TransAVormer などのコンパニオンツールを介してオンデマンドロードを可能にします。
  • 仮想デバイスを介した非同期 I/O により、ファイルサイズは JavaScript の数値型によってのみ制限されます。
  • コンパニオンのポリフィルおよびブリッジプロジェクトを通じて WebCodecs と連携。
  • 明確なライセンス:ソースコード提供(LGPL)、ラッパーコードは 0-clause BSD。
  • 高度にカスタマイズ可能:異なる FFmpeg バージョンに対してビルドしたり、カスタムバリアントを作成したりできます。
  • NPM と GitHub で公開されており、CDN オプションも利用可能です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト