unsharp フィルタの適用前後の比較。等倍で切り出した草地で、左が元、右は unsharp=7:7:2.0 で草の一本一本の輪郭が立った状態

左が元、右が unsharp=7:7:2.0:7:7:0.5縮小すると差が消えるため、両側とも等倍(1:1)の切り出しです。草の輪郭とコントラストの立ち方が変わります。

素材: Big Buck Bunny © Blender Foundation, CC BY 3.0

この記事でわかること

  • unsharp フィルタでシャープネスを強調するコマンド
  • unsharp をブラーフィルタとして使う方法
  • 輝度(luma)と彩度(chroma)マトリクスを個別に設定する方法
  • パラメータのチューニング指針

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


基本コマンド

シャープネスを強調する

ffmpeg -i input.mp4 -vf "unsharp=5:5:1.0:5:5:0.0" output.mp4

引数の順序は lx:ly:la:cx:cy:ca です。la=1.0(輝度の強さ)でシャープネスが上がります。

ソフトなぼかしをかける(ブラーとして使う)

ffmpeg -i input.mp4 -vf "unsharp=5:5:-1.0:5:5:0.0" output.mp4

la負の値 にするとブラーになります。単純に均一なぼかしをかけたいだけなら、boxblur フィルタでボックスブラーをかける方が軽量で扱いやすいです。


パラメータ詳細

unsharp=lx:ly:la:cx:cy:ca
パラメータ 意味 デフォルト 範囲
lx 輝度マトリクスのX幅(奇数) 5 3〜23
ly 輝度マトリクスのY幅(奇数) 5 3〜23
la 輝度の強さ(正=シャープ、負=ブラー) 1.0 -2.0〜5.0
cx 彩度マトリクスのX幅(奇数) 5 3〜23
cy 彩度マトリクスのY幅(奇数) 5 3〜23
ca 彩度の強さ(正=シャープ、負=ブラー) 0.0 -2.0〜5.0

マトリクス幅は奇数でなければなりません(3, 5, 7, 9, …)。


輝度のみシャープ、彩度は変えない(推奨)

ffmpeg -i input.mp4 -vf "unsharp=7:7:1.5:5:5:0.0" output.mp4

ca=0.0 で彩度は変化させません。これが最も自然な仕上がりになります。chromakey フィルタでグリーンバック合成する際に生じる輪郭の甘さを締めたいときも、輝度だけを軽くシャープにすると効果的です。


強いシャープネス(アクション映像向け)

ffmpeg -i input.mp4 -vf "unsharp=3:3:2.0:3:3:0.0" output.mp4

マトリクスを小さくして強度を上げると、エッジが際立つシャープ感になります。


ソフトブラー(ポートレート向け)

ffmpeg -i input.mp4 -vf "unsharp=13:13:-0.5:5:5:0.0" output.mp4

マトリクスを広くして負の値にするとソフトなボケが得られます。


アンシャープマスクの仕組み

unsharp はアンシャープマスク(USM)アルゴリズムを使います。

  1. 元画像をガウシアンブラーでぼかした「ブラー画像」を生成
  2. 元画像からブラー画像を引いて「エッジ成分」を抽出
  3. 元画像にエッジ成分を la の強さで加算

負の la はエッジ成分を引くため、ブラー効果になります。


静止画への適用

ffmpeg -i input.jpg -vf "unsharp=5:5:1.5:5:5:0.0" output.jpg

よくある設定比較

用途 コマンド例
標準シャープ unsharp=5:5:1.0:5:5:0.0
強シャープ unsharp=3:3:2.0:3:3:0.0
弱シャープ unsharp=7:7:0.5:5:5:0.0
ソフトブラー unsharp=9:9:-0.5:5:5:0.0
強ブラー unsharp=13:13:-1.5:5:5:0.0

NG例

NG例: マトリクス幅に偶数を指定する
ffmpeg -i input.mp4 -vf "unsharp=6:6:1.0:6:6:0.0" output.mp4

マトリクス幅(lxlycxcy)には奇数を指定してください。偶数を指定するとエラーになります。


実測: 処理時間とサイズ

計測したのは次のコマンドです。

ffmpeg -i input.mp4 -vf unsharp=5:5:1.0:5:5:0.0 -c:v libx264 -crf 23 -preset medium -an output.mp4
項目 実測値
処理時間 32.55 秒(実時間の 3.69 倍速)
出力サイズ 140.75 MB
フィルタ無し再エンコードとのサイズ差 +63.2%

計測環境: 1920x1080 / 30fps / 120秒 / 351.4 MB の素材(Big Buck Bunny のループ、CC BY 3.0)を、Core i9-14900KF(32スレッド)+ FFmpeg 8.1(gyan.dev)で 2026-09-05 に逐次実行。比較対象の「フィルタ無し再エンコード」は ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -an output.mp4 で、27.97 秒 / 86.26 MB でした。いずれも音声を捨てた映像のみの数値です。生データはデータセットで公開しています。

重いのはフィルタではなくエンコード

32.55 秒という数字は、フィルタを何も掛けない 27.97 秒とほとんど変わりません。unsharp は 5x5 の畳み込みを 1 回通すだけなので、時間の大半は libx264 の再エンコードが占めています。同じ計測で boxblur は 59.37 秒、VP9 への変換は 729.16 秒でした。unsharp は「重いフィルタ」ではありません。

一方で、いったんピクセルに触れば再エンコードは避けられません。同じ計測でストリームコピー(-c copy)で済む操作は 0.41〜1.03 秒で終わっています。unsharp を挟むかどうかは、1 秒未満の世界と 30 秒台の世界を分ける選択です。

本当のコストはファイルサイズ

驚くのは時間ではなくサイズの方で、+63.2%、86.26 MB が 140.75 MB になりました。この記事は以前「同じ CRF でも 5〜15% 程度増える例があります」と書いていましたが、実測はその見積もりを大きく外しています。理由ははっきりしていて、アンシャープマスクは高周波成分(エッジとノイズ)を増幅する処理であり、CRF は品質目標を固定してビットレートを変動させるモードだからです。増えたディテールを CRF 23 の品質で保とうとすれば、その分ビットは増えます。

つまり unsharp は「同じサイズで見た目を良くする」処理ではありません。サイズを据え置きたいなら、la を下げるか CRF を上げて、シャープネス分のビットを別のところから捻出する必要があります。配信ビットレートが低い場合ほど、強いシャープネスは圧縮後に不利になります。

なお la を負にしたブラー用途のサイズは今回計測していません。細部が減る分だけ小さくなるはずですが、数値は手元にありません。

見た目のチューニング

実写素材では、シャープネスを強くかけるほど輪郭の白い縁取り、髪の毛のチラつき、暗部ノイズの増加が目立ちます。まず unsharp=5:5:0.5:5:5:0.0 で短い区間を書き出し、足りなければ la を 0.8、1.0 と上げる方が安全です。すでにスマートフォン側で強い輪郭補正が入っている素材に重ねると、細い線の周囲に白や黒の縁が出ます。確認は全体表示ではなく 100% 表示で、文字・髪・建物の輪郭を見てください。

フィルタチェーンの中では、スケール・ノイズ低減・色補正の後、圧縮の直前に置くのが基本です。強くシャープにしてから拡大縮小すると、強調したエッジが再サンプリングされて不自然になります。ノイズの多い素材は hqdn3d などで先に軽くノイズを抑えると、見た目もファイルサイズも安定します。unsharp は情報を増やす処理ではなく既存のエッジを強調する処理なので、ピンぼけ映像を復元することはできません。


関連フィルタ

  • boxblur — シンプルなボックスブラー
  • gblur — ガウシアンブラー
  • smartblur — エッジを保ちながらぼかす