この記事でわかること

  • curves フィルタでトーンカーブ補正を行うコマンド
  • マスターカーブ・RGB個別カーブの指定方法
  • 組み込みプリセット(preset)の一覧と使い方
  • ハイライト・シャドウを独立して調整するテクニック

テスト済みバージョン: FFmpeg 6.1(検証スクリプトで実 FFmpeg 実行確認)
対象 OS: Windows / macOS / Linux


基本コマンド

マスターカーブでコントラストを上げる(S字カーブ)

ffmpeg -i input.mp4 -vf "curves=master='0/0 0.25/0.15 0.5/0.5 0.75/0.85 1/1'" output.mp4

master はすべてのチャンネルに適用されるカーブです。0/0入力値/出力値 の制御点を表します。S字カーブでコントラストが上がります。明るさやコントラストだけを手早く整えたいならeq フィルタで明度・コントラストを調整する方が簡単です。

赤チャンネルのみ調整する

ffmpeg -i input.mp4 -vf "curves=red='0/0 0.5/0.6 1/1'" output.mp4

redgreenblue で各チャンネルのカーブを個別に指定できます。

組み込みプリセットを使う

ffmpeg -i input.mp4 -vf "curves=preset=vintage" output.mp4

preset に以下のプリセット名を指定できます。


組み込みプリセット一覧

プリセット名説明
none変更なし(デフォルト)
color_negativeネガ反転
cross_processクロスプロセス風
darker全体を暗くする
increase_contrastコントラスト強調
lighter全体を明るくする
linear_contrast線形コントラスト
medium_contrast中程度のコントラスト
negativeネガティブ
strong_contrast強いコントラスト
vintageビンテージ風
ffmpeg -i input.mp4 -vf "curves=preset=cross_process" output.mp4

制御点の書き方

制御点は 入力値/出力値 の形式でスペース区切りで並べます。値の範囲は 0.0(最暗)〜 1.0(最明)です。

master='0/0 0.5/0.7 1/1'
  • 0/0 — 黒(入力0 → 出力0)
  • 0.5/0.7 — 中間トーンを明るく持ち上げる
  • 1/1 — 白(入力1 → 出力1)

FFmpeg は指定した制御点をスプライン補間します。制御点が多いほど細かい調整ができます。


RGB個別カーブを組み合わせる

ffmpeg -i input.mp4 \
  -vf "curves=red='0/0 1/0.9':green='0/0 1/0.95':blue='0/0 0.8/1 1/1'" \
  output.mp4

赤・緑を若干抑え、青のハイライトを持ち上げることで寒色系のグレーディングになります。色相そのものを回転させたいときはhue フィルタで色相・彩度を調整すると組み合わせると表現の幅が広がります。


プリセット+マスターカーブを組み合わせる

ffmpeg -i input.mp4 \
  -vf "curves=preset=vintage:master='0/0 0.5/0.55 1/1'" \
  output.mp4

preset で基本トーンを作り、master で微調整するワークフローです。


静止画への適用

ffmpeg -i input.jpg -vf "curves=preset=increase_contrast" output.jpg

NG例

NG例: 制御点の順序が昇順でない
ffmpeg -i input.mp4 -vf "curves=master='0/0 0.8/0.3 0.5/0.7 1/1'" output.mp4

制御点の入力値(左の値)は必ず昇順(小→大)で並べてください。順序が逆になるとエラーまたは意図しない結果になります。


注意点

  • curves フィルタは RGB 色空間で動作します。YUV 入力の場合、内部で変換が行われます。
  • 制御点は最低 2 つ(0/x1/y)が必要です。
  • プリセットと個別チャンネルは同時指定できますが、masterpreset は処理順序に注意が必要です。

実測例

1080p/30fps、2分の H.264 動画に S 字カーブを適用する例です。

ffmpeg -i input.mp4 \
  -vf "curves=master='0/0 0.25/0.18 0.5/0.5 0.75/0.82 1/1'" \
  -c:v libx264 -crf 23 -preset medium -c:a copy \
  output.mp4

curves はピクセルごとにRGB変換と補間を行うため、eq より少し重くなることがあります。8コア程度のデスクトップ環境では、処理時間は実時間の1.2〜2.3倍程度が目安です。プリセットだけを使う場合と多数の制御点を使う場合で大きくは変わりませんが、他のフィルタをチェーンするとその分だけ遅くなります。

ファイルサイズはコントラストを上げるほどエッジやノイズが目立ち、同じCRFでもやや増えることがあります。逆に暗部を落として単純な画面にすると小さくなることもあります。環境により変動します。

実務では、最初から強いS字を入れるより、0.25/0.20.75/0.8 程度の控えめなカーブから確認すると破綻しにくいです。暗部を持ち上げすぎるとブロックノイズが見えやすくなり、ハイライトを上げすぎると白飛びに近い見た目になります。配信向けに仕上げる場合は、補正後に短い区間だけを書き出し、スマートフォン画面とPC画面の両方で確認してから全体に適用するのが安全です。

curves は見た目の変化が大きい割に、ログ上は特別な警告を出さないことがあります。意図しない色かぶりが出た場合は、まず master だけに戻し、次に redgreenblue を1つずつ足して原因のチャンネルを切り分けます。

また、最終出力がH.264の8bit配信なら、強いカーブで滑らかな空や壁に段差が出ないかも確認します。必要に応じて軽いノイズを残す、または10bit中間ファイルで処理してから配信用に落とすと、バンディングを抑えやすくなります。

色補正の比較用に、同じフレームをPNGで1枚書き出しておくと判断しやすくなります。差分確認にも便利です。


関連フィルタ

  • hue — 色相・彩度・輝度の調整
  • eq — 明度・コントラスト・ガンマの調整
  • colorbalance — シャドウ・ミッド・ハイライトの色調補正
  • lut3d — 3D LUT によるカラーグレーディング

関連リソース

よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。

FFmpeg チートシート