ノイズ除去、ブロック除去、シャープ化、色補正:動画修復フィルターを深掘り
ノイズ除去、ブロック除去、バンディング除去、シャープ化、ホワイトバランス、色収差の修正のしくみと、かける順番を FFmpeg のテスト結果とともに解説します。
要点
動画修復のフィルターはどれも 1 種類の損傷を直すもので、かける順番によって助け合うか打ち消し合うかが決まります。最初にインターレース解除、ソースのサイズでブロック除去とノイズ除去、色の調整、それから拡大縮小、軽いシャープ化、最後にディザやグレインです。ノイズをシャープにしたり、加えたばかりのグレインをノイズ除去で消したりすれば、作業が無駄になります。
- 修復フィルターは、それぞれ 1 種類の損傷を対象にしています。ノイズ、圧縮ブロック、バンディング、甘さ、色かぶり、色のにじみです。フィルターを選ぶ前に、損傷の種類を見極めてください。
- 順番が大事です。インターレース解除、ブロック除去、ノイズ除去をソースのサイズで行い、色を直し、それから拡大縮小し、軽くシャープ化して、ディザやグレインは最後に加えます。
- ノイズ除去フィルターは、ノイズと質感を引き換えにする方法がそれぞれ違います。私たちのテストでは、非局所平均(non-local means)は平らな空のノイズをほぼ消しましたが、木の葉のノイズは残し、強めると葉の細部の 17% を消しました。
- シャープ化はすでにあるエッジを急峻にするだけで、強めるとハロー(縁取り)が出ます。細部を加えることはできません。
- 「色の誤り」と呼ばれる問題は 2 つあります。ホワイトバランスで直す色かぶりと、赤と青のチャンネルを合わせ直して直す色収差です。
それぞれの修復が直すもの
修復は診断から始まります。下の表に、よくある損傷の種類、見分け方、それぞれに試したフィルターをまとめました。グレインとノイズや圧縮の区別がつかない場合は、先に グレイン・ノイズ・圧縮アーティファクトの違い をご覧ください。
| 損傷 | 見え方 | 修復 | 試した FFmpeg フィルター |
|---|---|---|---|
| センサーノイズ | フレームごとに変わる細かな粒、暗部でいちばんひどい | ノイズ除去 | hqdn3d、atadenoise、nlmeans、fftdnoiz、bm3d |
| 圧縮ブロック | グラデーションや動く部分に四角い格子 | ブロック除去 | deblock、spp、pp7、fspp、uspp |
| リンギングとモスキートノイズ | エッジや文字のまわりでうごめく点や波紋 | デリンギング(ソフトしきい値処理)またはノイズ除去 | spp の mode=soft、nlmeans |
| バンディング | 空、壁、フェードに見える段差 | バンディング除去のあと 10 ビットでエンコード | deband、gradfun |
| 甘さ | キレのないエッジ | シャープ化、またはモデルでアップスケール | unsharp、cas |
| 色かぶり | 白がオレンジ、青、緑に見える | ホワイトバランス | colorchannelmixer、grayworld、greyedge |
| 倍率色収差 | 画面の端に向かって大きくなる赤・シアンや青・黄色のにじみ | 赤と青のチャンネルを拡大縮小 | 取り出したプレーンに perspective |
| コーミング | 動くエッジに櫛のような線 | インターレース解除 | bwdif |
順番が大事な理由
各ステップは次のステップが見るものを変えるので、間違った位置にあるフィルターは直前のフィルターの効果を打ち消したり、取り除くべき損傷を増幅したりします。

- 最初にインターレース解除。 ほかのフィルターはどれも完全なフレームを前提にしています。インターレースのフィールドに対しては、ノイズ除去はコーミングを質感とみなし、拡大縮小はそれをにじませて残像にします。動画のインターレース解除の方法 をご覧ください。
- ピクセルを動かす処理の前にブロック除去。 ブロック除去はエンコーダーのブロック格子に沿って働きますが、ノイズ除去や拡大縮小はその格子をぼかしたりずらしたりします。
- シャープ化やグレーディングの前にノイズ除去。 シャープ化やコントラストの強調は、細部と一緒にノイズも増幅します。
- シャープ化の前に色を直す。 エッジがまだ柔らかいうちに色かぶりを直し、色チャンネルを合わせ直します。シャープ化すると、にじみまでくっきりしてしまいます。
- 拡大縮小は 1 回だけ、 きれいにしたフレームに対して行い、残った損傷を拡大しないようにします。
- シャープ化は出力サイズで、軽く。
- ディザとグレインは最後に。 そのあとに平滑化のステップがあると、バンディングやろうのような見た目を隠す細かなノイズが消えてしまいます。
- 十分なビット数でエンコード。 10 ビットでエンコードすれば、滑らかなグラデーションに再びバンディングが出るのを防げます。
細かい質感とノイズを加えた合成クリップで、ノイズ除去とシャープ化の順番を確かめました。シャープ化を先にしてからノイズ除去すると、平らな部分に残るノイズが多く(独自指標で 14.5、逆の順番では 12.2)、きれいなクリップとの PSNR は 26.6 dB(逆の順番では 27.7 dB)でした。ノイズ除去だけなら 30.3 dB で残りは 8.0 です。シャープ化は多少なりともきれいさを犠牲にするので、映像に必要な最小限にとどめてください。
ノイズ除去:5 つの系統のフィルター
ノイズはフレームごとに変わるランダムなばらつき、細部はその場にとどまるかシーンと一緒に動く構造です。ノイズ除去フィルターはどれも、それぞれのやり方でこの違いを利用しています。
- 空間フィルター は、同じフレーム内で各ピクセルを周囲のピクセルと平均します。速いものの、同じ大きさの細かな質感とノイズを区別できないので、両方を甘くします。
- 時間フィルター は、隣接フレームの同じピクセルを平均します。静止した細部は繰り返し現れるので残り、ノイズは平均されて消えます。動くものは、フィルターが動きを検出するか先にフレームの位置を合わせない限り、にじんで尾を引きます。この問題は 時間的一貫性、ちらつき、残像 で扱っています。FFmpeg の
atadenoiseは適応型の時間平均で、hqdn3dは軽い空間処理と時間処理を組み合わせたものです。 - 非局所平均(non-local means) は、各ピクセルを、探索範囲内のどこにあっても周囲のパッチが似ているピクセルの平均で置き換えます。考案者の言葉どおり、もっとも似たピクセルが近くにあるとは限りません。空や壁のように繰り返しの多い部分では一致が多く見つかり、固有の質感では少ししか見つかりません。
- 変換領域のフィルター は、画像のブロックを周波数表現に移します。そこでは本物の構造は少数の強い係数に集まり、ノイズはすべての係数に薄く広がるので、弱い係数を縮めます。
fftdnoizは隣接フレームも含められる 3 次元 FFT でこれを行います。BM3D は、まず似た 2 次元パッチを 3 次元の束にまとめ、表現をさらに疎にします。 - 学習型のノイズ除去 は、きれいな画像とノイズのある画像の組でネットワークを学習させます。DnCNN はノイズそのものを予測するよう学習し(残差学習)、FFDNet はノイズレベルのマップを追加入力として受け取るので、1 つのモデルで異なるノイズレベルや不均一なノイズに対応できます。FastDVDnet は複数のフレームを同時に使い、コストの高い動き補償の段階を省いています。
テストでわかったこと
青空を背景に日に照らされた葉が映る 1080p のサンプルクリップ 30 フレームに、フレームごとに変わるガウスノイズ(輝度で 255 段階中約 8 段階)を加えました。それからノートパソコンの CPU(Intel Core i7-1360P)で FFmpeg のノイズ除去フィルターを実行し、各結果をきれいなクリップと比べました。
| フィルターと設定 | 系統 | 30 フレームの処理時間 | PSNR(輝度) | 平らな空に残る誤差 | 葉の誤差 | 残った葉の細部 |
|---|---|---|---|---|---|---|
| なし(ノイズのある入力) | 基準 | 該当なし | 30.3 dB | 8.8 | 8.9 | 99% |
hqdn3d(既定値) | 空間と時間 | 1.0 秒 | 30.7 dB | 8.1 | 8.7 | 99% |
hqdn3d=8:6:12:9 | 空間と時間 | 0.8 秒 | 31.5 dB | 6.1 | 8.0 | 97% |
atadenoise(しきい値 0.1 と 0.2) | 時間 | 0.9 秒 | 31.1 dB | 4.9 | 8.5 | 94% |
nlmeans=s=6 | 非局所平均 | 31.7 秒 | 32.2 dB | 1.1 | 8.1 | 98% |
nlmeans=s=10 | 非局所平均 | 31.8 秒 | 31.0 dB | 1.0 | 8.9 | 83% |
fftdnoiz=sigma=8:prev=1:next=1 | 変換領域、3 フレーム | 3.8 秒 | 33.7 dB | 4.3 | 6.4 | 98% |
bm3d=sigma=30 | 変換領域 | 8.1 秒 | 34.0 dB | 1.3 | 6.2 | 91% |
「誤差」はきれいなクリップとの差の標準偏差なので、葉の部分では残ったノイズと失われた質感の両方を数えています。「残った葉の細部」は、きれいなクリップの細かな葉の質感のうち、結果に残っている割合です。

数字からわかること:
- 速いフィルターは強いノイズにほとんど効きません。 既定値の
hqdn3dは空の誤差を 8.8 から 8.1 にしただけでした。軽いノイズや、強いフィルターの前の下処理に向いています。 - 非局所平均は、しくみ上ムラが出ます。
s=6では空を 1.1 まできれいにしましたが、葉はほとんど元のままノイズが残りました(8.1)。固有の質感には平均に使える似たパッチが少ないからです。s=10では葉の本物の細部の 17% が失われ、PSNR も下がりました。これが AI 修復がのっぺりする理由 で説明したろうのような見た目です。 - 変換領域のフィルターは両方のバランスを取りました。 前後 1 フレームずつを使う
fftdnoizは、33.7 dB で葉の細部の 98% を残しました。bm3dは PSNR がいちばん高い 34.0 dB でしたが、その過程で葉の細部の 9% を消しました。 - 速さは 40 倍も違います。
nlmeansは私たちの CPU で 1080p を毎秒約 1 フレームで処理し、別の 1080p クリップの 121 フレームでは 192 秒かかりました。
bm3d について 1 つ注意があります。FFmpeg のドキュメントによれば、group が既定値の 1 より大きくない限り、ブロックマッチングは行われません。私たちのビルドでは、値を上げるとフィルターは 15 倍以上遅くなったのにノイズは減らなかったので、表では既定値を使っています。この場合、完全な BM3D ではなく変換領域のフィルターとして働きます。
表のうち 2 つのコマンドを、調整して使えるように載せておきます。
ffmpeg -i input.mp4 -vf "nlmeans=s=6" -c:v libx264 -crf 16 -c:a copy denoised.mp4ffmpeg -i input.mp4 -vf "fftdnoiz=sigma=8:prev=1:next=1" -c:v libx264 -crf 16 -c:a copy denoised.mp4弱めから始め、平らな部分のノイズが気にならなくなるまで強さを上げ、それから顔、布、木の葉を 100% 表示で確認してください。短く実践的な手順は AI で動画のノイズを除去する方法 をご覧ください。
圧縮による損傷:ブロック、リンギング、バンディング
ほとんどのコーデックは、各フレームをブロックに分けて変換し、残す余裕のない細部を丸めて捨てます。この丸めから 3 種類の損傷が生まれます。
- ブロックノイズ。 丸めが粗いと、隣り合うブロックの境界が合わなくなり、格子が見えます。MPEG-2、MPEG-4 Part 2(DivX や Xvid の時代のファイル)、Motion JPEG では 8×8 の四角として現れます。H.264 と HEVC はコーデック内部でブロックの境界をフィルター処理するので、損傷は格子状ではなく、にじんだまだらに見えがちです。モザイク状の動画を直す方法 で両方の例を紹介しています。
- リンギングとモスキートノイズ。 高周波を丸めて捨てると、シャープなエッジや文字のそばに波紋が残り、フレームごとにうごめきます。
- バンディング。 8 ビットのパイプラインや、空を平らにしてしまったコーデックによって、滑らかなグラデーションが少なすぎる段階数で保存されると、目に見える段差になります。
ブロック除去
葉のクリップを低いビットレートの MPEG-2 でエンコードし、8 ピクセルのブロック境界をまたぐ明るさの段差がほかの場所よりどれだけ強いかをスコアにしました(1.0 なら格子は見えない。きれいなクリップは 0.99、MPEG-2 ファイルは 2.08)。
| フィルター | 何をするか | ブロックのスコア | PSNR(輝度) |
|---|---|---|---|
| MPEG-2 ファイル | 基準 | 2.08 | 27.7 dB |
deblock=filter=strong | 段差に見えるブロック境界をまたいで平滑化する | 1.78 | 27.7 dB |
pp7=qp=12 | ずらした位置で DCT 係数をしきい値処理する | 1.43 | 27.4 dB |
spp=quality=4:qp=12 | 複数のずらし位置で再圧縮して平均する | 1.24 | 27.6 dB |
spp=quality=4:qp=24 | 同上、より強く | 1.04 | 26.4 dB |
uspp=quality=3:qp=12 | spp と同様だが、各ずらし位置を実際のコーデックでエンコードする | 1.03 | 27.5 dB |
教訓は 2 つです。1 つ目に、ブロック除去は格子を隠しますが、エンコーダーが捨てたものは戻りません。中程度の設定では PSNR はほとんど変わらず、もっとも強い spp の設定はぼかしたぶん 1.3 dB 下がりました。2 つ目に、spp、pp7、fspp、uspp には量子化の値が必要です。デコーダーが提供すればストリームから読み取りますが、私たちのテストでは qp を自分で指定するまで何も変わりませんでした。12 前後から始め、ブロックが残っている間だけ上げてください。
ffmpeg -i old.mpg -vf "spp=quality=4:qp=12" -c:v libx264 -crf 16 -c:a aac deblocked.mp4文字やエッジのまわりのリンギングには、spp の mode=soft もあります。FFmpeg のドキュメントは、デリンギングの効果は高いものの、ぼやけやすいと説明しています。
バンディング除去
バンディングにはシャープ化の逆が必要です。段差をなじませ、それが戻らないようにしなければなりません。実際の圧縮によるバンディングが見られる KwaFlux 同梱のサンプルクリップの空で、各行の平らな連続部分の長さを処理の前後で測りました。
- ソース: 平らな連続部分は平均 10.4 ピクセルで、その 20% が 24 ピクセル以上あり、帯として見えます。
- **
deband:** 平均 2.8 ピクセルで、その長さのものは 0.8%。 - **
gradfun:** 1.3 ピクセルで、その長さのものはなし。FFmpeg のドキュメントは、圧縮でディザが失われて帯が戻りやすいため、再生専用に設計されていると説明しています。

ですから、残しておくファイルでは、バンディングを除去してから 10 ビットでエンコードしてください。増えた段階数が、なめらかにしたグラデーションを保ちます。理由は 8 ビットと 10 ビットの動画の違い で説明しています。
ffmpeg -i input.mp4 -vf "deband" -c:v libx264 -crf 16 -pix_fmt yuv420p10le -c:a copy debanded.mp4ハローを出さないシャープ化
シャープ化はエッジのコントラストを上げる処理です。古典的なアンシャープマスクは、映像のぼかしたコピーを差し引いてエッジを見つけ、その差に量を掛けて足し戻します。副作用はオーバーシュートで、エッジの明るい側に明るい線、暗い側に暗い線が出ます。これがハローです。
AMD の FidelityFX のコントラスト適応シャープ化(CAS)は、量をピクセルごとに調整します。すでにシャープな部分には少なく、細部の足りない部分には多くかけます。
レベル 60 から 180 へ変わる柔らかいエッジをシャープにして、オーバーシュートを測りました。
| フィルター | 暗いハロー(60 を下回るレベル) | 明るいハロー(180 を上回るレベル) |
|---|---|---|
unsharp、5×5、量 1.5 | 4 | 2 |
unsharp、7×7、量 2.5 | 20 | 16 |
cas=strength=0.5 | 約 2 | なし |
cas=strength=1.0 | 35 | 2 |

FFmpeg のドキュメントは、unsharp の量は −1.5〜1.5 が妥当だとしており、量 2.5 の結果がその理由を示しています。CAS は中程度の強さでは問題ありませんでしたが、最大の強さでは 4 つのうちもっとも深い暗いハローを出しました。適応型だからどんな設定でも安全というわけではありません。シャープ化をやりすぎないための習慣は 2 つです。
- 拡大縮小のあとにシャープ化し、 視聴されるサイズで、そのサイズの 100% 表示で判断します。
- シャープ化にできないことを忘れない。 残っているエッジを急峻にするだけで、ピンぼけや動きのぶれで失われた細部は取り戻せません。それには ぼやけた動画を直す方法 をご覧ください。
ffmpeg -i input.mp4 -vf "cas=strength=0.4" -c:v libx264 -crf 16 -c:a copy sharpened.mp4色かぶりと色収差
色かぶり:ホワイトバランス
色かぶりは、カメラが光を見誤り、すべての色が同じ方向にずれることで起きます。電球の光では白がオレンジに、日陰では青になります。直すには、中性のものが再び中性に見えるまで赤、緑、青のチャンネルを拡大縮小します。手法の違いは「中性」の見つけ方にあります。
- グレーワールド は、シーンの平均の反射率が無彩色だと仮定します。シーンの色がさまざまなときは機能し、1 色が支配的なときは失敗します。
- グレーエッジ は、van de Weijer、Gevers、Gijsenij が提案した手法で、シーンの平均の「エッジの差」が無彩色だと仮定します。大きな単色の領域の影響を受けにくくなります。
- 既知の中性の基準 は、グレーカード、白い壁、白い船体のように、白やグレーだとわかっているものを測り、それを中性にするゲインを計算します。
海上の船を映した同梱のサンプルクリップのフレームに暖色の色かぶりを加え、3 通りに直して、元のフレームとの平均の色差(ΔE、低いほど近い)を測りました。
| 手法 | 元のフレームとの平均 ΔE | 白い船体の赤 − 青 |
|---|---|---|
| 元のフレーム | 基準 | −6 |
| 暖色の色かぶりを追加 | 19.9 | 39 |
grayworld | 15.4 | 36 |
greyedge | 8.9 | 9 |
船体から求めたゲイン(colorchannelmixer) | 5.9 | 0 |

グレーワールドは教科書どおりに失敗しました。フレームの大半が青い空と海なので、空を中性にして船体をオレンジのまま残したのです。グレーエッジはかなりのところまで直しました。船体から求めたゲインがいちばん近い結果になりました。計算するには、中性の部分の RGB 値を取り、緑の値を赤と青でそれぞれ割ります。私たちの船体は 156、144、117 だったので、赤は 144 ÷ 156 = 0.923、青は 144 ÷ 117 = 1.232 です。
ffmpeg -i input.mp4 -vf "colorchannelmixer=rr=0.923:bb=1.232" -c:v libx264 -crf 16 -c:a copy balanced.mp4中性の基準がないなら、自動の手法ではグレーエッジのほうが無難です。FFmpeg のドキュメントがこれらのフィルターについて勧めているとおり、リニアな光で実行してください。
ffmpeg -i input.mp4 -vf "zscale=transfer=linear,format=gbrpf32le,greyedge=difford=1:minknorm=5:sigma=2,zscale=transfer=bt709,format=yuv420p" -c:v libx264 -crf 16 -c:a copy balanced.mp4色かぶりに加えて色が平板でくすんでいるなら、グレーディングのほうが早く直せることが多く、その面は AI カラー調整 が扱います。
色収差:チャンネルを合わせ直す
色収差はレンズの問題です。ガラスは波長によって光を曲げる量が違うので、色が同じ位置に届きません。2 つの種類があります。
- 倍率色収差(横の色収差) は、色ごとに倍率がわずかに違うものです。にじみは典型的には赤・シアンか青・黄色で、画面の中心にはなく、端に向かって大きくなります。レンズを絞っても改善しませんが、後処理で直せます。赤と青のチャンネルを拡大縮小して、緑に再び合わせます。
- 軸上色収差(縦の色収差) は、色ごとにピントの合う距離が違うもので、主に絞りを開いたときに、画面のどこでもコントラストの高いエッジのまわりに紫や緑のにじみが出ます。拡大縮小では直せず、にじみをマスクしたり彩度を下げたりして隠せるだけです。
修正を試すため、チェッカーボードのチャートの赤チャンネルを中心から 0.5% 拡大し、青を 0.5% 縮小して、端の近くの赤と青の平均の差を測りました。
| バージョン | 左端 | 中心 | 右端 |
|---|---|---|---|
| きれいなチャート | 0 | 0 | 0 |
| 倍率色収差をシミュレート | 37.5 | 2.3 | 37.5 |
チャンネルの一律シフト(rgbashift) | 77.3 | 43.3 | 6.9 |
| 放射状の修正(逆方向の拡大縮小) | 0.5 | 0.5 | 0.5 |

一律シフトはよくある間違いです。倍率色収差は中心から離れるほど大きくなるので、片側は合っても反対側の誤差が倍になります。放射状の修正は、中心を基準に赤を縮小し、青を拡大します。FFmpeg の perspective フィルターならサブピクセルの精度で処理できます。下の数値は 1920 × 1080 のフレームと 0.5% に合わせたものなので、ご自身の映像で測って計算し直してください(余白は 幅 × (1 − 1/1.005) と 高さ × (1 − 1/1.005) のそれぞれ半分です)。
ffmpeg -i input.mp4 -filter_complex "[0:v]format=gbrp,extractplanes=r+g+b[r][g][b];[r]perspective=x0=4.776:y0=2.687:x1=1915.224:y1=2.687:x2=4.776:y2=1077.313:x3=1915.224:y3=1077.313:interpolation=cubic:sense=destination[r2];[b]perspective=x0=4.776:y0=2.687:x1=1915.224:y1=2.687:x2=4.776:y2=1077.313:x3=1915.224:y3=1077.313:interpolation=cubic:sense=source[b2];[g][b2][r2]mergeplanes=0x001020:gbrp,format=yuv420p" -c:v libx264 -crf 16 -c:a copy fixed.mp4ヒント: 私たちのテストでは、extractplanes はどう指定してもプレーンを R、G、B の順で返したので、extractplanes=g+b+r としても最初に来るのは赤です。出力のラベルは R、G、B の順に付けないと、チャンネルが入れ替わってしまいます。レンズプロファイルを持つ RAW 現像ソフトや編集ソフトはこの修正を自動で行うので、お使いのレンズがそのデータベースにあるならそちらのほうが手軽です。
FFmpeg の完全なチェーン
暖色の色かぶりがあり、ブロックとノイズの多い古い 720p クリップを 1080p にアップスケールする場合の、全体の順番を 1 つのコマンドにまとめました。
ffmpeg -i input.mp4 -vf "bwdif=mode=send_frame:deint=interlaced,spp=quality=4:qp=12,hqdn3d=4:3:6:4.5,colorchannelmixer=rr=0.92:bb=1.23,scale=1920:-2:flags=lanczos,cas=strength=0.4,deband,noise=c0s=4:c0f=t" -c:v libx264 -crf 16 -preset slow -tune grain -pix_fmt yuv420p10le -c:a copy restored.mp4| フィルター | ステップ | メモ |
|---|---|---|
bwdif=mode=send_frame:deint=interlaced | インターレース解除 | インターレースのフラグがあるフレームだけを処理する。プログレッシブのソースなら外す |
spp=quality=4:qp=12 | ブロック除去 | ブロックが目に見えるソースだけ |
hqdn3d=4:3:6:4.5 | ノイズ除去 | 既定値を書き出したもの。ノイズが多ければ fftdnoiz や nlmeans に替える |
colorchannelmixer=rr=0.92:bb=1.23 | ホワイトバランス | ご自身の中性の部分から求めたゲインに置き換える |
scale=1920:-2:flags=lanczos | 拡大縮小 | 従来のアップスケール。AI アップスケーラーを使うならここに入る |
cas=strength=0.4 | シャープ化 | 出力サイズで軽く |
deband | バンディング除去 | グラデーションの段差をなじませる |
noise=c0s=4:c0f=t | グレイン | フレームごとに変わる細かな輝度グレイン |
-tune grain -pix_fmt yuv420p10le | エンコード | グレインとグラデーションを保つ。10 ビットの H.264 は再生できる機器が少ないので、マスターとして使う |
私たちのノートパソコンでは、このチェーンで 720p のサンプルクリップ 150 フレームを 1080p の H.264 High 10 にするのに 32.8 秒かかりました。納品用には、マスターを HEVC Main 10 か、グレイン入りの 8 ビット H.264 にエンコードしてください。
AI モデルの位置づけと今後
従来のフィルターにはパラメーターが少しあるだけで、ノイズの見え方についての考え方が固定されています。学習型のモデルは、その固定された考え方を、例から学んだものに置き換えます。
- 単一画像のモデル(DnCNN、FFDNet、その後に続いた修復ネットワーク)は、きれいな画像と劣化した画像の違いを学習し、ノイズ、ブロック、ぼけを 1 回で取り除けます。
- 複数フレームのモデル は、位置を合わせた複数のフレームを組み合わせるので、2 つ以上のフレームに現れる細部は推測ではなく復元されます。FastDVDnet は、コストの高い動き補償なしでもそれが可能だと示しました。位置合わせに失敗すると尾引きが残り、それは 時間的一貫性、ちらつき、残像 のテーマです。
- 生成モデル(GAN と拡散モデル)は、入力にない質感を加えます。それが細部の源であり、リスクの源でもあります。そのトレードオフと、2026 年の 1 ステップ拡散修復の流れは AI 修復がのっぺりする理由 で扱っています。
従来の教訓はそのまま当てはまります。拡大する前に修復し、質感を少し残し、100% 表示と動きの中で判断することです。
KwaFlux での扱い
- スマート修復はステップを組み合わせます。 画質修復の スマート修復 は、クリップを解析し、隣接フレームを使いながら、ノイズ除去、シャープ化、色と明るさの調整、アップスケール、顔と細部の修復を組み合わせます。
- シーン修復は 1 種類の損傷を対象にします。 夜景 は暗所のノイズを、フィルムグレイン除去 はグレインを扱い、ほかに かすみ除去、雨除去、アニメ、カラー化 があります。
- インターレース解除が最初です。 画質修復のワークベンチは インターレース解除、画質修復、スマート補間の順に実行し、この記事で勧める順番と同じです。
- 色かぶりはカラー調整の役割です。 AI カラー調整 の スマートカラー は「色かぶりやくすみを自動補正」します。
- 複数ステップのジョブは 10 ビットを保ちます。 書き出しが複数のステップで実行されるとき、あいだで受け渡すファイルは 10 ビットの H.264 なので、8 ビットの丸めが繰り返されてバンディングが増えることはありません。
- プレビューしてから比べます。 1・3・5 秒のプレビューを出し、動きを判断する前に 元のフレームレート を選び、プレビュー後に画質を自動比較 をオンにしてスコアを確認します。倍率色収差は、上のコマンドか編集ソフトのレンズ補正で、読み込む前に直してください。
よくあるトラブルと対処
| 問題 | 考えられる原因 | 対処 |
|---|---|---|
| ノイズ除去のあと顔がろうのようになる | 強度が高すぎる、または非局所型のフィルターが質感を消している | 強度を下げ、100% 表示で肌を比べ、最後に細かいグレインを加える |
| シャープ化のあとノイズが悪化する | ノイズ除去の前にシャープ化した、またはかけすぎ | 先にノイズ除去し、シャープ化は最後に軽く |
| エッジに白や黒の縁取り | シャープ化の量が多すぎる | 量を下げる。cas の 0.3〜0.5 を試す |
| 書き出し後にバンディングが戻る | 8 ビットのエンコード、または圧縮でディザが失われた | 最終エンコードの前にバンディングを除去し、10 ビットでエンコードする |
| 動く物体の後ろに尾引き | 時間方向のノイズ除去が動きまで平均している | 時間方向の強さを下げるか、動きを考慮するフィルターを使う |
| ブロック除去で何も変わらない | ストリームから量子化の値が得られない | qp を自分で指定し、12 前後から始める |
| 自動ホワイトバランスで空が灰色になる | 1 色が支配的なシーンでのグレーワールド | グレーエッジか、既知の中性から求めたゲインを使う |
| にじみが片側しか直らない | チャンネルの一律シフト | 代わりに中心を基準に赤と青を拡大縮小する |
できないこと
- 同じ大きさとコントラストのノイズと細部を分けられるノイズ除去はありません。 どちらかを犠牲にすることになり、何を犠牲にするかを選ぶのはご自身です。
- ブロック除去は境界を隠すだけで、エンコーダーが捨てたものは戻りません。
- シャープ化はエッジのコントラストを上げるだけで、解像度は上がりません。
- チャンネルの拡大縮小では、軸上色収差や白飛びしたハイライトのまわりの紫のにじみは直せません。
- 自動ホワイトバランスは推定です。 中性の基準がなければ、光についての推測にすぎません。
まとめ
よい修復は、小さく的を絞った修復の積み重ねです。損傷を診断し、各フィルターをほかの効果を打ち消さない位置で実行し、問題が見えなくなったらすぐにやめます。測れるときは測り、100% 表示と動きの中で比べ、一点の曇りもないフレームを追い求めるより質感を少し残してください。
KwaFlux はご自身の GPU で画質修復を実行します。AI 処理はご自身の GPU 上で実行され、メディアファイルが処理のためにアップロードされることはありません。Windows 10(64 ビット、バージョン 1809 以降)、Windows 11、Apple Silicon 搭載の macOS 12 以降で動きます。プレビューにアカウントは不要です。どのクリップでも 1・3・5 秒のプレビューを出せます。ログインと有料プランが必要なのは、書き出し、変換、ファイル修復、リンクからのファイルダウンロードだけです。
ご自身の素材で効果をテスト
KwaFlux を入手し、支払う前に自分の素材で効果を無料プレビュー。アカウント不要、処理はご自身の GPU で行い、メディアはアップロードしません。 動画のプレビューは 1、3、または5 秒、手ぶれ補正のプレビューは 5、15、または30 秒から選べます。
よくある質問
ノイズ除去とシャープ化はどちらを先にすべき?
ノイズ除去が先です。シャープ化はノイズも含めてエッジの大きさのものすべてのコントラストを上げるので、あとからかけるノイズ除去の仕事が増えます。私たちのテストでも、ノイズ除去を先にしたほうが平らな部分に残るノイズが少なく(12.2、逆の順番では 14.5)、きれいなクリップとのスコアも高くなりました。
細部がいちばん残る動画のノイズ除去フィルターは?
どんな場合にも合うフィルターはなく、映像とノイズによります。私たちのテストでは、隣接フレームを使う周波数領域のフィルターが、2 番目に高いスコアで葉の質感の 98% を残しました。AI で動画のノイズを除去する方法 のように、100% 表示で切り出して比べてください。
シャープ化でぼやけた動画は直せる?
一部は直せます。シャープ化は残っているエッジを急峻にするので、少し甘い映像はくっきり見えますが、ピンぼけや動きのぶれで失われた細部は取り戻せず、強めるとハローが出ます。本当のぼけには ぼやけた動画を直す方法 をご覧ください。
書き出し後にバンディングが戻るのはなぜ?
8 ビットのエンコードがなめらかにしたグラデーションを再び丸め、圧縮が段差を隠していた細かなディザを落としがちだからです。最終エンコードの直前にバンディングを除去し、納品先が許すなら 10 ビットでエンコードし、平らな部分に質感が残るよう少しグレインを加えてください。
自動ホワイトバランスは信頼できる?
場合によります。自動の手法は仮定から光を推定します。グレーワールドはシーンの平均がグレーになると考えるので 1 色が支配的だと失敗し、グレーエッジのほうが持ちこたえます。白やグレーだとわかっているものから測ったゲインのほうが、信頼できる直し方です。
色収差はあとから取り除ける?
一部は取り除けます。にじみが画面の端に向かって大きくなる倍率色収差は、中心を基準に赤と青のチャンネルを拡大縮小すれば修正できます。画面のどこでも明るいエッジのまわりに紫や緑のにじみが出る軸上色収差は、マスクするか彩度を下げることしかできません。
参考資料
- Buades, Coll, and Morel, "Non-Local Means Denoising," Image Processing On Line, 2011 (averaging similar pixels, which need not be close) (2026-10-22 閲覧)
- Lebrun, "An Analysis and Implementation of the BM3D Image Denoising Method," Image Processing On Line, 2012 (grouping similar 2D patches into 3D groups) (2026-10-22 閲覧)
- Zhang et al., "Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising" (DnCNN, residual learning) (2026-10-22 閲覧)
- Zhang, Zuo, and Zhang, "FFDNet: Toward a Fast and Flexible Solution for CNN-Based Image Denoising" (noise-level map input) (2026-10-22 閲覧)
- Tassano, Delon, and Veit, "FastDVDnet: Towards Real-Time Deep Video Denoising Without Flow Estimation" (multi-frame denoising without motion compensation) (2026-10-22 閲覧)
- AMD GPUOpen, "AMD FidelityFX Contrast Adaptive Sharpening (CAS)" (per-pixel sharpening amount) (2026-10-22 閲覧)
- van de Weijer, Gevers, and Gijsenij, "Edge-Based Color Constancy," IEEE Transactions on Image Processing, 2007, author's copy (gray-world and gray-edge assumptions) (2026-10-22 閲覧)
- Wikipedia, "Chromatic aberration" (axial and transverse types; transverse corrected by radial scaling, axial hard to remedy in post) (2026-10-22 閲覧)
- FFmpeg Filters Documentation (`hqdn3d`, `atadenoise`, `nlmeans`, `bm3d`, `fftdnoiz`, `deblock`, `spp`, `uspp`, `deband`, `gradfun`, `unsharp`, `cas`, `grayworld`, `greyedge`, `perspective`, `extractplanes`, `bwdif`) (2026-10-22 閲覧)
- x264 source, x264.c help text (`--tune grain` settings) (2026-10-22 閲覧)

