見出し画像

映像の圧縮のもろもろ


内定もなくて将来がわからなくなったので書きました。

※このnoteは自分用のメモなので認識や理解が間違っている部分があるかもしれません。あまり参考にはしないでください。


圧縮の仕組み

可視光線や可聴域という言葉があるように、人間の視覚や聴覚には限界がある。その特性を利用し、効率的にデータレートを配分するというのが圧縮の基本的な仕組みである。圧縮の際には コーデック (codec)というものが用いられる。 コーデック は 符号化を行うエンコーダと復号化を行うデコーダがペアになっているものが多い。

あるコーデックによって圧縮されたデータを格納するのがコンテナ である。コンテナに格納できる映像コーデックと音声コーデックはあらかじめ決まっている。(コンテナ の 例: mp4, mov, avi, wmv, wav, pngなど 。)


空間圧縮と時間圧縮

映像の圧縮は時間圧縮か空間圧縮、もしくはその両方を組み合わせて行われる。

空間圧縮

映像上の各フレームに対して行われ、フレーム同士に依存関係がない。フレーム内での連続性 (例: 一様な色、似たパターン )を検出し DCT(離散コサイン )変換 や Wavelet変換を用いて行われる。十分なビットレートを確保している場合は問題がないが、低ビットレートの場合に、エッジのシャープネスやブロックノイズなどが現れやすくなる。

時間圧縮

あるフレームを参照し、そのフレームとの差分によって次のフレームを描写する。ほとんどの映像は前のフレームとの共通部分が多いため、時間圧縮によって大幅にファイルサイズが小さくなる。しかし、フレーム間に依存関係があるためランダムアクセスには向いておらず、編集の際に使用することは望ましくない



時間圧縮を行なった際のフレームの種類

上述した通り、時間圧縮をした場合はフレームの種類が3種類に別れることになる。なる。I、P、Bのフレームからなる構造をGOP (Group Of Picture) と呼ぶ。

Iフレーム

1枚で完全なフレームをなしており、ランダムアクセスの基準にもなる。空間圧縮しかされていないファイルはIフレームのみで構成されている。Iフレームのみの構造をAll-Intraと呼ぶこともある。

Pフレーム

Iフレームを基準としてその変化のみをエンコードしたフレーム。

Bフレーム

直前と直後のIフレームおよびフレームおよびPフレームを参照するフレーム。Bフレーム同士は参照できない関係にあり、あるフレームを基準にしたフレームを基準にしたフレームを基準にしたフレームを‥‥‥となるループを防いでいる(画質低下の防止)。一般にBフレームの枚数が増えればファイル容量の削減につながり、それと同時に再生負荷が上がる。

IPBで圧縮された動画ファイルをノンリニア編集ソフトなどで読み込んだ場合に、あるフレームにジャンプするとソフト側がすぐについてこないのはPおよびBフレームのデコードを行なっているからである。


H.264コーデックはGOP構造を持つコーデックの中でも最も有名である。Apple ProResやAvid DNxHD・DNxHR、Gopro CineformはAll-Intraであり、編集の中間コーデックとして用いられることが多い。


よく使用されるコーデック形式とその特徴


H264 / MPEG4 Part 10 Advanced Video Coding

格納先のコンテナ :mp4,movなど

圧縮:時間圧縮と空間圧縮の両方

特徴:現在最も普及しており、スマートフォンや民生用ビデオカメラ・一眼レフ等で撮影した映像、ワンセグ放送 、Youtubeなどさまざまな場所で用いられている。 画質に対してのファイルサイズが非常に小さく圧縮効率が高い

H265 / MPEG High Efficiency Video Coding

格納先のコンテナ:mp4,mkvなど

圧縮:時間圧縮と空間圧縮の両方

特徴:h.264の後継として開発されており、 h.264の約二倍の圧縮効率を誇る。比較的新しい年式の iPhoneのビデオや Netflix などで使用されている。現状の課題として、エンコーダの負荷がかかる(デコーダの負荷は h.264と大差ない )ことやパテントフリーでないことが挙げられる。


Apple ProRes

格納先のコンテナ:mov

圧縮:空間圧縮のみ

特徴:appleにより開発されたポストプロダクション用のコーデック。品質が高くさまざまな解像度や色深度をサポートしている。その一例を以下に示す。

1. ProRes 4444

4:4:4:4 イメージソース (アルファチャンネルを含む ) 向けの高品質な形式 。RGB各チャンネル 12ビット、アルファは 16ビットまでサポートされており、 視覚的にオリジナルの素材と区別がつかないほどと言われているコーデック。モーショングラフィックスやCGコンポジットの保存・交換に用いられ 、デコードとエンコードを繰り返してもほとんど劣化しない 。

2. ProRes 4444 XQ

1よりさらに高品質な形式。

3. ProRes 422 HQ

4:2:2 イメージソース向けで ポストプロダクション業界で広く使われている。 10 ビットのフルワイドの 4:2:2 ビデオソースをサポートしており 、デコードと再エンコードを繰り返しても視覚的にロスレスである 。

4. ProRes 422

視覚的には3とほぼ同じ品質だが 66%までデータレートが落ちている。

ほかにもProRes 422LT ProRes 422 Proxyなどがある。


GoPro Cineform

格納先のコンテナ:mov,mp4

圧縮:空間圧縮のみ

特徴:Windows環境と Mac環境の両方で使用できる中間コーデックがほとんどない問題を解決すべく開発された 。 8K対応やアルファチャンネル対応などもしている。

MPEG2 VIDEO

格納先のコンテナ:ts,m2t,m2ts

圧縮:時間圧縮と空間圧縮の両方

特徴:地デジやBS放送、放送、Blu-rayなどに使用されている。


映像のカラーモード


あるコーデックが「色」を表現する方法にはいくつか種類がある。

RGB

赤・緑・青の三原色を記録するモード。ブラウン管テレビやLCDはRGBで表現されている。画面録画や CG・モーショングラフィックスなどでよく使用される。

YUV / YCbCr / YPbPr

映像をルミナンス(輝度)クロマ (色差)の二つの情報に分けて管理するモード。人間の知覚の優先度は  輝度情報>色情報 であるため、この方法によって輝度情報により多くの情報を割り当て、さらなるデータ容量の削減が望める。RGBと相互変換可能であるが、完全な変換はできず丸め誤差が生じる。

CMYK

印刷業界でよく使用される。


映像の色深度


色の精度にかかわり、精度が高いほど再現性が高くなる。

8ビットインデックスカラー

あらかじめ決められた2の 8乗 = 256色のカラーコードの中からふさわしい色を各ピクセルに割り当てる。現在ではほとんど使われない。gif画像では使われている。

8ビット/チャンネルカラー

最も良く用いられており、テレビ放送やストリーミングサービスにも使われている。 RGBそれぞれのチャンネルに 8bit = 256階調が割り当てられている。アルファを含む場合もある。

10ビット/チャンネルカラー

上述の割り当てが10bit = 1024階調になったもので、単純に色の精度が4倍になる。放送用機器の収録などでよく用いられる。

16ビット/チャンネルカラー

説明は省く。CGのコンポジットなどで。


カラーサンプリング・クロマサブサンプリング

YUVのカラーモードにおいてサポートされる。 A : B : Cの形で表される。 Aはルミナンス値のサンプル数。ここにはほぼ確実に4が入る。 Bは奇数行、 Cは偶数行の色のサンプル数を表す。圧縮を行う目的から、数字の大きさは A>B,Cになる。

画像1

(Wikipedia:Chroma subsampling からお借りしました)

4:4:4

サブサンプリングが行われない形式。RGBは 4:4:4YUVの一種と見做すこともできる。

4:2:2

放送用のビデオ機器などの収録によく用いられる。

4:2:0

おそらく現在最も使われている方式。テレビ放送やWeb配信、ストリーミングサービス、スマートフォンや民生用カメラのビデオ記録に用いられている。

この他に4:1:1、4:4:0なども存在する。


(余談:4Kダウンコンバートで画質があがるメカニズム)

(3840*2160 4:2:0 8bitのソースについて考える 。 このソースでは 2*2画素につき4つの輝度サンプルと 1つの色サンプルがある。これを 1920*1080に適切な方法でダウンコンバートすると、変換後のソースは 2*2画素につき 4つの輝度サンプルと 4つの色サンプルを持つことになる。 また、2*2画素の 8ビットから 1画素の10ビットへの変換も行うことができる。結果的に、4:2:0 8bitの4K映像をダウンコンバートすることで擬似的な 4:4:4 10bit の2K映像が得られる。

ほとんどのビデオカメラ・一眼レフ・スマートフォンでは4Kも 2Kも 4:2:0で記録されることが多いため、上述のようなダウンコンバートによって画質が上がることが多い。また、センサーノイズが見た目に小さくなることも画質向上を感じる一因である。)


インターレースとプログレッシブ

一秒間に描画が切り替わる回数をフレームレート(単位: fps)と言う。

映像ファイルにはインターレース方式とプログレシッブ方式の二種類が存在する。一般に

インターレース→テレビ放送やそれにまつわる録画機器など

プログレッシブ→それ以外

という使われ方をしている。fpsや解像度のうしろに piとつけて判別されることが多い。 (例: 60i 60 fpsのインターレース 、 1080p 1920*1080ピクセルのプログレッシブ )

プログレッシブ方式は、1フレーム上の走査線を上から順に描写する

インターレース方式では1フレームが 2つのフィールドで構成されており、一方では奇数行の走査線もう一方では偶数行の走査線が描画されている。 このフィールドを半分ずつ切り替えることによって描画を行う。

インターレース解除の際には、片方のフィールドを破棄する・二つのフィールドを合成する・ないフィールドを補完するなどさまざまな手段をとる。



(補足説明:インターレース方式はブラウン管テレビに由来している。当時のブラウン管テレビでプログレッシブ方式を用いようとした場合、技術的な限界で一秒間に走査線を上から下まで順に描画し切ることができなかった。そのため、奇数行と偶数行に分けて描画することで対応した。現在ではプログレッシブが主流となっているが、大幅な設備変更をすることが困難なため放送業界ではいまだに用いられている。 )




ビットレート

Mbpsなどの単位で表され 、 数字が 大きいほど画質がよくなる傾向にある。動画エンコードの際にはビットレートが一定である CBR (Constant Bit Rate)と可変である VBR (Variable Bit Rate) どちらかの方法でエンコードする。リアルタイムの記録・配信やファイルサイズに余裕が持てる時は CBR、ファイルサイズをギリギリまで切り詰めたい時は VBRを用いるといい。

エンコードの際、ビットレートには制限を設ける。

平均制限

映像ファイル全体でのビットレートの平均値の目標を指定してエンコードする。

バッファ制限

任意のバッファ区間内のビットレートが指定した目標値になるようにエンコードする。 Webストリーミングやカメラの記録などリアルタイムでの運用にはこれが用いられる。 CBRの場合はこの方式になる。

ピーク制限

ビットレートの最大値の目標を指定してエンコードする。あくまで最大値であるためエンコーダの判断によっては最大ビットレート = 指定した値にならない場合もある。

品質制限

コーデックに規定されている品質レベルを指定してエンコードする。ビットレートの目標値は設定しない。


VBRの一種である ABR(Average Bit Rate)は上述の制限を組み合わせてエンコードする。この際、 passというものが存在する。

シングルパス

映像の複雑さを前から順に予測しながらビットレートを割り当てる。予測が外れた場合、その部分の画質が著しく落ちる。 (例:画面全体が切り替わる瞬間 ) マルチパスに比べ処理は高速である。

マルチパス / Nパス

映像をN-1回分析し、その結果に基づいてビットレート を割り当てる。シングルパスに比べ、時間は N倍ほどかかるが品質の向上が見込まれる。一般に 2~3回でピークに達し、それ以上はかかる時間に比べて品質はほとんど向上しなくなる。



参考

https://www.cined.com/jp/chroma-subsampling/

https://www.nfaj.go.jp/fc/wp-content/uploads/sites/5/2016/10/NFC_BDCh26report_IMAGICA_Formt.pdf

https://www.adobe.com/jp/motion/pdfs/Compression_Primer.pdf











この記事が気に入ったらサポートをしてみませんか?