Avisynth でブロックノイズを軽減させたメモ

Software
この記事は約4分で読めます。
この記事は最終更新日より 1 年以上経過しています。
画像やリンクが無効になっている可能性もあるのでご了承下さい。

 保存エンコは Avisynth Plus + x265 で CM カットをしたりロゴ消ししたりノイズ除去をかましつつ個人的に満足出来る調整で行っているが、ブロックノイズに関してはノータッチだったのでちょっと弄ってみた。

 使用するフィルタは DGDecode.dll に内蔵されている BlindPP というデブロックフィルタ。同ランタイムには deblock() というフィルタも内蔵されていたけど、いまいち満足いく結果が得られなかったという経緯。

 AvsPmod でプレビューしながら BlindPP のパラメータを調整したところ BlindPP(quant=6) が程よくブロックノイズを軽減しつつエンコード速度低下も微々たる物で収まった。
 BlindPP のフィルタは一応リサイズが終わって unsharpmask やバンディング軽減を行うよりも一歩手前に差し込んであげた。

 実際にエンコードしたソースからブロックノイズの目立つ 1 フレームに対して BlindPP(quant=6) を適用した場合と適用しなかった場合とで画像を並べてみる。ソースは TOKYO MX ソースのアニメの一コマ。


 左が BlindPP 無しで右が適用した物となる。効果は一目瞭然。

 エンコード速度は 34524frame 720p 24 分ソースで筆者使用のフィルターを通した場合、適用前は 42.7fps だった物が適用後は 39.54fps となった。十分許容範囲内の低下で済んだ。
 ファイルサイズは 225MB だったものがブロックノイズが低減した分だけ圧縮率が向上したようで 211MB に落ちた。これは予想以上だったのでわりと満足。

 地上波のアニメなんかはブロックノイズが多いので、今回テストしてみた BlindPP というフィルタは中々良い感じかもしれない。
 ただ、画質の良し悪しは個人差というか好みがあると思うのでパラメータはちょいちょい弄って様子を見て行くと良いだろう。

2018/08/31 11:33 追記

 BlindPP というフィルターは解像度の縦サイズが 16 で割れないと使えないようなので、1080p でエンコードしたい場合には使えないようだ。
 1080p でエンコードする場合は同じ DGDecode.dll に入っている deblock() を用い、deblock(quant=32) 位にしたらまぁボチボチ効いていたのでそれで代用することとした。BlindPP と比べるとやや効きが甘く感じるが、だからといって quant をあげすぎると細い線なんかが破綻するので適度に調整しながらあげてみると良い。

 deblock() 適用例
 左が deblock 無し。右が deblock(quant=32) にて適用。

 deblock 適用した 1080p エンコードの成果物はファイルサイズが 277MB となった。deblock 未適用だと 299MB だったので一応デブロックの効果は出ているようだ。
 動画としてみているときに分かるようなレベルのブロックノイズには効きづらいので、あくまで人間が視覚的に得られないような細かいブロックノイズを低減することでエンコード時の圧縮率を向上させるような目的になるだろうかと思った。
 尚、deblock() を適用する事で低下するエンコード速度は 1080p 時で 0.45fps 程の低下だったので非常に軽量なフィルタかもしれない。ソースにも寄るだろうけど誤差レベルの速度低下だったので常時入れておいても何ら問題はないし寧ろ縮みやすくなるのでオススメである。

 実際にデブロックを適用させる場合、Avisynth Plus は if 文が使えるのでスクリプトファイルの冒頭にエンコード解像度を決めるフラグとして変数を定義し、それを元にリサイズを if 文で分けてブロックノイズ低減すると良いかも。

 筆者例 (エンコード時 SAR 値 4:3 設定)

#----- Resize
if ( editmode == 1 ) {
    Spline36Resize(960, 720)     # 720p
    BlindPP(quant=6)
} else if ( editmode == 2 ) {
    Spline36Resize(1440, 1080)  # 1080p
    deblock(quant=32)
} else {
    Spline36Resize(1280, 720)   # 720p
}

 スクリプト冒頭に editmode という変数を定義。0 は CM カット編集時に解像度を 1280x720 にしてシーク処理を軽くするためにリサイズ以外のフィルタを一切適用しない状態とし、編集完了後に 1 とすると 720p、2 とすると 1080p にして各種フィルタを全て適用した状態とする使い方。

著者プロフィール
ぶっち

本格的に PC へ触れ始めてたのは 1990 年位から。
興味は PC 全般。OS は Windows と Linux などを嗜む。
プログラマやネットワークエンジニアを経てフリーに活動している 2 児の父な 40 代半ばのおじさんです。

ぶっちをフォローする

コメント

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.