unsharp フィルタの適用前後の比較。等倍で切り出したTシャツの柄で、左が元、右は unsharp=7:7:2.0:7:7:0.5 で柄の線の輪郭が立った状態

左が元、右が unsharp=7:7:2.0:7:7:0.5。縮小すると差が見えなくなるので、両方とも等倍(1:1)で切り出しています。柄の線の輪郭がくっきりし、コントラストが強まっています。

素材: Tears of Steel (CC) Blender Foundation | mango.blender.org、CC BY 3.0。映画の1フレームを切り出し、フィルターで加工しています。

基本コマンド

シャープネスを強調する

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

値は lx:ly:la:cx:cy:ca の順に並べます。la は輝度(明るさ)にかける強さです。la=1.0 にすると、輪郭がくっきりします。

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

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

la をマイナスの値にすると、ぼかし(ブラー)になります。全体を強くぼかしたいなら、半径を大きく取れるboxblur フィルタのほうが扱いやすいです。ただし boxblur は1つのスレッドだけで処理するので、unsharp より軽いわけではありません。

パラメータ詳細

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, …)。

1つずつなら 3〜23 を指定できますが、X と Y の組み合わせにも上限があります。lx + ly(彩度は cx + cy)が 26 を超えるとエラーになります。13:13 は使えますが、15:15 は luma matrix size (lx/2+ly/2)*2=28 greater than maximum value 25 というエラーで止まります。

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

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

マトリクスの幅(lx、ly、cx、cy)には奇数を指定します。偶数にするとエラーになります。

実測: 処理時間とサイズ

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

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 に1つずつ順に実行。比較に使った「フィルタ無し再エンコード」は 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〜0.49 秒でした。unsharp を使うかどうかで、処理時間は 1 秒未満から 30 秒台に変わります。

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

大きく変わるのは、時間よりもファイルサイズです。86.26 MB が 140.75 MB になり、63.2% 増えました。アンシャープマスクは、輪郭や細かいノイズ(高周波成分)を強める処理です。一方 CRF は、画質を一定に保つためにビットレートを増減させる設定です。強まった細部を CRF 23 の画質で保とうとするので、そのぶんデータ量が増えます。

つまり unsharp は、同じサイズのまま見た目を良くする処理ではありません。サイズを増やしたくないときは、la を下げるか、CRF の値を上げてください。配信のビットレートが低いほど、強いシャープネスは圧縮後の画質に不利になります。

見た目のチューニング

実写の映像では、シャープネスを強くかけるほど、輪郭の白い縁取り、髪の毛のチラつき、暗い部分のノイズが目立ちます。まず unsharp=5:5:0.5:5:5:0.0 で短い区間だけ書き出して確かめます。足りなければ、la を 0.8、1.0 と少しずつ上げてください。スマートフォンなどで、すでに輪郭が強調されている映像に重ねると、細い線のまわりに白や黒の縁が出ます。確認するときは縮小せず、100% 表示で文字・髪・建物の輪郭を見てください。

ほかのフィルタと組み合わせるときは、サイズ変更・ノイズ除去・色補正のあと、エンコードの直前に置くのが基本です。強くシャープにしてから拡大・縮小すると、強めた輪郭が崩れて不自然になります。ノイズの多い映像は、先に hqdn3d などでノイズを軽く抑えておくと、見た目もファイルサイズも安定します。unsharp は、もともとある輪郭を強めるだけです。ピンぼけの映像をくっきり直すことはできません。

関連フィルタ

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