メールで送れないほど大きい動画や、SNSへのアップロードに20分もかかる動画は、FFmpeg の 1 コマンドで小さくできます。
下記の環境での実測では、1080p の素材を H.264 CRF 23 で圧縮すると 29.3MB → 7.12MB(-75.7%、VMAF 93.29) になりました。
コマンド例
1. 基本:CRFモードでH.264圧縮(最も汎用的)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
-c:v libx264… H.264コーデックでエンコード-crf 23… 品質(0〜51。デフォルト23。数値が小さいほど高品質)-preset medium… エンコード速度と圧縮率のバランス-c:a aac -b:a 128k… 音声をAAC 128kbpsで再エンコード
2. H.265(HEVC)で高圧縮
下記の実測では、VMAFをそろえて比べるとH.264より 26〜35% 小さく、所要時間は約2倍でした(測定と補間の詳細)。他の素材や設定で同じ差になる保証はなく、VMAFが同じでも見た目の画質が完全に一致するわけではありません。
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4
3. SNS・メール送信向け(小サイズ優先)
# ファイルサイズを最優先で削減(画質の劣化が目立つ)
ffmpeg -i input.mp4 -c:v libx264 -crf 32 -preset fast -vf scale=1280:-2 -c:a aac -b:a 96k output.mp4
-crf 32… 品質を下げてサイズを優先-vf scale=1280:-2… 横幅1280pxにリサイズ(縦は偶数に自動調整)-b:a 96k… 音声ビットレートも下げる
4. 保存用(高画質・時間をかける)
H.265 と遅い preset で、時間をかけて高画質に保存します。
ffmpeg -i input.mp4 -c:v libx265 -crf 22 -preset slow -c:a aac -b:a 192k output.mp4
5. ビットレート指定でサイズを制御
ファイルサイズを予測しやすくしたい場合に使います。-b:v は平均の目標値なので、場面によってはこれを超えます。配信プラットフォームのビットレート上限を守るには、-maxrate と -bufsize も指定します(例:-maxrate 2000k -bufsize 4000k)。
# 映像2Mbps + 音声128kbps = 合計約2.1Mbps
ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -c:a aac -b:a 128k output.mp4
6. 2パスエンコード(最も精確なサイズ制御)
目標ファイルサイズに最も正確に近づける方法です。
# パス1: 映像分析(出力なし)
ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -pass 1 -an -f null /dev/null
# パス2: 実際の出力
ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -pass 2 -c:a aac -b:a 128k output.mp4
パス1の出力(
ffmpeg2pass-0.log)はパス2終了後に削除して構いません。
実測データ
次の値は、下記の環境でエンコードして測ったものです。VMAFは画質の推定指標で、100点でも画素の完全一致や、見た人全員が同じ評価をすることを示すものではありません。同じモデル・解像度・比較条件で使い、実画像も確認してください。VMAF公式FAQでは、同じ動画同士でも100点になる保証はないと説明されています。
横軸が出力サイズ、縦軸が VMAF。左上に寄っているほど「小さくて高画質」で優秀です。点の数字は CRF 値。以下の表が同じデータの実数値です。
| 項目 | 内容 |
|---|---|
| CPU / GPU | Intel Core i9-14900KF / NVIDIA RTX 4090 |
| FFmpeg | 8.1(gyan.dev full build) |
| 素材 | Big Buck Bunny 1920x1080 / 30fps / 10.0秒 / H.264 24.6Mbps / 29.3MB(音声なし) |
| 素材の権利 | © Blender Foundation, CC BY 3.0 |
| 測定日 | 2026-08-28 |
| サイズの単位 | 1 MB = 1,048,576 バイト |
H.264 の CRF 別(-preset medium)
| CRF | サイズ | 元比 | VMAF | 所要時間 |
|---|---|---|---|---|
| 20 | 11.38 MB | -61.1% | 95.11 | 2.23 秒 |
| 23 | 7.12 MB | -75.7% | 93.29 | 2.05 秒 |
| 26 | 4.52 MB | -84.6% | 90.51 | 1.89 秒 |
| 28 | 3.38 MB | -88.4% | 87.83 | 1.82 秒 |
| 30 | 2.55 MB | -91.3% | 84.28 | 1.77 秒 |
| 32 | 1.96 MB | -93.3% | 79.70 | 1.76 秒 |
H.265 の CRF 別(-preset medium)
| CRF | サイズ | 元比 | VMAF | 所要時間 |
|---|---|---|---|---|
| 22 | 7.96 MB | -72.8% | 94.86 | 4.68 秒 |
| 25 | 4.94 MB | -83.1% | 92.94 | 4.07 秒 |
| 28 | 3.04 MB | -89.6% | 90.03 | 3.52 秒 |
| 30 | 2.20 MB | -92.5% | 87.27 | 3.41 秒 |
| 32 | 1.60 MB | -94.5% | 83.53 | 3.28 秒 |
| 34 | 1.14 MB | -96.1% | 78.49 | 3.33 秒 |
この素材はアニメーションです。 素材が違えば、同じ CRF でもサイズは変わります。ノイズや速い動きが多いほど大きくなります。上の表は、傾向とおおよその規模をつかむために使ってください。
自分の素材での目安は、解像度・再生時間・CRF 値をファイルサイズ推定ツールに入れると、エンコードする前に確認できます。
CRF値の目安
| CRF値 | 体感品質 | 用途 | H.264ファイルサイズ目安 |
|---|---|---|---|
| 15〜17 | 透明(視覚的ロスレスに近い) | 映像制作マスター | 元ファイルの60〜80% |
| 18〜20 | 非常に高品質 | YouTube投稿・映像アーカイブ | 元ファイルの40〜60% |
| 21〜23 | 高品質(デフォルト) | 一般共有・Web公開 | 元ファイルの25〜40% |
| 24〜26 | 中品質 | SNS・プレビュー | 元ファイルの15〜25% |
| 27〜30 | やや劣化が見える | メール添付・軽量共有 | 元ファイルの8〜15% |
| 31〜35 | 劣化が目立つ | 最小サイズ優先 | 元ファイルの4〜8% |
注意: 数値はコンテンツ(アクション映像、アニメ、静止画多め等)により大きく変わります。上の実測では、CRF 20 が元ファイルの39%、CRF 23 が24%でした。必ず実際の出力で確認してください。
「コンテンツにより変わる」を実測した
どれくらい変わるのかを、同じ素材・同じ -crf 23 -preset medium のまま、素材の側だけを加工して測りました。
| 素材の状態 | 出力サイズ | VMAF | 元ファイル比 |
|---|---|---|---|
| そのまま | 7.12 MB | 93.29 | 24% |
| 粒子(grain)を加えた | 55.89 MB | 88.41 | 191% |
| 軽くぼかした | 4.40 MB | 73.57 | 15% |
| 720p に縮小 | 3.40 MB | 82.23 | 12% |
CRF を 1 も動かしていないのに、出力は 3.40MB 〜 55.89MB(16.4 倍) に開きました。読み取れることは 3 つです。
- ノイズは「圧縮したのに小さくならない/逆に大きくなった」の原因になります。 粒子を加えただけで元ファイルの 191% になりました。フィルム粒子、高 ISO の暗所撮影、古いビデオテープの取り込みが該当します。CRF を上げる前に、
-vf hqdn3dなどでノイズを落とす方法も試せます。 - ぼかすとサイズは減るが VMAF も落ちます。 4.40MB まで縮む代わりに VMAF は 73.57 まで下がりました。VMAF は原画との差を測るので、ぼかしは「軽くなった」ではなく「劣化した」と判定されます。サイズだけで判断しないでください。
- 解像度を落とすほうが素直に効きます。 720p 化は 3.40MB / VMAF 82.23 で、ぼかしより小さくかつ高スコアでした。同じサイズを狙うなら、ぼかすより縮小するほうが有利です。
つまり CRF の数字を詰めるより、素材のノイズと解像度を先に見るほうが効きます。
-preset 比較
同じ CRF 値でも preset が異なるとファイルサイズと処理時間が変わります。「品質はほぼ同等」とよく言われますが、実測すると VMAF は 88.09〜94.26 まで開きます。
とくに ultrafast は最速(0.88秒)ですが、出力が元ファイルより大きくなります。「とにかく速く」で選ぶと圧縮になりません。
| preset | エンコード速度 | ファイルサイズ | 用途 |
|---|---|---|---|
ultrafast |
最速 | 最大(CRFモードでは非効率) | リアルタイム処理 |
veryfast |
非常に速い | 小さめ(実測 −31.6%)。画質は下がる | ライブ変換・テスト |
fast |
速い | やや小さめ(実測 −2.9%) | 素早い変換が必要な場合 |
medium |
標準(デフォルト) | バランス | 一般用途 |
slow |
遅い | medium とほぼ同じ(実測 +0.3%) | 品質をわずかに上げたいとき |
slower |
非常に遅い | medium とほぼ同じ(実測 +1.9%) | アーカイブ |
veryslow |
最遅 | わずかに小さい(実測 −7.0%) | 最高効率が必要な場合 |
preset の実測(H.264 CRF 23 固定・同上の環境)
| preset | サイズ | VMAF | 所要時間 |
|---|---|---|---|
| ultrafast | 37.40 MB | 91.70 | 0.88 秒 |
| veryfast | 4.87 MB | 88.09 | 1.10 秒 |
| fast | 6.91 MB | 92.44 | 1.77 秒 |
| medium | 7.12 MB | 93.29 | 2.03 秒 |
| slow | 7.14 MB | 93.49 | 3.26 秒 |
| slower | 7.26 MB | 93.84 | 5.34 秒 |
| veryslow | 6.62 MB | 94.26 | 8.65 秒 |
測ってみると、よく言われている話といくつか食い違いました。
medium→slowでファイルは小さくなりませんでした。 7.12MB → 7.14MB(+0.3%)で、増えたのは所要時間だけです(1.61 倍)。slowにしても「同じ品質でより小さく」ではなく「ほぼ同じサイズでわずかに高品質」(VMAF 93.29 → 93.49)になりました。サイズ削減を期待してslowを選ぶのは、少なくともこの素材では割に合いませんでした。ultrafastは元ファイルより大きくなりました。 29.3MB の素材から 37.40MB です。CRF 23 でも ultrafast は圧縮効率を大きく捨てるため、「とりあえず速く」で選ぶとサイズが逆に増えることがあります。- 「preset を変えても品質はほぼ同等」も正確ではありません。 同じ CRF 23 で VMAF は 88.09〜94.26 と 6 ポイント以上開きました。CRF は preset をまたいで品質を一定に保つ値ではありません。
推奨: 一般用途は medium。それより遅い preset は、品質をわずかに上げたいときに選びます。小さくなったのは veryslow(−7.0%)だけで、時間は medium の4倍以上かかりました。
H.264 vs H.265 どちらを選ぶか
| 比較項目 | H.264 (libx264) | H.265 (libx265) |
|---|---|---|
| 互換性 | ほぼすべての環境(スマホ・TV・Web) | 中程度(古いAndroid・一部ブラウザ非対応) |
| 圧縮効率 | 標準 | 同一 VMAF で H.264 比 26〜35%小さい(実測。下記参照) |
| エンコード速度 | 速い | 同 preset で H.264 の 約1.9倍遅い(実測) |
| ソフトウェア再生 | 非常に広く対応 | 対応済みだが一部プレイヤーは追加コスト |
| 推奨CRF | 18〜28 | 20〜30(上の実測では、H.264より2ほど高い値でほぼ同じVMAF) |
| おすすめシーン | Web公開・SNS・不特定多数が閲覧 | 個人保存・ストレージ節約・対応確認済み環境 |
「H.265 は 40〜50% 小さい」は本当か
よく見る数字ですが、実測では 26〜35% でした。H.264 と H.265 を同じ CRF 値で比べても意味がない(CRF の尺度が違う)ため、両方の CRF を変えて測り、VMAF が同じ点どうしで比べています。H.264 側の値は、CRF ごとの測定値を線形補間したものです。
| VMAF | H.265 | 同品質の H.264 | H.265 が小さい割合 |
|---|---|---|---|
| 83.53 | 1.60 MB | 2.46 MB | 34.9% |
| 87.27 | 2.20 MB | 3.25 MB | 32.4% |
| 90.03 | 3.04 MB | 4.32 MB | 29.5% |
| 92.94 | 4.94 MB | 6.79 MB | 27.2% |
| 94.86 | 7.96 MB | 10.80 MB | 26.3% |
品質を上げるほど H.265 の優位は縮みます(VMAF 83 で 34.9% → VMAF 95 で 26.3%)。「高品質で保存したいから H.265」という判断ほど、得られる削減幅は小さくなります。逆に、低ビットレートで配信する用途ほど H.265 が有利です。
解像度ダウンスケールとの組み合わせ
コーデック圧縮に加えて解像度を下げると、サイズを大きく減らせます。
# 4K → 1080p + H.265で保存
ffmpeg -i input_4k.mp4 -c:v libx265 -crf 26 -preset medium \
-vf scale=1920:-2 -c:a aac -b:a 128k output_1080p.mp4
# 1080p → 720p + H.264(SNS向け)
ffmpeg -i input_1080p.mp4 -c:v libx264 -crf 26 -preset fast \
-vf scale=1280:-2 -c:a aac -b:a 96k output_720p.mp4
-vf scale=1280:-2の-2は縦横比を保ちつつ高さを偶数に自動調整します(-1だと奇数になり一部コーデックでエラーになる)。
音声ストリームの最適化
音声だけでもサイズ削減に貢献します。
# 音声を完全スキップ(映像のみ保存)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -an output.mp4
# 音声をモノラルに変換(会話中心の動画に有効)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -ac 1 -b:a 64k output.mp4
# 音声ビットレート別サイズ比較(128k: 約0.9MB/分、96k: 約0.7MB/分、64k: 約0.5MB/分)
オプション詳解
| オプション | 意味 | 推奨値 |
|---|---|---|
-c:v libx264 |
H.264コーデック指定 | 汎用性最高 |
-c:v libx265 |
H.265コーデック指定 | 高圧縮が必要な場合 |
-crf N |
品質係数(0〜51) | H.264: 18〜28、H.265: 20〜30 |
-preset NAME |
速度vs圧縮率 | medium(デフォルト)、画質を少し上げたいときは遅いpreset |
-b:v Nk |
映像ビットレート目標 | 720p: 1500k、1080p: 4000k、4K: 15000k |
-b:a Nk |
音声ビットレート | ステレオ: 128k〜192k、会話: 64k〜96k |
-vf scale=W:H |
解像度変更 | -vf scale=1280:-2(幅指定・高さ自動) |
-movflags +faststart |
MP4の先頭にmoovを移動 | Web配信で再生開始を早くする(推奨) |
トラブルシューティング
エラー1: Unknown encoder 'libx265'
原因: FFmpegがlibx265なしでビルドされている。
解決策: ffmpeg -h encoder=libx265 で確認します。Codec 'libx265' is not recognized by FFmpeg. と表示されたら、libx265入りのビルドを入れ直します。
# Homebrew (macOS)
brew install ffmpeg
# aptでフル版インストール (Ubuntu)
sudo apt install ffmpeg
エラー2: エンコードが終わらない / 非常に遅い
原因: -preset veryslow や -preset slow を高解像度動画に使っている。
解決策: preset を medium または fast に変更。H.265の場合はH.264より本質的に遅いため、用途を再検討。
エラー3: 出力ファイルサイズが期待より大きい
原因: -crf が低すぎる、または preset が ultrafast で圧縮効率が低い。
解決策: CRFを2〜4上げ、preset は medium にします。上の実測では、medium より遅い preset にしてもファイルはあまり小さくなりませんでした。
# CRFを2〜4上げ、presetはmedium
ffmpeg -i input.mp4 -c:v libx264 -crf 26 -preset medium -c:a aac -b:a 128k output.mp4
エラー4: width not divisible by 2 / height not divisible by 2
原因: scale フィルタで出力解像度の横幅または縦幅が奇数になっている(例: 素材によっては scale=1280:-1 で 1280x719 になる)。
解決策: 自動で計算させる側を -2 にします(-vf scale=1280:-2 や -vf scale=-2:720)。-2 にすると偶数に丸められます。
エラー5: 2パスのパス1が終わっているのに出力ファイルがない
原因: パス1は意図的に出力しない(-f null /dev/null)のが正常動作。
解決策: パス2のコマンドを続けて実行してください。パス1の役割は分析データ(ffmpeg2pass-0.log)の生成のみです。
FAQ
Q1. CRFモードとビットレートモード、どちらが良いですか?
A. ほとんどの用途ではCRFモードが推奨です。品質を一定に保ちながら効率よく圧縮できます。ビットレートモードはファイルサイズを厳密にコントロールする必要がある場合(配信プラットフォームの上限対応など)に使います。
Q2. CRF 23はどんな動画でも良い設定ですか?
A. いいえ。CRF 23はデフォルト値ですが最適値ではありません。アクション映像(動きが多い)はCRF 20前後、アニメ(均一な色面が多い)はCRF 18〜22が良い場合があります。必ず実際の出力を確認して調整してください。
Q3. 音声はコピーすべきですか?再エンコードすべきですか?
A. 品質を落としたくなければ -c:a copy。ファイルサイズも下げたければ -c:a aac -b:a 128k(音声を再エンコード)。元が高ビットレートのAACやMP3なら再エンコードでわずかに品質が落ちます。
Q4. MacではGPUエンコードできますか?
A. はい。Apple Silicon/Intel Mac では VideoToolbox が使えます。
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 4000k -c:a aac output.mp4
-crf は使えないため、-b:v でビットレートを指定します(VBRモードになる)。Apple Silicon の Mac では、-q:v(1〜100、大きいほど高画質)で画質を指定することもできます。
Q5. バッチ処理でフォルダ内の全動画を圧縮するには?
for f in *.mp4; do
ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k "compressed_${f}" -y
done