CodeKitHub
日常ツール

動画を指定したファイルサイズに正確に圧縮

最終更新:

このツールは、必要なビットレートを正確に計算し、ブラウザ内で直接動作する ffmpeg(ffmpeg.wasm 経由)で再エンコードすることで、動画を指定したファイルサイズ——8MB、25MB、または任意のカスタム値——まで縮小します。動画がサーバーにアップロードされることはありません。計算方法は標準的な動画エンコードの公式(目標ビットレート = 目標サイズ ÷ 再生時間)に従っており、これはサイズ制約付きエンコードに対してHandbrake自身のドキュメントが推奨しているのと同じ手法です。Discord の無料プランのアップロード上限(8MB)に引っかかる場合は8MBプリセットを、メールプロバイダーが大きな添付ファイルを拒否する場合は25MBプリセット(Gmailの上限)を使ってください。それ以外の場合はカスタムの目標値を入力できます。

このツールとは?

目標サイズ指定型の動画圧縮ツールは、予測不能なサイズになりがちな汎用的な「画質」スライダーの代わりに、選んだファイルサイズに到達(またはわずかに下回る)するために必要なビットレートで動画を再エンコードします。この違いが重要になるのは、制限が動画の見た目ではなく、他者によって固定されている場合です。例えば Discord の無料プランの添付ファイル上限は8MB、Gmail をはじめとするほとんどのメールプロバイダーの添付上限は25MBです。

このツールは動画の再生時間を測定し、目標サイズに対する合計ビットレート予算を計算したうえで、その予算を動画ストリームと音声ストリームに配分し、オープンソースの FFmpeg エンコーダーの WebAssembly ビルドである ffmpeg.wasm を使い、ブラウザタブ内で完全に再エンコードします。アップロードは一切発生せず、エンコード処理はお使いの端末上で行われます。

なぜこれを使うのか?

  • 100%ローカル処理:動画ファイルが端末の外に出ることはなく、サーバーへのアップロードもホスティング容量による制限もありません。
  • 現実的な制約に対応:8MB(Discordの無料プラン)と25MB(Gmail/ほとんどのメールプロバイダー)はワンクリックのプリセットとして用意されており、それ以外の上限にはカスタムサイズ入力で対応できます。
  • 当てずっぽうではなく、再生時間からビットレートを求める標準的な公式を使用。安全マージンも組み込まれているため、実際の出力が目標を超えることはほとんどありません。
  • エンコード中はライブの進捗バーを表示——長い動画では ffmpeg.wasm の処理に時間がかかることがあるため、フリーズしているのではなくきちんと動作していることが常にわかります。
  • 圧縮後は正確な出力サイズが表示されるため、アップロードや添付の前に上限を満たしているかを確認できます。

使い方

  1. ドロップゾーンをクリックする(またはファイルをドラッグする)と動画が読み込まれます。まずツールがサイズと再生時間を読み取ります。
  2. 目標を選びます。Discord なら8MB、メール/Gmail なら25MB、またはMB単位でカスタムサイズを入力します。
  3. 「Compress video」をクリックし、進捗バーを確認します。エンコードはブラウザ内で行われ、動画の長さやお使いの端末によって数秒から数分かかることがあります。
  4. 完了したら表示された出力サイズを確認し、「Download」をクリックします。

入力

clip.mp4 — 42MB、再生時間0:35

出力

clip-8MB.mp4 — 7.6MB

目標は8MB(Discord向け)。35秒のクリップに対して約1.5Mbpsの動画ビットレートを計算し、10%の安全マージンを取ってエンコードした結果、余裕を持って上限内に収まりました。

目標ビットレートの計算方法

基本となる公式はシンプルです。合計ビットレート(kbps)=目標ファイルサイズ(キロビット単位)÷再生時間(秒)。このツールはこの計算に入る前に、バイト予算に対して約10%の安全マージンを適用します。そのうえで、確保しておく音声ビットレート(通常128kbps。非常に小さい目標の場合は96kbpsや64kbpsまで下げ、音声がタイトな予算を食いすぎないようにします)を差し引いて動画ビットレートを算出します。この動画ビットレートは、複雑な動きの短いバーストが目標を大きく超えてしまわないよう、上限(`-maxrate`)とバッファサイズ(`-bufsize`)の両方を指定したうえで ffmpeg のエンコーダーに渡されます。

これらのプリセットを厳密に使う人にとって重要な単位変換の話が1つあります。Discord の「8MB」のようなプラットフォームのアップロード上限は、通常はバイナリメガバイト(1MB = 1,048,576バイト、MiBと呼ばれることもあります)を指しており、これはストレージや転送の上限を表す際の一般的な指定方法と一致します。このツールのバイト予算計算はあえて保守的に設計されており、目標予算にはより小さく厳しい1000進法のメガバイトを使い、その上にさらに安全マージンを重ねています。そのため、「MB」をどちらの意味で解釈しても、結果は上限内に収まります。

主要プラットフォーム向けの目標サイズの選び方

どの上限が適用されるか分からない場合は、そのプラットフォームが表示するエラーメッセージを確認してください。ほとんどの添付ファイルサイズに関する拒否メッセージには正確な上限が記載されており、それをそのままカスタム目標として入力できます。

送信先一般的な上限推奨する目標
Discord(無料プラン)添付ファイル1件あたり8MB8MBプリセット
Discord Nitroプランに応じて50〜100MBカスタムサイズ
Gmail/ほとんどのメールプロバイダー1メッセージあたり25MB25MBプリセット
Slack(無料ワークスペース)1GB(ただし大きなファイルはアップロードが遅くなる)必要であればカスタムサイズ

実際に検証してみた結果

コマンドラインの FFmpeg で合成テストクリップ(トーン音声付きの1280×720、12秒の動画を約800kbpsでエンコードし、現実的な数メガバイト規模のソースファイルを作成)を生成し、このツールで8MBのDiscordプリセットを目標に処理しました。出力は想定通り8MB未満に収まり、机上の計算式だけでなく実際のエンコードでもビットレート計算と安全マージンが機能することを確認できました。

よくある質問

動画はどこかにアップロードされますか?

アップロードされません。圧縮は FFmpeg の WebAssembly ビルドである ffmpeg.wasm を使い、ブラウザタブ内で実行されます。動画ファイルはローカルで読み込まれ、サーバーに送信されることはありません。ページとエンジンが一度読み込まれた後であれば、インターネット接続を切断しても構いません。

なぜ最初の圧縮は始まるまで時間がかかるのですか?

このツールは、セッション内で最初に圧縮を実行する際に ffmpeg.wasm エンジン(約30MB)を読み込みます。その初回読み込みの後は、同じページ上での以降の圧縮はすぐに開始されます。

出力は必ず目標サイズ以下になりますか?

実際のエンコーダーはフレームごとに正確なビットレートを維持できるわけではないため、このツールは安全マージンを確保しています(実際のビットレート予算は選択したサイズの約90%を目標にしています)。まれに出力がわずかに上回ってしまう場合は、より小さいカスタム目標を選んでマージンを増やしてください。その場合はツールが警告を表示します。

なぜDiscord向けは特に8MBなのですか?

Discord の無料(非Nitro)プランは、添付ファイル1件あたりのアップロードを8MBに制限しています。Nitro 加入者はプランに応じて50MBまたは100MBまでの上限が適用されます。8MBプリセットは、ほとんどの人が直面する無料プランの上限を対象にしています。

なぜメール向けは25MBなのですか?

25MB は Gmail の添付ファイル上限であり、他の主要なプロバイダーでもよく見られる上限です。お使いのプロバイダーの上限が異なる場合は、カスタムサイズ入力を使ってください。

圧縮すると画質は悪くなりますか?

はい、これは避けられません。元のサイズよりはるかに小さいファイルサイズを目指すということは、それだけビットレートが下がるということであり、ディテールが失われたり、特に動きの速いシーンや情報量の多いシーンで圧縮アーティファクトが目立ったりすることがあります。このツールは目標サイズの範囲内でできるだけ高い画質を保てるよう、動画と音声のビットレート配分を自動的に選びますが、42MBのクリップを8MBまで圧縮すれば、元の映像よりも明らかに精細さは落ちます。

出力される動画・音声フォーマットは何ですか?

出力は常に H.264 動画と AAC 音声による MP4 形式です。Discord、メールクライアント、ほとんどのSNSプラットフォームで最も広く互換性のある組み合わせです。

関連ツール