VideosKitVideosKit
Engineering1 min readFeatured

なぜブラウザベースの動画処理ツールを構築したのか

VideosKit Team

#webcodecs#mediabunny#browser-apis#performance#video-processing
なぜブラウザベースの動画処理ツールを構築したのか

なぜブラウザベースの動画処理ツールを構築したのか

ウェブ用の動画ツールを構築しようと決めたとき、従来の常識は明確でした:動画処理はサーバーで行うべきだ。ファイルをアップロードし、FFmpegを実行し、結果を返す。シンプルで実績があり、帯域幅、コスト、プライバシーによって深く制限されていました。

私たちは、もっと良い方法があるはずだと考えました。結局のところ、それはずっと私たちのブラウザの中にあったのです。

現状:ffmpeg.wasm

過去数年間、ffmpeg.wasmはブラウザ内動画処理の頼りになるソリューションでした。FFmpegをWebAssemblyにコンパイルすることで、FFmpegの全ツールキットにブラウザ内で直接アクセスできます。これは機能しますが、重大な欠点があります:

  • 大きなバンドルサイズ: ffmpeg.wasmのコアは約25MBで、形式固有のコーデックを含めると30MB以上になる
  • 遅い初期化: 処理を開始する前に25MBのWebAssemblyモジュールをロードする
  • デフォルトでシングルスレッド: ハードウェアアクセラレーションへのアクセスがない
  • メモリ制約: WebAssemblyの線形メモリ制限(4GB)が大きなファイルで問題を引き起こす
  • ハードウェアデコードなし: ソフトウェアのみのデコード/エンコードで、GPUアクセラレーションが完全に欠落している

私たちのベンチマークでは、50MBのMP4動画を70%の品質で圧縮するのに、ffmpeg.wasmでは45〜60秒かかりました。悪くはないですが、素晴らしいとも言えません。

WebCodecsのアプローチ

WebCodecs APIは、比較的新しいブラウザAPIで、ブラウザのネイティブメディアコーデックに直接アクセスできます — YouTube、Netflix、その他すべてのストリーミングプラットフォームで動画再生に使用されているものと同じです。主な利点は以下の通りです:

  • ハードウェアアクセラレーション: 利用可能な場合、GPUをデコードとエンコードに使用
  • バンドルオーバーヘッドゼロ: WebAssemblyなし、コンパイル済みバイナリなし — ネイティブブラウザAPI
  • 高速初期化: すぐに利用可能、ロード時間なし
  • 完全な形式サポート: H.264、H.265、VP8、VP9、AV1 — ブラウザがサポートするものすべて

ただし、WebCodecsは低レベルです。デマルチプレックス、フレームごとのエンコード、コンテナフォーマット、その他すべてを自分で処理する必要があります。それは多くの配管作業です。

mediabunnyの登場

私たちは、WebCodecsをシンプルで人間工学に基づいたAPIでラップする軽量ライブラリ、mediabunnyを構築しました。これにより、複雑な部分が処理されます:

  • 自動デマルチプレックス: コンテナ形式を検出し、ビデオ/オーディオストリームを抽出
  • フレームレベル制御: 個々のフレームにアクセスして正確な編集が可能
  • スマートな再エンコード: リアルタイムの進行状況を伴う設定可能な品質プリセット
  • メモリ効率の良いストリーミング: フレームを一度にすべてではなく、チャンクで処理

パフォーマンス比較

メトリックffmpeg.wasmmediabunny (WebCodecs)
バンドルサイズ25-30MB~15KB
初期化3-5秒即時
50MB圧縮 (70%)45-60秒10-20秒
ハードウェアアクセラレーション
メモリ使用量 (50MBファイル)~800MB~300MB

全体的に3〜5倍高速で、メモリ使用量が劇的に少なく、バンドルオーバーヘッドはゼロです。

プライバシー:キラー機能

パフォーマンスは素晴らしいですが、ブラウザベースの処理を本当に際立たせるのはこれです:アーキテクチャによるプライバシー

サーバーベースのツールでは、あなたのデータを他人に委ねることになります。善意のサービスであっても、サーバーは侵害されたり、召喚されたり、誤って設定されたりする可能性があります。VideosKitでは:

  • ファイルはデバイスから離れることはありません — ファイルアップロード用のサーバーエンドポイントは文字通り存在しません
  • クッキーなし、トラッキングなし、ファイルコンテンツに関する分析なし
  • ロード後はオフラインで動作 — 飛行機内、制限されたネットワーク、どこでも動画を処理できます
  • 機密コンテンツ向けにエンタープライズフレンドリー — データレジデンシーやコンプライアンスの懸念なし

開発上の課題

これを構築することは課題なしではありませんでした:

大容量ファイルの処理

ブラウザはランダムなファイルアクセスを提供しません。私たちはFile APIとストリーミングを使用して、ファイル全体をメモリにロードすることなく、動画をフレームごとに処理します。これには、慎重なバッファ管理とガベージコレクションの調整が必要でした。

クロスブラウザ互換性

WebCodecsはChrome 94+、Edge 94+、Safari 16.4+でサポートされています。Firefoxはバージョン130でサポートを追加しました。私たちは機能を検出し、サポートされていないブラウザにはメッセージを表示して適切にフォールバックします。

メモリ管理

動画フレームは大きいです — 単一の4Kフレームは非圧縮で約33MBです。4Kコンテンツでもメモリ使用量を抑えるために、フレームプーリングとストリーミングパイプラインを実装しました。

進捗報告

ユーザーはどれくらい待つ必要があるかを知る必要があります。フレーム位置に基づいて進捗を報告し、正確なリアルタイム更新を提供するコールバックシステムを構築しました。

オープンソース

VideosKitとmediabunnyはどちらもオープンソースです。コードをご覧ください:

貢献、問題、フィードバックを歓迎します。

ブラウザベース動画の未来

WebCodecsはまだ進化しています。AV1エンコーディング、WebGPUを活用した処理、改良されたMediaSource Extensionsにより、ブラウザベースの動画はさらに強力になるでしょう。私たちは、可能なことの限界を押し広げることに興奮しています。

まだVideosKitを試していない方は、videoskit.ccにアクセスしてください。動画の圧縮、変換、トリミング、検査をすべてブラウザで、すべて無料で。