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

動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 10 件を検証スクリプトで実行し、全て成功しました(2026-09-06)


カラーコレクション適用前後の比較。左が元の映像、右は colorbalance で赤を足し青を引いて暖色に寄せた状態

左が元映像、右が 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調整

フィルタの組み合わせ

eqcolorbalance を組み合わせた包括的なカラーコレクション:

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 に変換、という流れにしてください。