
左が元の映像、右が curves=preset=vintage をかけた出力です。プリセットを 1 つ指定するだけで、この色調になります。
素材: Tears of Steel (CC) Blender Foundation | mango.blender.org、CC BY 3.0。映画の1フレームを切り出し、フィルターで加工しています。
基本コマンド
マスターカーブでコントラストを上げる(S字カーブ)
ffmpeg -i input.mp4 -vf "curves=master='0/0 0.25/0.15 0.5/0.5 0.75/0.85 1/1'" -pix_fmt yuv420p output.mp4
master は、赤・緑・青のすべてにかかるカーブです。0/0 のような値は「入力値/出力値」の組で、カーブが通る点(制御点)を表します。この例のように暗い部分を下げ、明るい部分を上げる S字カーブにすると、コントラストが上がります。明るさやコントラストを軽く整えるだけなら、eq フィルタで明度・コントラストを調整するほうが手軽です。curves は RGB で処理するので、-pix_fmt yuv420p を付けないと、多くのプレーヤーや機器で再生できない 4:4:4 の H.264 になります。
赤チャンネルのみ調整する
ffmpeg -i input.mp4 -vf "curves=red='0/0 0.5/0.6 1/1'" -pix_fmt yuv420p output.mp4
red・green・blue を使うと、色ごとに別のカーブを指定できます。この例では、赤の中間の明るさだけを上げています。
組み込みプリセットを使う
ffmpeg -i input.mp4 -vf "curves=preset=vintage" -pix_fmt yuv420p 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" -pix_fmt yuv420p 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'" -pix_fmt yuv420p \
output.mp4
赤と緑の明るい部分を少し抑え、青の明るい部分を持ち上げています。全体が青っぽい、冷たい色味になります。色相そのものをずらしたいときは、hue フィルタで色相・彩度を調整する方法と組み合わせます。
プリセット+マスターカーブを組み合わせる
ffmpeg -i input.mp4 \
-vf "curves=preset=vintage:master='0/0 0.5/0.55 1/1'" -pix_fmt yuv420p \
output.mp4
vintage で全体の色調を決め、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
制御点は、入力値(左の値)が小さい順に並べてください。この例のように順番が逆になっていると、not strictly increasing on the x-axis というエラーで止まります。
注意点
curvesは RGB で処理します。YUV の映像は、内部で RGB に変換されます。- 制御点は 1 つからでも指定できます。ただし、最初の点より暗い部分と最後の点より明るい部分は、その点と同じ値で平らになります(点が 1 つなら、画面全体が 1 つの値になります)。全体をなめらかに変えるには、両端の
0/…と1/…の点も書きます。 presetと一緒にred・green・blue・masterを指定すると、指定した曲線がプリセットの同じ曲線と置き換わります。increase_contrastやlighterなど、masterだけで作られたプリセットにmasterを足すと、プリセットの効果はなくなります。
実測: 処理時間とサイズ
計測したコマンドは次のとおりです。
ffmpeg -i input.mp4 -vf curves=preset=increase_contrast -c:v libx264 -crf 23 -preset medium -an output.mp4
| 項目 | 実測値 |
|---|---|
| 処理時間 | 42.01 秒(実時間の 2.86 倍速) |
| 出力サイズ | 97.79 MB |
| フィルタなしとのサイズ差 | +13.4% |
| 参考: フィルタなしの再エンコード | 27.97 秒 / 86.26 MB |
計測環境: 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、各コマンドを1つずつ順に実行。数値はデータセットで公開しています。
数字の読み方
同じ x264 の設定で、フィルタをかけずに再エンコードすると 27.97 秒でした。計測したコマンドには -pix_fmt がないので、出力は 4:4:4(yuv444p)です。フィルタなしのほうは 4:2:0(yuv420p)でした。4:4:4 は色の情報を間引かないので、x264 が 1 フレームごとにエンコードする値が 4:2:0 の 2 倍になります。約 14 秒の差のかなりの部分は、このエンコードが重くなった分です。残りは、RGB への変換と YUV への戻し、それにカーブの処理にかかった時間です。
120 秒の素材が 42.01 秒で終わりました。再生時間の 2.86 倍の速さです。
ファイルサイズは 13.4% 増えました。increase_contrast はカーブの傾きを急にして、コントラストを上げるからです。CRF 23 は、画質を一定に保ち、サイズは成り行きに任せる設定です。コントラストが上がると、輪郭やノイズの明暗の差が大きくなります。x264 は同じ画質を保つために、その分だけ多くのデータを使います。
同じ 2 分の素材で計ったほかの処理と比べます。curves の 42.01 秒は、720p への縮小(18.43 秒)やフィルタなしの再エンコード(27.97 秒)より遅い結果でした。colorbalance + eq(53.29 秒)や boxblur(59.37 秒)よりは速く終わりました。VP9 への変換は 729.16 秒かかりました。
処理時間をいちばん大きく左右するのは、再エンコードが必要かどうかです。映像を -c copy や -c:v copy(再エンコードせずにそのまま書き写す指定)で済ませる処理は、ストリームコピー 0.41 秒、moov アトムの移動 0.49 秒、音声フェード(音声だけ再エンコード)1.03 秒で、どれも 1 秒前後で終わりました。色の調整は全フレームを再エンコードするので、設定を工夫してもこの速さにはなりません。カーブの具合を確かめるだけなら、先に -ss/-t とストリームコピーで数秒だけ切り出します。その短いクリップに curves をかければ、短い時間で何度も試せます。
計測したのは preset=increase_contrast の場合だけで、制御点を並べた master の指定は計っていません。また -an で音声を外しているので、42.01 秒には音声の処理時間は入っていません。
最初から強い S字にするより、0.25/0.2・0.75/0.8 くらいの控えめなカーブから試すと、不自然になりにくいです。暗い部分を持ち上げすぎるとブロックノイズが目立ち、明るい部分を上げすぎると白飛びしたように見えます。配信用に仕上げるときは、補正した短い区間だけを書き出し、スマートフォンとパソコンの両方の画面で確認してから全体にかけます。
意図しない色かぶり(全体が特定の色に寄ること)が出たら、まず master だけに戻します。次に red・green・blue を1つずつ足して、どの色のカーブが原因かを確かめます。
最終的に H.264 の 8bit で配信するなら、強いカーブをかけたときに、なめらかな空や壁に色の段差(バンディング)が出ていないかも確認します。軽いノイズを残すか、10bit の中間ファイルで処理してから配信用に変換すると、バンディングを抑えやすくなります。
補正の結果を比べるときは、同じフレームを PNG で1枚書き出しておくと判断しやすくなります。
関連フィルタ
hue— 色相・彩度・輝度の調整eq— 明度・コントラスト・ガンマの調整colorbalance— シャドウ・ミッド・ハイライトの色調補正lut3d— 3D LUT によるカラーグレーディング