← 一覧へ戻る

アップロード一切なし — ブラウザ完結の動画圧縮ツールを作った話

2026-05-20

「動画 オンライン 圧縮」で検索すると、無料で清潔で便利そうなサービスが何十も出てきます。ファイルをドロップして、30秒待って、小さくなったバージョンをダウンロード。簡単です。

ですが、それらのほとんどが教えてくれないことがあります:あなたの動画は彼らのサーバーに置かれます。数時間後に削除されるかもしれない。スタッフは見ないかもしれない。バックアップにはコピーが残らないかもしれない。かもしれない

私たちは ToolKoala 動画圧縮 を、その「かもしれない」を取り除くために作りました。あなたの動画ファイルはノートパソコンから離れません。私たちのサーバーにも、誰のサーバーにも送信されません。圧縮はすべて、あなたのブラウザの CPU 上で実行されます。この記事はその仕組み、トレードオフ、そして自分で検証する方法を説明します。

鍵となる技術:WebAssembly にコンパイルされた FFmpeg

FFmpeg はほとんどのプロフェッショナル動画ツールの裏で動いている、オープンソースの動画エンコーダです — YouTube の取り込みパイプラインから、お気に入りの Mac アプリまで。20年以上の歴史があり、考えうるあらゆるコーデック、コンテナ、色空間を扱えます。

数年前、FFmpeg チームは全体を WebAssembly にコンパイルしました — モダンなブラウザでネイティブに近い速度で動作する、ポータブルなバイナリ形式です。その結果が @ffmpeg/ffmpeg — 約 30 MB の WebAssembly モジュールをロードして、FFmpeg のコマンドラインインターフェースを Web ページに公開する JavaScript パッケージです。

動画圧縮ツールに MP4 をドロップしたとき、こんなことが起こります:

  1. ブラウザが FFmpeg WebAssembly モジュール(約 30 MB)を一度だけダウンロード。キャッシュされるので、その後の訪問ではスキップ。
  2. モジュールが Web Worker にロードされる — DOM にアクセスできないバックグラウンドスレッド。
  3. writeFile() であなたの動画ファイルを worker に渡す。これはメモリ内コピー。ネットワーク通信なし。
  4. Worker が ffmpeg -i input.mp4 -c:v libx264 -crf 28 output.mp4 を実行 — あなたの CPU 上で再エンコード。
  5. Worker が圧縮されたバイトを返す。それを Blob でラップして、ダウンロードリンクを生成して、終わり。

処理中のどの時点でも、あなたの動画はネットワーク経由で送信されません。ネットワークトラフィックは FFmpeg エンジン自体が公開 CDN からロードする分だけです。

自分で検証 — 10 秒で完了

私たちを信用する必要はありません。ブラウザの開発者ツールを信用してください。

  1. Chrome または Firefox で https://www.toolkoala.com/ja/video-compress/ を開く。
  2. DevTools を開く(F12 または右クリック → 検証)。
  3. Network タブに切り替える。ゴミ箱アイコンで既存のリクエストをクリア。
  4. 動画ファイルをページにドロップ。

ネットワークリクエストが発火するのが見えます — ただし、FFmpeg エンジンのファイル(ffmpeg-core.jsffmpeg-core.wasm、unpkg.com から)だけです。あなたの動画ファイルからの外向きリクエストはゼロ。圧縮の全工程中、Network タブを開いたままで確認できます — 静かなままです。

これが意味のある唯一の種類のプライバシー声明です:パブリッシャーを信用しなくても 10 秒で検証できる種類。

なぜすべてのオンライン圧縮ツールがこれをしないのか?

3 つの理由があります。

速度。サーバーサイド圧縮は専用ハードウェアを使います — 通常 GPU か専用の H.264 ASIC エンコーダ。1 分のクリップを 10 秒以内に圧縮できます。WebAssembly はノートパソコンの CPU でシングルスレッドで実行されます。同じジョブが私たちでは 1〜3 分かかります。個人用途のほとんどではこれで OK です。100 本の動画をバッチ処理するなら、ダメです。

ファイルサイズ。ブラウザのメモリには上限があります。アップロードを 1 GB に制限しています。サーバーサイドのツールは数百 GB を扱えます。4K アーカイブを圧縮するなら、デスクトップの HandBrake を使ってください。

エンジニアリングコスト。サーバーサイドはすべてのフレームワークが教える標準アーキテクチャです。ブラウザサイドには Web Worker、WebAssembly のメモリモデル、blob URL、type: "module"type: "classic" worker の微妙な違いの理解が必要です(私たち自身、このバグを踏みました — module worker は importScripts をサポートしないので、UMD ではなく ESM 版の ffmpeg-core をロードする必要があります)。これは面倒な道で、プライバシーが本物のプロダクト要件でない限り、ほとんどのチームは選びません。

私たちが犠牲にしたもの

正直さはマーケティングより大事です。サーバーサイド圧縮ができて、私たちにはできないこと:

  • GPU アクセラレーション-hwaccel cuda-c:v h264_nvenc なし。CPU のみ。
  • ハードウェアアクセラレーション付き H.265/AV1。ブラウザの WebAssembly はソフトウェアの H.264 をサポート。新しいコーデックも動くが、さらに遅い。
  • 約 1 GB を超えるファイル。ブラウザのメモリ上限は 2〜4 GB(プラットフォーム次第)。約 1 GB を超える入力ではメモリ確保が失敗し始める。
  • 信頼できるモバイル体験。スマホは長い動画でメモリ不足になり、大幅に遅くなる。デスクトップを推奨。

これらが重要なら、HandBrake(デスクトップ、無料、オープンソース)を使ってください。

それでも作った理由

説得力のあった 2 つの実ユースケース:

  1. メール添付。皆 Gmail の 25 MB 添付制限に常に当たる。60 MB の動画を送信前に小さくする必要がある。「この圧縮サービスはサムネを売っていないだろうか」を考えたくない。

  2. 機密性の高い素材。保険請求、医療記録、家族の瞬間、作業中のドラフト。ランダムなドメインにアップロードしたくないもの。「このサイトは安全か?」のメンタル税は、「あなたのファイルはどこにも行かない」が証明可能な場合、消えます。

どちらかに該当するなら、試してみてください:ToolKoala 動画圧縮。ファイルをドロップ、品質を選択、1 分待つ、ダウンロード。登録不要、透かしなし、メール不要、アップロードなし。

謝辞

これが可能なのは FFmpeg チームの 20 年の仕事、ブラウザ用にラップする @ffmpeg/ffmpeg のメンテナたち、そしてバイトレベルの可搬性を出荷可能なほど退屈にした WebAssembly 仕様策定者のおかげです。

私たちは小さなチームで、ブラウザベースのプライバシーツールのスタック を作っています。PDF、画像、テキスト、動画 — どれも同じ原則です:あなたのファイルはソフトウェアを使うためにデバイスから離れる必要はありません。