撮影した動画が「なんだか暗い」「色が浅い」と感じたら、FFmpeg だけで明るさ・コントラスト・彩度・色調を補正できます。手軽な eq、トーンカーブで追い込む curves、シャドウ/ミッド/ハイライト別に色を振る colorbalance の3つを、目的に応じて使い分けるのがポイントです。この記事では各フィルタの役割と使い分け、組み合わせた実践的なカラーコレクションまでを解説します。
動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 10 件を検証スクリプトで実行し、全て成功しました(2026-09-06)

左が元映像、右が colorbalance=rs=0.3:bs=-0.3,eq=saturation=1.15。赤を足して青を引くと、日陰の青被りが暖色に補正されます。
素材: Big Buck Bunny © Blender Foundation, CC BY 3.0
eq フィルタ — 明度・コントラスト・彩度の基本補正
最もシンプルなカラー調整フィルタです。各パラメータの詳しい挙動はeq フィルタで明度・コントラスト・彩度を調整するで個別に掘り下げています。
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.2:saturation=1.3:gamma=1.0" output.mp4
| パラメータ | 範囲 | デフォルト | 説明 |
|---|---|---|---|
brightness |
-1.0〜1.0 | 0 | 明度(0が変化なし) |
contrast |
-1000〜1000 | 1 | コントラスト(1が変化なし) |
saturation |
0〜3.0 | 1 | 彩度(1が変化なし、0はグレースケール) |
gamma |
0.1〜10 | 1 | ガンマ補正(1が変化なし) |
よく使う補正例
明るさを少し上げてコントラストを強める:
ffmpeg -i input.mp4 -vf "eq=brightness=0.05:contrast=1.3" output.mp4
グレースケールに変換:
ffmpeg -i input.mp4 -vf "eq=saturation=0" output.mp4
curves フィルタ — トーンカーブで細かく補正
制御点の取り方やチャンネル別の追い込みはcurves フィルタでトーンカーブ色補正するで詳しく扱っています。S字カーブ(コントラスト強調)の例:
ffmpeg -i input.mp4 -vf "curves=all='0/0 0.25/0.15 0.5/0.5 0.75/0.85 1/1'" output.mp4
all='入力/出力 ...' の形式で制御点を指定します(0〜1の正規化値)。
チャンネル別の調整
赤チャンネルを強調(暖色系に補正):
ffmpeg -i input.mp4 -vf "curves=red='0/0 0.5/0.6 1/1'" output.mp4
青チャンネルを下げる(寒色を弱める):
ffmpeg -i input.mp4 -vf "curves=blue='0/0 0.5/0.4 1/0.9'" output.mp4
プリセットを使う
ffmpeg -i input.mp4 -vf "curves=preset=vintage" output.mp4
利用可能なプリセット: none, color_negative, cross_process, darker, increase_contrast, lighter, linear_contrast, medium_contrast, negative, strong_contrast, vintage
colorbalance フィルタ — シャドウ/ミッドトーン/ハイライトの色調整
シャドウ部の青みを強め(寒色系の暗部)、ハイライト部を少し暖かくする例:
ffmpeg -i input.mp4 -vf "colorbalance=bs=0.1:rs=-0.1:gh=0.1" output.mp4
| パラメータ | 説明 |
|---|---|
rs/gs/bs |
シャドウのR/G/B調整(-1〜1) |
rm/gm/bm |
ミッドトーンのR/G/B調整 |
rh/gh/bh |
ハイライトのR/G/B調整 |
フィルタの組み合わせ
eq と colorbalance を組み合わせた包括的なカラーコレクション:
ffmpeg -i input.mp4 -vf "eq=brightness=0.05:contrast=1.1,colorbalance=rs=-0.05:bs=0.05" output.mp4
どのフィルタを選ぶか
| やりたいこと | 推奨フィルタ |
|---|---|
| 明度・コントラスト・彩度を手軽に調整 | eq |
| トーンカーブで細かく制御 | curves |
| シャドウ/ミッドトーン/ハイライトを色別に調整 | colorbalance |
| .cubeファイルのLUTを適用 | lut3d |
実測: 処理時間とサイズ
計測したのは次のコマンドです。
ffmpeg -i input.mp4 -vf colorbalance=rs=0.15:bs=-0.15,eq=saturation=1.1 -c:v libx264 -crf 23 -preset medium -an output.mp4
| 項目 | 実測値 |
|---|---|
| 処理時間 | 53.29 秒(実時間の 2.25 倍速) |
| 出力サイズ | 87.71 MB |
| フィルタなし再エンコードとの差 | +1.7% |
計測環境: Core i9-14900KF(32スレッド)/ FFmpeg 8.1 (gyan.dev) / 素材は 1920x1080・30fps・120秒・351.4 MB(Big Buck Bunny をループ、CC BY 3.0)、計測は逐次実行、2026-09-05。比較対象のベースラインは同じ素材をフィルタなしで再エンコードした場合で、27.97 秒・86.26 MB です。データはデータセットで公開しています。
この数字の意味
この測定では、カラー補正はフィルターなしより時間がかかりました。 フィルターなしが27.97秒、curves が42.01秒、colorbalance + eq が53.29秒、boxblur が59.37秒です。120秒の素材を53.29秒で処理したので、所要時間は素材の長さの約0.44倍、処理速度は約2.25倍速です。旧版の「1〜2倍の時間より遅い」という説明は、所要時間と速度を取り違えていたため訂正します。
サイズはほとんど動きません(+1.7%)。 点処理は画素値を置き換えるだけで、ディテールを増やしもぼかしもしません。x264 が符号化すべき情報量が実質変わらないので、CRF が同じならファイルサイズも変わらない、という結果です。サイズを決めているのは -crf と -preset であって色補正ではない、という説明が数字で裏付けられた形になります。逆に言えば、色補正でファイルを小さくすることはできません。サイズを落としたいならビットレートか解像度を触る必要があります。
-c copy に逃げる道はありません。 同じ計測でストリームをコピーするだけの操作は、ストリーム選択が 0.41 秒、moov アトムの移動が 0.49 秒、音声フェードが 1.03 秒で終わっています。画素に触る以上カラー補正は必ず再エンコード側に落ち、秒単位の作業が分単位の作業に変わります。色を変えずに済ませられる編集(カット、結合、コンテナ変更)は分けて -c copy で処理し、再エンコードは色を触る工程に一度だけまとめるのが、この差を踏まえた組み立て方です。
関連記事
- 3D LUT でカラーグレーディング — .cube ファイルを動画に適用する
- 動画のシャープネス・ぼかし — unsharp フィルタで鮮明さを調整する
動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 10 件を検証スクリプトで実行し、全て成功しました(2026-09-06) 一次ソース: ffmpeg.org/ffmpeg-filters.html#curves / ffmpeg.org/ffmpeg-filters.html#eq / ffmpeg.org/ffmpeg-filters.html#colorbalance
よくある質問
eq と curves、どちらを使う?
eq は全体の明るさ・コントラスト・彩度の一括調整。curves はハイライト / ミッドトーン / シャドウを独立にシェイプ。実際のカラーグレーディングには curves の方が近い。
ガンマと明るさの違いは?
明るさは線形シフト。ガンマは非線形カーブで、ハイライトと黒を潰さずミッドトーンだけ持ち上げる。一般にガンマの方が自然な見た目に。
補正後の動画が緑っぽくなった
グリーンチャンネルか彩度を強く触りすぎた可能性。一旦リセットして全体に均一に補正をかけ、最後に個別チャンネルを微調整してください。
3D LUT を当てたい
可能です — lut3d は .cube ファイルを受け取ります: ffmpeg -i in.mp4 -vf lut3d=look.cube out.mp4。グレーディング配布の標準形式。
HDR 色は保持される?
単純な eq / curves パイプラインだと HDR ハイライトはクリップします。HDR 素材なら zscale で一旦 linear に → グレーディング → 再度 PQ/HLG に変換、という流れにしてください。