*

GOP(Group of Picture)について ~ I・P・Bフレームとは

   

以前から私は「Bフレームが増えれば圧縮率がどうこう」だの、

Iフレームが増えれば画質がどうこう」だのと言ってきました。

 

さて、言うは良いけれども果たしてIフレームだのBフレームだの、

果てにはPフレームだのGOPがどうだのとは一体何の事でしょうか。

 

そう言われると思ってこの記事を書きました。完全に後手後手です。

よって今回はI・P・Bフレームと、その一連の塊であるGOP(Group of Picture)のお話です。

 

GOPとは画像圧縮技術の1つである

唐突ですが、私の趣味はソロツーリングです。

実家に居た頃は車派だったので、家族を連れてよくドライブに行っていました。

買い物と自然観察が好きだったので、植物園に連れて行く事も度々ありました。

 

さて、あなたが植物園を運営するとしたらどうしますか?

少しだけ考えてください。

なるほど、その回答が正解か間違いか、運営的にどうかについては何も申しません。

あなたが何を思ったかは私には絶対に感知できませんが、

1つだけ、これだけはしないだろうと確信できる事があります。

 

それは『全く同じ物は要らない』です。

 

間引くという概念

動画圧縮も同じで、『全く同じ物』は送りません

直前に送った物をそのまま使い回せばいいのですから、当然です。

 

このように、画像圧縮技術の根底には『間引く』という概念があります。

 

では、何をどう間引けば良い画質が得られるのか

どうやって高画質と高圧縮を両立しているのか。

 

そのためにGOP(Group of Picture)の中身である、

I・P・Bフレームについて解説していきましょう。

 

Iフレーム(Intra Picture)

全ての基準となるフレーム画像です。

 

語弊を承知でこう言いましょう。

ただのJPEG画像である、と。

 

よって、あれこれと小難しい圧縮は行われていません。

その為、画質は他と比べて格段に良いのですが、

データ量は膨大です。何せ小難しい圧縮をしてませんから

 

Pフレーム(Predictive Picture)

PフレームとはIフレームからデータを間引いたフレームです。

MPEG圧縮系列、H.264圧縮の要の1つです。

 

動画はパラパラ漫画であると以前説明しました。

パラパラ漫画である以上、複数枚の画像で構成されています。

 

しかし、直前直後のフレームは似通った物で構成されています

フレームレートの低い動画であれば、全く同じ画像が連続する事もあります

 

全く同じ画像が連続するとはどういう事か。

相変わらずのウマウマですが、この画像を見てみましょう。

 

ウマウマ 50FPS

ウマウマ 50FPS

 

これを60FPSで、各フレームごとに切り出してみましょう。

(※GIFから切り出していません。元となったFLV動画から切り出しています)

 

60FPSで切り出してみた

60FPSで切り出してみた(クリックで拡大)

 

このように、上記の動画は約45枚のフレームで構成されているのですが、

もうちょっとよく見てみるましょう。

明らかにダブっているフレームがあるはずです。

 

1フレーム目のダブりフレーム

1フレーム目のダブりフレーム

 

さて、圧縮の話に戻ります。

 

上記の通り、別の画像になるのは3フレーム目と4フレーム目です。

この2枚を重ね合わせてみました。

 

ウマウマ 差の絶対値重ね

ウマウマ 差の絶対値重ね

 

えらくキモイ重ね方をしたな、とお思いでしょう。

これは『差の絶対値』という重ね方で、全く同じ部分は黒くなる、という重ね方です。

そう、全く同じ部分が、3フレーム目と4フレーム目には、こんなにも存在します

 

もうお分かりですね。

この黒い部分は3フレーム目と4フレーム目では共通であり、送る必要の無いデータです。

よって、ここを間引きます

 

という事は、差分であるデータを送って3フレーム目のデータに重ねれば

ほぼ正確に4フレーム目を作る事が出来ます

 

ウマウマ 4フレーム目を差の絶対値で黒かった部分を除去

ウマウマ 4フレーム目を差の絶対値で黒かった部分を除去

 

この差分データの事をPフレームと言います

差分データなので、Iフレームより大幅にデータ量を削減できます

 

PフレームはIフレームか、直前に作成されたPフレームを元に作成します。

この場合だと、1フレーム目(≒3フレーム目)がIフレーム

4フレーム目を作る差分がPフレームと言えます。

 

よってIフレームが少なすぎると差分データが作れず、動画は破綻します。

また、Iフレームが多すぎるとPフレーム成分が減り、圧縮率は落ち、ビットレートを圧迫します。

 

Bフレーム(Bidirectionally Predictive Picture)

PフレームはIフレームか、直前に作られたPフレームからしか作れません。

つまり、過去のフレームから作成する機能です。

 

上記の例で言うと、Iフレームは1フレーム目です。

作成したPフレームは4フレーム目です。

では、間の2~3フレーム目はどうするのか

 

結論から言うと、Pフレーム同様作り上げる事で作成します。

 

そして忘れないでいただきたいのが、

Iフレーム・Pフレーム・Bフレームの3種類を組み合わせたひと塊を、

GOP(Group of Picture)』と呼びます。

 

そう、これらはグループなんです。単体で機能するものではありません

よってこれらは、単体のフレームで送受信する物でもありません

 

さて、話は変わりますが、

もう1度ウマウマの分解画像一覧を見てみましょう。

 

ウマウマ 変化したフレーム

ウマウマ 変化したフレーム

 

青くなっているのが変化したフレームです。

1フレーム目は何も参照できないので、必然的にIフレームになります。

 

4・8・12・16フレーム目は変化したので、

Pフレームで差分を送信する事もできますし、

どこかで新しくIフレームにする事もできます。

 

さて、ここまでで動画変換エンコードの上で、

1・4・8・12・16フレームは作成し終わりました。

しかし当然ながらまだ送信はしていません

 

そしてGOPはグループだと言いました。

Pフレームは過去のフレームを参考に作るしか出来ませんが、

間を埋めるフレーム未来のPフレームも考慮して作成する事が出来ます

未来のデータを利用できるのは、まだ送信していないからです。

 

このフレームをBフレームと言います。

 

今回は間を埋めるフレームは直前と全く同じフレームなので

結論として、データ量はほぼ0になります

なぜなら、直前のフレームを再利用するからです。

 

Bフレームが圧倒的な圧縮率と高画質を誇るのはこれが理由です。

そして、Bフレームがせいぜい3枚くらいまでしか連続しない理由も、

上記の分解画像のような理由です。

 

Bフレームを3D動画で使うと?

 

しかしこれではBフレームの解説としてはいささか横暴なので、

仮に3Dのゲームを60FPSで配信するとしましょう。

 

ストリーミング配信では未来に何が待っているかは誰にも分かりません

しかし、エンコード上では、未来のデータを参考に出来ない訳ではありません

それはやはりGOP単位で処理しているから、データはまだ送られていないからです。

 

配信にラグを感じた事は、配信者なら誰でもあるでしょう。

ニコ生で配信のラグが最も少ないのは、およそ3秒程度です。

つまり、GOPを作成して送信、受信して元に戻すまでの猶予3秒間もあります。

 

60FPS配信をしていて、30フレームを1度に処理できるだけPCの性能があるなら、

  1. 直前の0.5秒間のデータ(30フレーム)を録画する
  2. 0.5秒間のデータ(30フレーム)からIフレームを先頭に、Pフレームを必要なだけ作成する
  3. 動き予測アルゴリズム等で、I・Pフレームの間を埋めるBフレームを作成する
  4. 作成したGOPを送信する

と、このようにGOPとして作り、送信できるでしょう。

 

3Dゲームのような変化の富む映像でも、

Bフレームはやはり過去と未来にあるPフレームを参考に作成する事ができます。

設定によっては、直前直後のBフレーム自身も参考にして作成できます。

スクロールがメインの2D映像でも、原理は同じです。

 

Bフレームを広く取れば取るほど高画質・高圧縮を実現できますが、

当然ながらBフレームの作成には沢山のフレームを考慮しなければならず、

マシンパワーをめちゃくちゃ使います

 

ref(フレーム参照距離)が、

x264プリセットでBフレームを作成・考慮する範囲設定になります。

広ければ広いほど高負荷高画質で、マシンパワーを消費します。

 

GOPの弊害

以前、Iフレームの間隔を広く取ると、

シークバーがその間隔でしか使えなくなる、という話もしました。

これもまた、Iフレームを基準としてGOPが作成されるからです。

Iフレームが読み込まれないと、もっと言えばGOP毎にしかデータを読み込めないのです。

 


 

 

参考になりましたでしょうか。

あなたの配信がまた少し良くなる事を応援しています。

 -NLE, ソフトウェア設定, 画質, 配信, , ,

  関連記事

クロマキー RGB

NLE画面キャプチャーの設定項目の詳細と解説

NLEでキャプチャーした画面に対して、 設定ボタンや右クリックすると、 配置や大きさ以外にも、 透過

presetsより設定ファイル

x264プリセットの弄り方 ~ 重くするから軽くするまで その1

プリセットは選ぶだけでなく作り出せるもの、と、 自ら作ってみたいと興味を持たれた方がいるかもしれませ

EyeCatch

NLEのインストールとプリセットの追加導入方法・改

NLEをインストールするのと NLEにプリセットを追加する方法をまとめ直しました 旧追加方法の記事は

ツール → 自動枠取り

NLEとアンコちゃんだけで自動枠取り&自動枠移動

先日、知人の放送で、 “アンコちゃんでNLEの放送停止、放送開始ができないか”の相談に乗

WaveとMP3のビットレート差

ビットレートの話 ~ そのデータは何バイト?

Bit(ビット)とByte(バイト) 少しだけ算数の話をしましょう。 何、数学と言うほど難しくはあり

I catch140713

レトロゲー用 NLEプリセットで30FPS対応超画質を目指してみた

まずは相変わらず結果からどうぞ。   <a href=”http://w

Wave波形

サンプルレートとビット深度について ~ 音を刻む仕組み

音は細切れに刻まれる 何かを参考にしていながら配信の設定をしていると、 44100Hzや48000H

設定ファイルへ貼り付け

【NLEプリセット導入方法】 ニコ生ビットレート内の限界まで画質を上げてみた

改稿版 まずは結果からどうぞ。 ※Vorcaloidが苦手な方はご遠慮ください。 &lt;a

VoiceloidTalkPlus 導入後

棒読みちゃんをVoiceloidTalkPlusでVoiceloid+と連携させる

Voiceloidを生放送のコメント読み上げに使うのに、 たみおれ通信や棒読みちゃんのプラグイン連携

アマレコTV 表示サイズ 75%

アマレコTVとNLEで画面キャプチャーする時の小技と設定

またまた知人の配信設定での付き合いで、 当初の目的とは違ったけれど役に立ったっぽい小技の備忘録です。

  Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Wave波形
MP3とAACって何が違うのさ

巷に溢れるMP3、あんまり溢れてないけど確実に浸透しているAACの違いとか歴史をザックリとしたお話

ニコニコ生放送モバイルアイキャッチ
スマートフォンからニコニコ生放送を始める方法(iPhone・Android)

iPhone5(iOS)とXperia Z3(AndroidOS)、そしてniconico公式アプリを使ってニコニコ生放送をするための手順のお話

Xperia Z3 SliverGreen
通話機能の無い格安SIMカードとSIMフリースマホで通話機能を手に入れた成功と失敗

去る2014年9月にお風呂でそのまま使える携帯の1つとして SONYのXperia Z3 Unloc

EyeCatch
NLEのインストールとプリセットの追加導入方法・改

NLEをインストールするのと NLEにプリセットを追加する方法をまとめ直しました 旧追加方法の記事は

OBS
Open Broadcaster Softwareをインストールしてみた

噂のOBSをインストールしてみました。 【ニコニコ動画】Open Broadcaster Softw