圧縮はノイズリダクションであるべき

iPod用、PSP用、PC保存用、それぞれのH.264の設定を色々調べて試してみた。
今までは、次のようにしていた(AviUtl使用、設定値はほぼデフォルト)。
自動フィールドシフト→クリッピング→ノイズ除去(時間軸)→ノイズ除去→WMV出力Plus
アニメの場合のエンコード時間は、PentiumM-1.1GHzで再生時間の5倍前後。

PSPの場合

PSP用には、「拡張 x264 出力(GUI)」のプリセットを使いたいところだが、
最新のバージョン(1179〜1181)では、--8x8dctがオンになってしまい、PSPで再生できない。
そこで、忘れずに「8x8 離散コサイン変換」のチェックを外すようにする。
基本的にエンコード時間を短く済ませる方向で考えていたが、自動フィールドシフトの負荷が大きいため、サブピクセル精度を6にするなどの変更もそれほど響かない。
ただし、さすがにエンコード時間が再生時間の5.7倍と、以前より少しは遅くなった。
そこで、ノイズ除去(--nrオプション)に注目した。
画質のいいソースの場合、元々、AviUtl標準のノイズ除去を使う主要な目的はファイルサイズの削減だったので、とりあえずH.264が装備するノイズ除去に切り替えた場合とファイルサイズを比較した。
すると、H.264のノイズ除去の方が、数%小さいファイルを出力した。
おまけに、エンコード時間も再生時間の4.7倍と、かなり短くなり、
画質も、少なくとも悪くはなっていない。
というわけで、ノイズ除去はH.264のエンコーダに任せることにした。

余談、というかタイトルにある本題

圧縮とは、データを省くこと、それも、できるだけ不要なデータを省くことだ。
また、ノイズ除去というのは、必要な部分を残しつつ、不要なデータを除くこと。
つまり、究極的には、最高のノイズリダクションは最高の圧縮技術であるはずだ。
高圧縮の場合、必要なデータも削らざるをえないから、逆は言えないが、思想的には同じだろう。
そういう意味からも、エンコーダの内蔵するノイズ除去の方が原理的に優れているだろうと思い、H.264装備のノイズ除去を選択した。

設定の一例

プリセットの「PSP:高速」から、
QPの下限を10、Bフレームの最大連続数を3、動き予測アルゴリズムをHexagonal Search、サブピクセル精度を6、動き予測方式をAuto、デブロックフィルタをオン(-1、いや0のがいいかな)、ノイズ除去を100、スキップMB検出をオフ、ログ表示をNONEに、
それぞれ変更したもの。
時間に余裕がある場合は、動き予測にUneven Multi-Hexagon、サブピクセル精度を7にする、8x8, 8x16 and 16x8 Bフレーム動き補償、4x4 イントラ動き補償のチェックを入れる、などがお手軽な候補。

iPodの場合

CABACが使えない。そのため、1割以上もサイズが膨らんでしまう。
iPodで再生する必要がある場合を除き、CABACはオンにするべき。
「拡張 x264 出力(GUI)」では、PSP用の設定から、マクロブロックのタブのチェックを全て外し、数値を0にするといい。

PC用の場合

704x480で保存したい場合、そもそもPSPで再生できないので、もう少し贅沢をする。
PSP用の設定から、「8x8 離散コサイン変換」をオンに変更。
正直理解して設定しているわけではないが、画質が上がるらしい。
エンコード時間もほとんど増えない。
ただし、iPod用とPC用を比べると、再生時のCPU使用率がまるで違う。
変化が大きいので厳密にはわからないが、WMVとiPodH.264が同程度で、PC用H.264がその2〜3倍というイメージ。