私とマルチメディアVIDEO-ITを取り巻く市場と技術MXFラボ

TOP
TOP > MPEGラボ > 第10回

WinPCLabs これでわかった!動画の秘密“MPEG”

2002年5月号掲載

第10回 問題のあるソフトが多いMPEGのバッファ管理

今回は、MPEG-2などMPEG規格で規定されているバッファ管理の仕組みについて解説する。近ごろは安価なエンコーダが発売されているが、それらの中のいくつかではバッファ管理が正しくない、つまりMPEG規格に沿っていないものがある。以下、バッファ管理とは何か、管理が正しくないとどういった問題が発生するのかを説明しよう。

■MPEGにおけるバッファ管理とは何か

ビデオ信号の特性の1つは前後のフレームが似通っていることだ。MPEGでは、普通この特性を利用して、フレーム間の差分をとることで圧縮率を高めている。このため、伸張(デコード)するためには、前後のフレームの情報も必要となる。あるフレームをデコードするためには、過去のフレームの画像だけでなく、未来のフレームの画像も必要となるわけだ。このテクニックを使うと、先にデコードすべき未来のフレームのデータが、データ上は先に出現する。つまり、データ上のフレームの並びは実際の時間軸と必ずしも一致しない。

一方、MPEGデコーダ上のメモリサイズは限定されており、不要になったフレームの情報は破棄しなくてはならない。各フレームのデータサイズは可変なので、うっかりすると、メモリ上のデータが余ったり不足したりすることになる。これを避けるためのメカニズムがバッファ管理と呼ばれる仕組みだ。

■MPEGのバッファを管理する仕組み

MPEGのバッファ管理はかなり複雑な処理なため、安価なエンコーダでは対応していないということもある。こういったエンコーダが作成したファイルは、MPEG規格から外れたファイルということになる。将来に向けて保存しておくような使い方の場合、バッファ管理が正しくないとスムーズに再生できなくなる可能性がある。

多くのMPEGエンコーダでは、入力されたビデオ信号は、通常、Iフレーム、Pフレーム、Bフレームの3種類いずれかに圧縮される。Iフレームは、それだけで完結しており、Iフレームの情報だけで元のフレーム画像を復元できる。Pフレームは、該当フレームの画像とその前のIフレームの画像との差分情報だ。Pフレームをデコードするためには、その前のIフレームの情報が必要となる。Bフレームは、前だけでなく後のフレームとの差分も使って圧縮されたものだ。Bフレームをデコードするためには、前後のIフレーム、Pフレームの情報が必要となる。

このため表示順に並べると、
B、B、I、B、B、P、B、B、P
となる場合、ファイルや回線上のデータでは、
I、B、B、P、B、B、P、B、B
といった順序で並んでおり、この順番でデコードし、表示時に順序を並び替えるといった複雑な処理を行う。

固定ビットレートで圧縮した場合、毎秒一定量の圧縮データがデコーダに入力される。エンコーダは、圧縮データのフレームごとのデータサイズは可変であるのにかかわらず、毎秒のデータ量は一定となるように圧縮しなくてはならない。

MPEGデコーダ上のメモリーは通常数MB程度に限定される。PC上のソフトウェア処理でデコードする場合は、もっと多くのメモリーを使うことができるが、衛星デジタル放送受信機などのセットトップボックスでは、コスト上の制約から多くのメモリーを積むことができない。

デコーダ上のメモリーの観点から整理すると、ポイントは以下のようになる。

  1. デコーダのメモリ量は有限。
  2. 圧縮ビットレートに従い、連続して次々と圧縮データが入力される。
  3. 各フレームのデータサイズは可変。
  4. そのフレームのデータが全部メモリーに入らないとデコード処理に入れない(規格上、単純なモデルとなっている)。

デコーダのメモリー上のデータ量の変化する様子をグラフで表したものが図1だ。右上がりの直線が、圧縮データがたまっていく状況を示す。直線が垂直に落ちるタイミングは、あるフレームがデコードされるタイミングだ。Bフレームはデータ量が少ないので、デコード後、破棄してもさほどメモリが空かない。一方、Iフレームはデータ量が多いため、デコード後に破棄すると、かなりメモリーが空く。

MPEGエンコーダは、エンコード時にデコーダのこれらの制約を考慮して、圧縮データを出力しなくてはらないことがMPEG規格で規定されている。

上記の例では、ビデオだけの議論だが、実際はオーディオも加わり、結構複雑になる。MPEGオーディオはビデオと違い、単位時間当たりのデータサイズが一定なのでバッファ管理は比較的簡単だ。ただし、通常のMPEGデータでは、ビデオとオーディオを1つのデータとして扱うため、ビデオとオーディオを交互に格納している。従って、ビデオ、オーディオともデータとしては連続せずに、ところどころ飛ぶ形となる。とはいえ、デコード結果として映像や音声が飛んでしまうわけにはいかない。デコーダのメモリー上でデコードが途切れないように、うまく工夫する必要がある。

■解析ツールで見るバッファ管理の実際

以上のように、バッファ管理は、かなり複雑な決まりで、実際にきちんと処理するのは大変な仕事だ。それでは、バッファ管理の決まりを守らなかったら、どうなるのか?

単純には、バッファ上のデータがアンダーフロー(不足状態)する場合と、オーバーフロー(あふれる状態)する場合の2通りがある。MPEG-2を再生する場合、1秒間に30コマを途切れずにデコードしなくてはならない。アンダーフローする場合、データが不足するため、そこでデコードが一時的に止まってしまい、ぎくしゃくした動きになる。

オーバーフローすると、データがあふれて失われてしまう。つまり再生されないフレームが存在することになり、この場合も、ぎくしゃくした動きになる。

バッファ管理の決まりを守っていないMPEGファイルをMPEG解析ツール「MProbe」を使って解析した例を図2に示す。データがメモリーからあふれてしまい、デコードがきちんと行われていない。逆に図3は、バッファ管理のきまりを守っている良い例だ。MProbeに関しては図4を参照してほしい。

バッファ管理を守っていないと、たまたま現在使っているデコーダではスムーズにデコードできたとしても、将来にわたってきちんと再生できる保証はない。MPEGは国際規格なので、ツールやメーカーが変わることはあっても、データフォーマットしては変わらない。そのため、残しておきたい映像を保存しておく用途などに適している。この特徴を生かすには、バッファ管理に正しく対処しているMPEGエンコーダを選択したい。

●デコーダ上にあるメモリー内の圧縮データ量変化

図1 一定のビットレートでデータが増え、1画面分のフレームのデコードが完了するとデータが減る、という動きを繰り返すため、鋸状のグラフになる。

●バッファ管理ができていない例

図2 海外製のソフトエンコーダのバッファ管理を解析した結果だ。オーバーフローのためメモリーに入らなかったフレームのデータはデコードされないため、コマ落ちの原因となる。

●バッファ管理ができている例

図3 データ量の変動はメモリーの範囲内に収まっており、正常な再生ができている。使用している ソフトは「Cinema Craft Encoder」(カスタムテクノロジー)。

●今回のバッファ管理解析に使った「MProbe」

図4 業務用のMPEG解析ツールで、300万円以上もする高価なソフトだが、MPEG規格違反のチェックには便利。図は動きベクトルを画像に重ねて示しているところ。

 

(文/ 竹松 昇、(株)朋栄アイ・ビー・イー) ※編集の関係上、雑誌掲載内容と少し異なる個所があります。
このテーマを活用する 解析分析ツールの利用
製品・システム・技術に関するお問い合わせ