動画圧縮ツール

ブラウザで動画を圧縮(無損失・音声削除に対応)

1234

動画圧縮ツールについて

この圧縮ツールは、FFmpegをWebAssemblyに移植したffmpeg.wasm(0.12.10、シングルスレッド版コア)を初回実行時にCDNから読み込み、ブラウザ内で動かします。動画はどこにもアップロードされませんが、エンコード速度はCPUの1コア分に限られます。デスクトップ版FFmpegより数倍遅いのが普通で、1分の1080p動画でも数分かかることがあります。

モードは3つです。「画質圧縮」はH.264(libx264)で再エンコードしてMP4に、「元のまま(再エンコードなし)」は再エンコードせずストリームをそのまま詰め替え、「音声削除」は映像はそのままで音声トラックだけを外します。容量が大きく減るのは1つ目だけです。

CRFは目標サイズではなく目標画質

画質圧縮モードはビットレートを指定せず、CRF(Constant Rate Factor)でエンコードします。CRFは0〜51の画質目標で、小さいほど高画質・大容量です。エンコーダーは動きの多い場面に多く、静止した場面に少なくビットを配分して体感画質をそろえるため、同じCRFでもサッカー中継は大きく、スライド録画は小さくなります。

FFmpegのWikiによる目安は、CRFを6上げると容量はおよそ半分、6下げるとおよそ2倍です。このツールの3段階は23(高画質)、28(標準)、33(高圧縮)で5ずつ違います。x264の既定値が23なので、23は元とほぼ見分けがつかない水準、33はスマホ画面なら見られる水準と考えてください。

CRFの弱点は、仕上がりの容量を先に決められないことです。上限のあるサービスに上げるなら、一度圧縮してみて超えたらCRFを上げるか解像度を下げてやり直すしかありません。

なぜH.264のMP4だけなのか

VP9やAV1は同じ画質ならH.264より小さくなりますが、エンコードがはるかに遅く、シングルスレッドのWebAssemblyでAV1を作ると短い動画でも現実的ではありません。再生側の互換性も違います。H.264のMP4はほぼすべてのスマホ、テレビ、メッセンジャー、古いWindows PCでハードウェア再生できますが、AV1のハードウェアデコードは比較的新しい機器に限られます。

x264のpresetにveryfastを使っているのも同じ理由です。presetは圧縮効率と速度の交換で、既定のmediumより速い代わりに同じCRFで少し大きくなります。音声はAAC 128kbpsで再エンコードします。

CRFより先に解像度を下げる

1080p(1920×1080)を720p(1280×720)にするとピクセル数は44%になります。スマホやメッセンジャーのプレビューでは差が分かりにくいのに容量は大きく減り、CRFを33まで上げてつぶれさせるより結果がよいことがほとんどです。

解像度を選ぶと高さを合わせ、幅は縦横比から自動計算します。H.264は奇数サイズをエンコードできないため、縦横とも偶数にそろえます。元より小さい値だけが意味を持ちます。縦動画(1080×1920)で720pを選ぶと高さが720になり、想像よりかなり小さくなる点に注意してください。

「元のまま」と「音声削除」がしていること

「元のまま」モードは映像と音声をデコードせずに新しいコンテナへコピーします(ストリームコピー)。画質の劣化はなく数秒で終わりますが、再圧縮しないので容量はほぼ変わりません。役に立つのはコンテナの整理で、MP4・WebM・MKV・AVIは同じ形式、MOVなどそれ以外はMKVで保存します。MP4で保存するときは索引(moov)をファイルの先頭に移す(faststart)ので、Webに載せると全部を受信する前に再生が始まります。

音声削除モードも映像はコピーし、音声だけを外します。減るのは音声トラックの分だけで、128kbpsなら1分あたり約0.96MBです。音のいらない画面録画を手軽に軽くするのに向いています。

例

アップロード上限に合わせたビットレート計算

入力
60秒の動画を8MiBに収めたい、音声AAC 128kbps
結果
映像に使える平均ビットレートは約0.99Mbps

8MiB=67,108,864ビット÷60秒≒1,118,000bpsから音声の128,000bpsを引くと約990kbps。1080pには足りず720pや480pなら現実的なので、先に解像度を下げてCRF 28で試すのが順番です。

解像度だけ変えた場合

入力
1920×1080 → 720pを選択
結果
1280×720、ピクセル数44.4%

1280×720÷(1920×1080)=921,600÷2,073,600=0.444。CRFが同じでも、エンコードする情報が半分以下になります。

画面録画から音声だけ外す

入力
10分の画面録画、音声128kbps、「音声削除」
結果
約9.6MB減、映像は元のまま

128,000bps×600秒÷8=9,600,000バイト。映像は再エンコードしないので、画質も処理時間も損をしません。

使い方

  1. 動画ファイルを選びます(300MBを超えるとメモリ不足の警告が出ます)。
  2. モードを選び、画質圧縮なら画質の段階と解像度を決めます。
  3. 初回はエンジン(約30MB)を読み込んでからエンコードが始まります。
  4. 結果をプレビューして容量を確認し、ダウンロードします。

よくある質問

圧縮にとても時間がかかります。

ffmpeg.wasmはCPU1コアだけを使うシングルスレッド版なので、デスクトップ版よりかなり遅くなります。720pや480pに下げるとエンコードするピクセルが減り、時間も大きく短縮されます。

「元のまま」モードにしたのに容量が変わりません。

正常です。このモードはストリームをそのままコピーするので圧縮は起きません。容量を減らすには画質圧縮モードを使ってください。

ちょうど10MBに合わせられますか?

CRF方式なので目標容量は指定できません。一度試して超えたら、CRFを上げるか解像度を下げて再圧縮してください。

AV1やVP9で保存できますか?

対応していません。ブラウザ内のシングルスレッドでは遅すぎるうえ、H.264が再生互換性で最も有利だからです。

iPhoneのHDR動画を圧縮したら色があせて見えます。

HDRをSDR向けに変換するトーンマッピングを行わないため、色が薄く、または暗く見えることがあります。HDR動画はiPhoneから書き出す際に「互換性優先」を選ぶほうが安全です。

出典

基準日:

プライバシーとデータの扱い