原文: https://www.theoplayer.com/blog/basics-of-video-encoding(2020 年 2 月投稿分)
エンコードとは、生のビデオコンテンツを圧縮し、デジタルファイルやフォーマットに変更するプロセスであり、これによりビデオコンテンツをさまざまなデバイスやプラットフォームに対応させることができます。
エンコードの主な目的は、コンテンツを圧縮して、より少ないスペースを占めるようにすることです。これは、必要のない情報を取り除くことで行われ、ロッシー(非可逆)圧縮とも呼ばれます。
そのコンテンツを再生すると、元のコンテンツと近似しているものが再生されます。もちろん、コンテンツの情報を取り除けば取り除くほど、再生される映像はオリジナルに比べて劣化してしまいます。
映像のエンコードのプロセスは、コーデックによって課せられていますが、今回はそれについて説明します。
なぜエンコードが重要なのか?
ビデオエンコーディングが重要なのは、ビデオコンテンツをより簡単にインターネット上で伝送できるようにするためです。ビデオストリーミングにおいてエンコードが重要なのは、編集前のビデオを圧縮することで、帯域幅を減らして伝送を容易にすると同時に、エンドユーザーに良質な体験を提供することができるからです。
もし、すべてのビデオコンテンツが圧縮されていなければ、インターネット上の利用可能な帯域は、すべてのビデオコンテンツを伝送するのに十分ではなく、広範囲に渡るビデオ再生サービスを展開することができません。家庭内の複数の機器で動画を再生したり、携帯電話を使って外出先で動画を再生したり、あるいは世界中の大切な人とビデオチャットをしたりすることが低帯域でも可能なのは、動画エンコードのおかげです。
フレーム間予測
動画のエンコードでは、動きが非常に重要です。I フレーム(またはキーフレーム)、P フレーム、B フレームで表現することがほとんどです。
キーフレームは画像全体を格納します。次のフレームや P フレームでは、あまり動いていない、あるいは変化していないことに気づくと、一部の画素だけが動いたとして、P フレームは前のキーフレームを参照することができます。I フレーム、P フレーム、B フレームは一緒にピクチャグループ(GOP)を構成しており、そのグループ内のフレームはお互いに参照できるだけで、グループ外のフレームは参照できません。動きの少ないフレームでは、(PNG ファイルのような可逆圧縮を使用した場合には)非常に大きなサイズの画像を保存するために必要なデータストレージの約 90% を節約することができます。
マクロブロック
各フレームの中には、マクロブロックがあります。各ブロックは、特定のサイズ、色、動きの情報を持っています。これらのブロックを別々に符号化することで、適切な並列化が可能になります。以前の H.264 などのコーデックでは、ブロックのサイズは 4x4 サンプルまたは 8x8 サンプルしか使用できませんでした。しかし最近のコーデックでは長方形のブロックサイズや、より大きなブロックサイズも使用できるようになりました。大きなブロックは、ブロック内の詳細があまり必要でない場合に使用され、小さなブロックを多数使用するよりも、大きなブロックを使用するだけで多くのスペースを節約することができます。
マクロブロックは、複数のコンポーネントで構成されています。画素に色情報を与えることを目的としたサブブロックがあります。また、前のフレームと比較して動きを補正するためのベクトルを与えるサブブロックもあります。このようなマクロブロック構造のため、低帯域では、映像コンテンツにシャープなエッジやいわゆる「ブロックノイズ」が見られることがあります。これを回避するために、エッジを滑らかにするフィルターを追加する方法があります。このフィルターは「インループフィルター」と呼ばれ、エンコードやデコードの際に使用され、映像コンテンツがソースに近い状態になるようにします。
クロマ・サブサンプリング
多くの場合、色を RGB チャンネルで分割しますが、人間の目は、特に動画の場合、色の変化よりも輝度の変化をより早く検出します。そのため、動画では YCbCr と いう別の色空間を使用します。この色空間は次のように分かれています。
Y(ルミナンスまたはルーマ)
Cb(青差の色差成分)
Cr(赤差の色差成分)
luma = 明るさ、 chroma= 色
クロマサブサンプリングでは、画像を Y チャンネルと CbCr チャンネルに分割します。
例えば、画像を 4 つの画素を持つ 2 列のグリッド(4x2)に分割するとします。
サブサンプリングでは、j:a:b の比率を定義します。
j: サンプリングする画素数(グリッドの幅)
a: 1 列目の色(CbCr)の量
b: 1 行目と比較した 2 行目の色(CbCr)の変化量
ストリーミングビデオでは、4:4:4 がフルカラーの空間となります。これを 4:2:2 にすると 30%、4:2:0 にすると 50% のスペースを節約できます。ビデオストリーミング(Netflix や Hulu のテレビ番組など)では、最も一般的で広く使われているのが 4:2:0 です。一方、ビデオ編集の現場では、4:4:4 が一般的です。
量子化 (クオンタイゼーション)
映像のエンコードについては、画像部分の省スペース化だけでなく、音声部分の省スペース化にも言及しています。
オーディオは連続したアナログ信号ですが、エンコードのためにはこれをデジタル化する必要があります。デジタル化された音声は、複数の正弦波に分割され、それぞれの正弦波が音声の周波数を表します。スペースを節約するために、必要のない周波数を捨てることができます。
また、画像を見ると、ピクセルの列が後ろに並んでいて、1 つの大きな信号のように見えます。オーディオと同じように、画像の中の周波数を取り除くことを周波数領域のマスキングといいます。周波数を除去するとディテールが損なわれますが、最終的な視聴者には気づかれない程度にかなりの周波数を除去することができます。このプロセスは量子化と呼ばれています。
コーデックとは?
コーデックとは、基本的に映像コンテンツの圧縮規格のことです。コーデックは、映像コンテンツを圧縮するエンコーダーと、映像コンテンツを解凍して元のコンテンツと近似しているものを再生するデコーダーの 2 つのコンポーネントで構成されています。エンコーダーとデコーダーであることから、コーデックと呼ばれています。
オーディオ コーデック
オーディオでは、AAC が業界のデファクトスタンダードとされています。
AAC は基本的にどこでもサポートされており、最大の市場シェアを持っています。その他のオーディオコーデックには次のようなものがあります。
Opus、Flac、Dolby Audio。
Opus は音声に優れており、大規模なサービスでは唯一 YouTube でも採用されていますが、それでも AAC には及びません。ドルビーオーディオは AC3 としても知られていますが、古いサラウンドサウンドシステムでは AAC が再生できないものもあるため、サラウンドサウンド用として使用されることもあります。
ビデオコーデック
H.264/AVC
H.264 は、AVC(Advanced Video Coding)または MPEG-4 AVC とも呼ばれ、2003 年に標準化されました。このコーデックは、MPEG と ITU-T VCEG が JVT(Joint Video Team)と呼ばれるパートナーシップのもとに開発したものです。このコーデックは、高品質のビデオストリームを提供しながら、事実上あらゆる場所、あらゆるデバイスでサポートされており、新しいコーデックのベースラインとみなされています。また、ロイヤリティの支払いも比較的容易です。
H.265/HEVC
H.265 は、HEVC(High Efficiency Video Encoding)とも呼ばれ、MPEG と ITU-T VCEG(JCT-VC と呼ばれるパートナーシップ)による規格です。このコーデックは、2013 年に初めて規格化され、最終的に 2014 年から 2016 年にかけて拡張されました。
H.265は、同じ品質を維持しながら、H.264 に比べてコンテンツの圧縮率を 50% 向上させることを目指しています。
Netflix の調査によると、H.264 との比較では 35~53%、VP9 との比較では 17~21% の改善が見られました。
** このような比較では、エンコーダやコンテンツなどが大きく影響することをご理解ください。
これらの改善は、H.264 にすでに存在していた技術を最適化することで達成されました。
基本的に H.265 は、H.264 よりも小さなファイルにコンテンツを圧縮し、その結果、ビデオコンテンツを再生するために必要な帯域幅が減少します。これは素晴らしいニュースですが、H.265 はまだほとんど使われていません。その主な理由は、ライセンスやロイヤリティの問題があるためです。
VP9
VP8 の後継となる VP9 は、Google が所有する On2Technologies が開発しました。VP9 は 2013 年に標準化されました。このコーデックは、HEVC と似ていますが、ロイヤリティは必要ありません。VP9 は、主要なブラウザや Android 端末では広くサポートされていますが、Apple の端末ではサポートされていないことが問題となっています。これらの端末は VP9 の代わりに H.264 や H.265 をサポートしています。
AV1
2015 年、Alliance for Open Media(AOMedia)が結成されました。この間、Google は VP10、Mozilla(Xiph)は Daala、Cisco は Thor の開発に取り組んでいました。3 つの別々のコーデックを作る代わりに、ロイヤリティの制限に不満を感じていた彼らは AOMedia に参加することを決め、AV1 が誕生しました。
彼らが目指したのは、VP9 に比べて 30% 以上の効率化を実現することと、VP9 と同様にロイヤリティーフリーであることでした。AOMedia のメンバーは全員、関連する特許を提供し、特許防衛プログラムに貢献しました。
AV1 コーデックが完成したとはいえ、まだまだ課題は残っていますが、このコーデックは業界の大手企業に採用され始めており、今後も採用されていくことが予想されます。
コーデックの未来
コーデックの現状は、比較的シンプルなものになっています。オーディオには AAC、より広い範囲で使用するには H.264 が必要です。H.264 は古いデバイスのためのフォールバックであり、VP9 は iOS をサポートしておらず、AV1 は通常のコンテンツ制作などで実際に使われるようになるまでにはまだ道のりがあります。では、1 つのコーデックだけでは対応できない場合、どのような解決策があるのでしょうか。このような状況では、マルチコーデックのアプローチが必要です。例えば、現在最も人気のあるビデオライブストリーミングサービスである Twitch は、現在 H.264 と VP9 を使用していますが、将来的には AV1 への切り替えを希望しています。
また、Netflix は、Android アプリで AV1 のストリーミング配信を開始したことを発表しましたが、VP9 に比べて 20% の圧縮効率向上を誇っています。ただし、この機能は、視聴者が 4G でストリーミングする場合など、CPU パワーが帯域幅よりもはるかに安い場合にのみ有効です。Netflix は、将来的にはすべてのプラットフォームで AV1 を使用することを目指しています。
VVC
VVC(Versatile Video Coding)は、MPEG の新しい規格です。VVC は、HEVC と比較して 50% の効率化と、その他の改善を実現することを目指しています。しかし実際には、HEVC と比較して 30〜40% 程度の効率化を期待する声が多いようです。VVC では、ゲームや画面共有、360 度動画、動画の解像度切り替えなどのサポートが強化されます。
EVC
EVC(Essential Video Coding)は、MPEG の新しい規格で、HEVC と同等または同程度の効率を達成することを目標としています。EVC は、リアルタイムでのエンコードとデコードに適しています。 この規格は、VOD のストリーミングや OTT のライブストリーミングのためのオフラインエンコーディングに特化して作られており、「ライセンスフレンドリー」なコーデックを目指しています。
ハイブリッドコーデック
ハイブリッドコーデックとは、基本的に他のコーデックの上で動作するコーデックのことです。プロセスは通常、以下の手順で行われます。
通常の手順
入力ビデオを受け取る
ビデオに独自のダウンスケーラを使用する(例:1080p から 480p への変換)
ダウンスケールされた映像をエンコードする
プレーヤーで映像をデコードする
独自のアップスケーラーを使用して、デコードされた画像をアップスケールする
これにより、多くの場合、20~40% のビットレート削減が可能です。
P+(旧称:PERSEUS Plus)について
V-Nova 社が開発した P+ は、現在も積極的に使用されています。例えば、このハイブリッドコーデックを H.264 コーデックの上に使用した場合、30〜50% の帯域削減が可能となります。
Perseus は、エンコードパイプライン全体をやり直すことなく、HEVC の規模で節約できるというメリットがあり、また iOS や Android でのハードウェアデコードも可能です。とはいえ、P+ を使ってウェブ上でデコードするのは困難で、バッテリーを消耗します。
また、現在は DRM に対応していませんが、このハイブリッドコーデックは、現在 LCEVC として再ブランド化されており、ハードウェアに統合されれば、今後 DRM にも対応するはずです。
ENHANCEplayer
ENHANCEplayer は、Artomatix と THEO Technologies の共同プロジェクトであり、現在も進行中の技術革新プロジェクトです。このハイブリッドコーデックは、Artomatix の
「Artomatix Enhance AI」を利用して、画像の解像度をアップスケールし、圧縮アーチファクトを取り除き、ノイズを除去します。これは本質的に、ニューラルネットワーク(NN)または AI による「超解像」生成を意味します。NN は、画像を強化し、圧縮時に失われたディテールを追加するように訓練されています。
ENHANCEplayer は、25fps のフレームレートを得るために 40ms の処理速度を達成することを目指しています。最大の課題は、圧縮前の画像とエンハンスメント後の画像が同じであること、すなわち再現の忠実度であり、DRM がかかっている状態ではまだ困難です。