# 動画を圧縮 送れる容量まで小さく

容量の上限を指定すると、設定を計算し、結果を実測します。

> ブラウザで動画を8、16、25MBなど好きな容量未満に縮めます。上限からフレームの大きさとビットレートを計算し、エンコードして実測します。アップロードせず、音声はそのままコピーします。

このページは、ブラウザの中だけで動く対話型のツールです（https://abox.tools/ja/compress-video/）。渡したものが送信されることはありません。以下は、このページがツールについて言葉で説明している内容のすべてです。使うには、このアドレスを開いてください。

## 動画が**アップロードされることはありません**。サーバーが存在しないからです。

選んだ動画を端末でデコードし、小さく描き、ブラウザ自身のコーデックとこのアドレスのコードで再エンコードしてメモリに書きます。アップロード機能も受け取るサーバーもなく、大きなファイルを送って小さなものを受け取る必要はありません。

- ✗ アップロードなし
- ✗ アカウント不要
- ✓ オフラインで動作
- ✓ ソース公開
- ✓ ファイルは端末の中だけ

## 動画を送れる容量まで圧縮する手順

1. **動画を選びます。** MP4かMOVを1つずつ扱います。ブラウザがディスクから直接読み、長さ、容量、フレームの大きさ、毎秒の容量を表示します。
2. **容量の上限を指定します。** MBで入力するか、8、16、25、50、100MB、半分、4分の1のボタンを押します。長さと音声を考慮した大きさ、ビットレート、見込み容量を下に表示します。音声を除くとすべてを映像に使えます。
3. **必要ならフレームの大きさを指定します。** 上限から自動で選びますが、文字を読める1080pの録画や電話で見るだけの動画など、自分で指定もできます。その大きさへビットレートを割り当てます。選んだ値は上限で、元より大きくしません。
4. **圧縮し、実測結果を読みます。** フレームごとにデコード、縮小、再エンコードし、進捗を表示します。完成したファイルを実測して開き直し、長さを確認します。容量を超えたらもう1回圧縮して伝えます。結果はメモリから再生できます。

## 詳しい解説

[送れる容量まで動画を圧縮する方法](https://abox.tools/ja/guides/compress-a-video/): 容量の上限が動画に与える影響、容量の使われ方、画質が崩れる前にフレームを小さくする理由、できるだけ情報を残す方法、アップロードせずにブラウザーで圧縮する方法を説明します。

## 箱の中のほかのツール

- [MP4変換ツール](https://abox.tools/ja/convert-to-mp4/): 録画、取り込み、カメラの動画をH.264とAACのMP4に。使える部分はコピーし、必要な部分だけ再エンコードします。
- [動画回転ツール](https://abox.tools/ja/rotate-video/): 右に90度、180度、左に90度。ヘッダーに回転を書き、フレームはデコードせず画質を保ちます。
- [画像→動画変換ツール](https://abox.tools/ja/images-to-video/): 画像の入ったフォルダを、1本の動画に変えます。
- [動画カットツール](https://abox.tools/ja/trim-video/): 再生しながら残す場所に印を付けるだけ。まとめて1本の動画で返します。

## よくある質問

### どこまで小さくできますか？

見られる映像にできる範囲で、指定した上限まで小さくします。下限はページで伝えます。音声はそのままで普通のステレオなら毎分約1MB、最小の映像にも毎秒数百kbitほど必要です。厳しい上限なら、音声を除いて映像へ回すことが役立ちます。

### フレームの大きさが変わったのはなぜですか？

同じ2Mbit/sでも720pには十分で、4Kではぼやけるためです。容量からビットレートを決め、各フレームへ十分な情報を割り当てられるまで小さくします。大きくぼやけた映像より、小さく鮮明な映像を選びます。開始前に伝え、自分で大きさを選ぶこともできます。

### 画質は落ちますか？

はい。指定容量に必要な分だけ映像を低いビットレートで再エンコードします。音声は変更しません。900MBを25MBにするなら多くの情報を減らし、半分なら変化は少なくなります。選んだビットレートと大きさを表示して、この交換を見えるようにします。

### 何の形式を書き出しますか？

H.264映像のMP4で、音声はそのままコピーします。電話、ブラウザ、チャット、メールで広く再生でき、送るファイルに向いています。WebM、HEVC、AV1は同画質で小さくても相手が開けない場合があるため書きません。

### どのファイルを読めますか？

MP4とMOVの、ブラウザがデコードできるH.264、HEVC、VP9、AV1を扱います。iPhoneのHEVCは端末がライセンスを持つ場合に読めます。WebM、MKV、AVIはまだ扱わず、種類を伝えます。

### どれくらい時間がかかりますか？

端末のエンコード速度によります。ハードウェアエンコーダーのある多くの端末では、1分の1080pなら通常1分未満です。ない場合は長く、長い4K動画はどちらでも時間がかかります。進捗を表示し、キャンセルすると直ちに止まって書き出しません。

### 2回処理したのはなぜですか？

エンコーダーは指定ビットレートの近くへ合わせ、動きの多い動画では超えることがあります。少し低く指定して実測し、超えた差から再計算してもう1回処理します。2回で収まり、2回になった場合は伝えます。

### 動画は送信されますか？

いいえ。読み込み、デコード、エンコード、書き出しはブラウザと端末で行います。`Content-Security-Policy`の接続先に、このサイト自身のものはありません。通信を切って確認できます。大きなファイルでは送信時間を省くことも速さにつながります。

### 電話でも動きますか？

エンコード対応のブラウザなら動きます。電話のハードウェアエンコーダーは高速ですが、結果をメモリに保持するため、長い動画では足りない場合があります。先に[動画トリミングツール](https://abox.tools/ja/trim-video/)で短くするか、パソコンで圧縮してください。

### 容量制限や料金はありますか？

ツール自体に上限はありません。入力は分割して読み、結果をメモリに保持するので限界は端末によります。ノートパソコンでは数百MBの結果は通常扱えます。無料で、アカウント、ログイン、お試し期間はなく、広告にも動画の情報は渡しません。

### オフラインでも動きますか？

はい。一度開いて通信を切っても動きます。動画を別の場所へ送って圧縮するツールなら止まるので、送信しないことの確認になります。

## この主張を確かめる方法

- **時間のかかるアップロードがありません。** オンライン圧縮では900MBを送って25MBを受け取る前に、全ファイルの送信が必要です。送信時間がエンコードより長くなることもあります。ここではブラウザに備わるコーデックで端末内だけで処理します。`Content-Security-Policy`の接続先に、このサイト自身のものはなく、通信を切っても動きます。
- **目的は容量なので、まず上限を聞きます。** チャット、メール、フォームの上限未満で、できるだけ画質を保ちたいはずです。音声をそのままコピーし、コンテナの分を引いた残りを長さで割って映像のビットレートにします。その容量で描ける画素数に合わせ、よく使う大きさの段階を下げます。元より大きくしません。開始前に計画を伝え、フレームの大きさは自分でも指定できます。
- **動画の圧縮は再エンコードです。** ZIPの可逆圧縮とは違います。映像をデコードし、小さく描き、指定容量に合うビットレートのH.264で再エンコードするので、元より1世代の画質変化があります。音声はそのままコピーします。結果は電話、ブラウザ、チャットで広く再生できるMP4です。
- **結果を実測し、超えた場合はもう1回圧縮します。** エンコーダーはビットレートの近くにしか合わせられないので、上限より少し低く指定し、結果を測ります。超えた場合は差から再計算してもう1回エンコードし、2回になったことを伝えます。その後、開き直して元の長さを確認します。末尾や音声を落とすだけでも小さくなるため、読み直しが必要です。
- **端末に必要な時間とメモリ。** ハードウェアエンコーダーのある多くのノートパソコンや最近の電話では、通常は動画の長さより速く処理します。ない場合は長くなり、長い4K動画はどちらでも時間がかかります。入力は分割して読むのでメモリより大きくても使えますが、結果は保存までメモリに保持します。いつでもキャンセルできます。
- **読める形式と、扱わない形式。** 電話、カメラ、録画ソフトが作るMP4とMOVを扱います。H.264、HEVC、VP9、AV1のうちブラウザがデコードできるものです。iPhoneのHEVCは端末に対応ライセンスがあれば読めます。WebM、MKV、AVIはまだ扱わず、そのことを明示します。
- **Googleが読み込むものと、渡されないもの。** 広告と計測のスクリプトはGoogleから読み込みます。動画、フレーム、名前、サイズ、長さ、指定容量は渡しません。読み込み、エンコード、書き出しのコードはこのサイト自身から配信され、リポジトリで公開されています。
- **寄付ボタンが読み込むものと、渡されないもの。** ヘッダーの「Buy me a coffee」ボタンはcdnjs.buymeacoffee.comのスクリプトが描き、Google Fontsの文字を使います。訪問を報告しないリンクで、利用者や動画の情報は渡しません。クリックするまで何も起こらず、移動先は別のサイトです。
- **オフラインでも動きます。** 通信を切ってもすべての機能が動きます。動画を別の場所へ送って圧縮するツールなら止まるので、簡単な証明になります。

**自分で確かめてください。**以上のどれも、鵜呑みにする必要はありません。このページは、リポジトリにあるテンプレートと設定から、誰でも読んで実行できるビルドスクリプトが生成しています。その結果は`dist`ブランチに置いてあるので、配信されているものと、ソースをビルドした結果とを差分で比べられます。 https://github.com/A-Box-of-Tools/website

まず読むとよいのは、Content-Security-Policyについては`config/site.toml`、容量から大きさとビットレートを計算する`src/plan.js`、デコード、描画、エンコードと音声のコピーを行う`src/encode.js`をご覧ください。読み込み・書き出し処理も含めて通信機能はありません。
