10月23日、24日の2日間にわたってサンフランシスコで開催された動画エンジニアの祭典Demuxedで、エンコード処理に工夫をすることでビットレートを削減したりエンコード時間を短くしたりするというセッションが2つあり、2つとも興味深い手法だったのでご紹介します。
Demux 2019のカンファレンス概要はこちらのポストをご参照下さい。
エンコードの工夫編その1 – フィルムグレインノイズとの戦い
フィルムグレインノイズとは、フィルムで撮った写真に乗っているようなザラザラしたノイズを指します。映像上にこの種のノイズが乗る原因は様々ですが、『撮影時のカメラやフィルム要因によるもの』と『視覚的演出として編集時に意図的に付与するもの』に大別されます。『ノイズ』という名称が付いているので省いてしまえば良いと思いがちですが、実際にはノイズという”味”も含めて映像作品であるので、映像配信事業者にはその”味”を上手く伝えるようなエンコードを行うことが求められます。

フィルムグレインノイズの例。ノイズありの方はザラザラしている。
さて、フィルムグレインノイズがなぜエンコードで課題になるのでしょうか。それは、フィルムグレインノイズとエンコードのアルゴリズムとの相性の悪さにあります。
フィルムグレインノイズを視覚的特徴という観点から表現すると、『ランダムな位置にランダムなタイミングで細かい差分として乗ってくるノイズ(高周波成分を主とするノイズ)』といえます。
対して、今日使われているH.264、HEVCなどのエンコードアルゴリズムは、『ヒトの視覚は映像上の細かい差分には気づきづらいので、細かい差分情報(高周波成分)を積極的にデータから省くことで圧縮する』という考え方に基づいて設計されています。
そのため、フィルムグレインノイズという細かい差分が多い映像を、そのノイズを保ったたま圧縮するためには単位時間あたりより多くのデータ容量が必要となります。
実際に先ほどのフィルムグレインノイズ有り無し写真をHEIF形式で圧縮して比べてみると、ファイルサイズに3.5倍の開きがあることがわかります(HEIFではHEVCの圧縮技術が使われています)。

フィルムグレインノイズの有り無しで同じような写真でもファイル容量に開きが生まれる
上述のような課題がある中で、NetflixのAV1エンコードでは次のような面白い取り組みをしていました。

- エンコードを行う前に、映像のノイズ成分とそれ以外の部分を分離する。
- ノイズ成分を取り除いた映像はAV1で高効率に圧縮できる。
- 分離されたノイズ成分は何らかの方法でモデリングして、ストリームに重畳しておく。
- 再生時は、デコーダーから出てきた映像に、モデリングデータを元に計算して求めたノイズを乗せて再生する(計算しているので元のフィルムグレインノイズと全く同じではない)
このように、エンコーダーが不得意とするノイズを別の方法でデータ化することで、必要なファイルサイズを30%削減できたと発表されていました。
エンコードの工夫編その2 – 映像品質を下げずにエンコード処理時間を削減する
MPEG-2にはじまり、H.264、HEVC、AV1、VVCなど世代を経るにつれより高効率なエンコードアルゴリズムが登場し、それに伴い必要なファイルサイズも削減されてきました。
一方で、高効率なアルゴリズムはそれだけ計算負荷も高くエンコードにかかる時間が爆発的に伸びるため、エンコードにコストがかかりすぎスケールしないという課題もあります。

コーデックが進化する毎にファイルサイズ(青)は減っているが、エンコードに必要な時間(赤)は爆発的に増加している
そのような課題に対応するため、MPEG-5 Part 2でLCEVC (low-complexity enhancement video coding)という仕様の策定が進んでおり、その仕様の一つの実装例としてN-Nova社がP+コーデックを紹介していました。

LCEVCの処理プロセス概略図
まず、映像を1/4サイズにダウンサンプリングし、AVC, HEVC, AV1等の既存のアルゴリズムで圧縮します。このとき映像はダウンサンプリングされて総ピクセル数が減っているので、その分だけ早く圧縮を行うことができます。また、ダウンサンプリング処理には映像中の高周波成分をカットするローパスフィルターの役割もあります。

LCEVCではアップスケール時に元映像のディテール情報を使ってエンハンス処理をすることで映像の品質を保とうとするところに特徴がある
さて、ダウンサンプリングした映像をそのまま再生したのでは細部がぼやけてしまいます。それに対処するため、LCEVCでは元の映像からディテール情報(高周波成分)を抽出して重畳しておくという処理が入っています。デコード時には映像を元の画角にアップスケールしつつ抽出しておいたディテール情報を元にエンハンス処理をすることで、細部のぼやけを防いでいます。
これらのディテール情報のおかげで、VMAF(映像の客観評価手法)でも、BT.2095による主観評価でも、同じ映像品質スコアを出すのに必要なビットレートを削減できています。

従来のコーデックとLCEVCでのVMAFスコア比較(左)とMOS値比較(右)
下図はx264エンコーダーによるH.264とLCEVCなH.264を比較したものですが、LCEVCではビットレートが低いにもかかわらず安全柵のバー部分がきちんと表現されているのが分かると思います。プレゼンター曰く「LCEVCではダウンスケールしてから圧縮するので映像の基礎表現部分の表現にビットがより多く割り当てられるようになり、かつ、再生時にはディテール部分も別途エンハンスするのでディテールも損なわれないから」とのこと。

LCEVCでは柵部分も描画が保たれておりMOS値も高い
画質評価については一言注意点をあげていました。それはLCEVCをPSNRで評価すると、VMAFや主観評価(MOS値)では良いスコアが出ているにも関わらずPSNRでは低評価になる場合があると言うことです。

ビットレートが高い部分でLCEVCのPSNR値(青線)が低くなる現象が起きている(左)。しかし、VMAF(中)やMOS値(右)ではLCEVCの方が高評価。
実際に映像で見比べてみると、LCEVCの方はブロックノイズが少なく、バスケのラインもキレイに表現されています。

PSNRで低評価になっていたものを実際に見比べてみると、PSNR評価が主観評価を上手く反映していないと思える。
エンコード時間に関しても、H.264(AVC)では1.8~2.4倍速、VVCに至っては4.7倍速でエンコード処理できたという結果でした。

LCEVCではエンコード対象のピクセル数が減っているのでエンコード処理時間は短くなっている
エンコードアルゴリズムが不得意とするデータを映像から分離して処理する
これまでみてきた二つのセッションに共通して言えることは、『エンコードのアルゴリズムが苦手とするデータは取り除いて別の方法で重畳しておく』ということです。
フィルムグレインノイズや映像のディテール部などの高周波成分は、離散コサイン変換ベースのコーデックが苦手とするデータです。これら高周波成分を分離してエンコードすると、既存のコーデックでも圧縮の効率が上がります。そして、再生時には単離しておいた高周波成分を合成して再生することで圧縮効率を上げつつも再生品質を大きく損なうことがなくなります。
具体的な細かい手法は違えど、NetflixとV-Novaという2社が同じような考え方でエンコード手法を改善しようと取り組んでいたのが興味深いセッションでした。
参考情報
上で紹介した2つのセッションは次のURLで視聴できます。
- Netflix社の発表『AV1 at Netflix』
https://www.twitch.tv/videos/498702435?t=08h07m22s - V-Nova社の発表『Introducing MPEG-5 Part 2 LCEVC』
https://www.twitch.tv/videos/498918740?t=05h23m40s
そのほかのDemuxed関連記事はこちら。
Pingback: 年に一度の動画エンジニアの祭典Demuxed 2019に参加してきました | SPARROWS Blog - No Challenge, No Wings