超高解像度動画用のコーデックと対応解像度:2017

動画のイメージ。

4K 以上の解像度かつ、そこそこ高品質な動画を扱うことになったので、各種コーデックの対応解像度などの情報などについて、ここにまとめておきます。

殴り書きのため情報の正確さについては保証できません。

コーデックの選択肢

コーデックの選択肢として、H.264, H.265, HAP, VP8(VP9), について調べました。 他にもメジャーなコーデックはありましたが、とりあえずは Unity で再生する必要があったので、Unity 環境下で再生できるこれらについて調べました。

解像度の情報について

ほとんどのコーデックに対応解像度が示されていますが、特に規格で定められていない限り、制限はないようです。アスペクト比についても同様です。 ただし、その動画を生成するツールまたはデコードするツールによっては、制限されている可能性があります(解像度、アスペクト比の両方)。

また、ピクセル数の限界範囲に収まったとしても、 ピクセルアスペクト比(ピクセル当たりのアスペクト比)が対応していないなどの可能性があります。

H.264 (AVC)

H.264 は、後継である H.265 も登場していますし、2017 現在では広く普及する、枯れて安定したコーデックです。 ただし 4K 以上の動画に対応しません。そもそも低いレベルの H.264 では 4K にも対応していません。

最大ピクセル数は、9,437,184 で、4,096 × 2,304 などが最大解像度となります。 したがって、4K 以上の解像度になる場合は、選択肢に入りません。

枯れた技術のため、そこそこハードウェアデコードにも対応しているので、 ハードウェアデコードできる環境であれば、再生負荷を上手く軽くすることができます。

規格については ITU-T(国際通信規格を定める、推奨する団体)で確認することができます。 他に Wikipedia に良くまとまっています。

H.265 (HEVC)

採用コーデックとして最有力候補のコーデックです。 2017 現在では H.264 の方が普及していますが、徐々に普及してきているコーデックで、 一般的な動画編集ソフトウェア、エンコーダーの類から出力することができます。ffmpeg もエンコードに対応しています。

最大ピクセル数は 35,651,584 で、H.264 よりも桁が大きいです。8,192 × 4,320 は 35,389,440 ピクセルなので、 標準的な 8K 解像度よりもう少し大きな解像度に対応することができます。

H.264 と比較して、同等品質の映像をより低いビットレートで実現することができる(簡単に言えば圧縮性能が良い)ので、 再生負担をより小さく収めることができる可能性があります。

H.264 と同様に、規格については ITU-T で確認することができます。 他に Wikipedia に良くまとまっています。

余談:Adobe Media Encoder を使ったエンコードでの不具合

Adobe MediaEncoder (CC2017) を使って、H.265 の動画をエンコードするときに不具合が起こりました。

AfterEffects でコンポジットした 4,352 x 5,977 の動画を H.265 でエンコードしようとするとき、 MediaEncoder 上では、4,352 x 5,977 で実行されますが、出力された動画の解像度は、4,352 x 4,352 になります。 このときエラーログなどは出ていません。

恐らく H.265 の規格に相当しないアスペクト比なのだと思いますが、エラーが発生しない点に注意する必要があります。 また、5,977 x 4,352 のように横倒しにした(横長の)動画としてエンコードを実行すると、出力された動画は同等の解像度となります。

HAP

低圧縮の代わりに低負荷な動画コーデックです。また GPU でのデコード(ハードウェアデコード)に対応します。 オフィシャルのドキュメントらしいものが存在しないのですが、8K 解像度に対応しているようです。

私は HAP の再生を Unity のプラグイン AVPro で確認していますが、 その AVPro の仕様表を確認する限り、8K に対応しています(新しいバージョンに限る)。 ただし具体的なピクセル限界が明記されていません。

  • AVPro Video
    • ページ内にドキュメントへのリンクなどがあります。

一方で対応解像度より少ないと思われる動画でも、正常に再生できない現象が起こりました(少なくとも 8K より小さい)。 同じ現象は別の方の、別の再生環境でも起こっているようです。

恐らくですが H.265 などと同じように、アスペクト比に条件があるのだと思うのですが定かではありません。 また「水平垂直解像度が 2 のべき乗~」の方がパフォーマンスが良いなどの仕様もあります (ハードウェアレベルのチューニングのためと思います、Hap に限らずかもです)。

VP8, VP9

VP8(14bit) は最大解像度が、16,384 x 16,384, VP9(16bit) は 65,536 x 65,536 です。 規格上の解像度で言えば最も高い解像度になります。とはいえ 8K 以上の解像度をスムーズに再生できる環境はそうそう無いと思います。

主に Web (ブラウザ) などの再生環境でよく見かけますが、2017 現在では H.264 などの方が主流に見えます。 Google が開発するオープンソースでロイヤリティフリーなコーデックで、ffmpeg なども対応しますが、 2017 年現在では、特に VP9 は、デコード(再生)できる環境が比較的少ない印象があります。

Google が主体となって開発しているため、Youtube などで採用が進んでいるようで、また WebM コンテナが主に採用するコーデックになります。 そのため(?) ITU-T には規格情報が掲載されておらず、WebM のページに規格情報が掲載されています。

特によくある質問については、ページにまとまっています。解像度情報についてもこちらに掲載されています。

Adobe 用プラグイン

Adobe 製品は標準で VP8, VP9 に対応していません。 ただし Premiere or MediaEncoder から WebM を出力するためのプラグインがあるようです。

開発途中のようですし、無圧縮の動画で出して、ffmpeg 使って変換する方が確実とは思いますが、 無圧縮の書き出しは容量食いますし、もし必要ならこのようなプラグインを使うのも良いと思います。

余談 : Unity AVPro を使った再生

Unity で利用することができる AVPro ですが、公式のドキュメントを読む限り、Pascal(GPU10x系) のグラフィックカードがあれば、 VP9(Profile 0) の動画は 8,192 x 8,192 までハードウェアデコードの恩恵を受けることができます。

超高解像度の動画をとりあえずフルスクリーンでリアルタイムに再生したいときは、Hap または VP9 が選択肢に上がりそうですね。

Unity 5.6 から実装される VideoPlayer がハードウェアデコードに対応するかどうかは定かではありません。