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

TOP
TOP > MPEGラボ > 第9回

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

2002年4月号掲載

第9回 人気のMPEG-2エンコーダ「MN85560」の内部を探る

前回に引き続き、MPEG-2について少し詳しく見ていく。今回は、MPEG-2エンコーダの内部を解説する。題材として、松下電器産業のMPEG-2ビデオエンコーダチップ「MN85560」を使う。

■MPEG-2エンコーダの内部構造は複雑

図1にMPEG-2エンコーダの大まかな構成図を示す。大きな構成要素は、ビデオエンコーダ、オーディオエンコーダ、マルチプレクサの3種類だ。

ビデオエンコーダ、オーディオエンコーダは、文字通りビデオ/オーディオ信号を圧縮する。マルチプレクサは、圧縮されたビデオ/オーディオのデータを1つのデータとして合成する。

MPEG-2規格では、エンコードの方法は規定していない。このため、エンコーダは各社が工夫を凝らし、画質を上げたり、価格や消費電力を下げたりする余地が大きい。図1のビデオエンコーダ内部構成は一般的なもので、詳細はメーカーによって多少異なる。

MPEG-2エンコーダがDVなどと違って複雑な構成となるのは、そのデータ構造に原因がある。前号でも説明した通り、MPEG-2では、各フレームの内容が前後のフレームの内容と大きく変化しないという映像の性質を利用して冗長量を減らし圧縮する。簡単に言うと、画面上の同じ位置の画像について、現在のフレームと過去のフレームの差分情報のみを記録することで、圧縮率を高めている。

圧縮率をさらに高めるために、画面に映っている物体が上下左右に動いた場合、エンコーダはその動きベクトルも記録している。このような情報を活用することで、画面が左右に移動したり、被写体が動いたりする場合にデータ量を減らすことができ、画質も改善できる。多くの映像では、映っている何かが動くことになるので、この動きベクトルの検出がうまくできるかどうかが、画質の良しあしを決める条件の一つとなる。

最も有効な方法は全画面を細かくスキャンすることだが、処理量が非常に多くなり、LSIも大規模になってしまう。また、元の映像をフレーム単位で見ると、多くの場合、いきなり大きく動かずに少しずつ動いていく。このため、広く浅くスキャンするより、狭く深くスキャンした方が良い場合もある。

■松下の人気チップ「MN85560」の中身

松下電器産業のワンチップMPEG-2ビデオエンコーダLSIであるMN85560は、カノープスなどのエンコーダボードに搭載されているので、名前を聞く機会も多い。このLSIは、従来高価で業務用にしか使えなかったMPEG-2エンコーダを民生価格で実現するために開発され、1998年に発表されたものだ。消費電力が少ないことも特徴の一つ。発表当時、放熱器なしで動作するという話に、驚いた記憶がある。

以下、同社の資料を元に、このLSIの内部構造を簡単に紹介し、実際のエンコーダの中身を説明したい。

MN85560は、550万個のトランジスターを約1cm角のチップに集積したLSIだ。1.8Vで動作させることでMPEG-2のエンコード処理を0.95Wという低い消費電力で実現している。図2にMN85560内部のブロックダイアグラムを示す。図を見てわかるように、内部にRISC CPUを搭載している。これは、この手の画像処理用に特化して設計されたものだ。動きベクトル検出などの演算量の大きい処理には専用の回路が用意されており、それらの回路の制御やデータの受け渡しなどをRISC CPUが担当する。

では、順を追ってどのようにエンコードが進むのかを見ていこう。まず、このLSIの外でデジタル信号に変換されたビデオ信号がLSIに入力される。入力された画像は色信号や解像度を変換し圧縮前の非圧縮画像となる。この入力画像と、その前後の入力画像を動きベクトル検出回路で比較し、動きベクトルを検出する。このLSIでは、動きベクトル検出が2段階になっていることが特徴だ。最初に少し荒い検出を行い、当たりを付けたところで、細かく検出し直すという方法だ。これによって、必要な回路の数を減らすことができ、消費電力も低く抑えることができる。

動きベクトルの検出結果を使い、その前後のフレームのエンコード結果の画像を部分的に移動する。この結果と元画像の差分をまず取り出す。取り出した差分情報はDCT圧縮される。DCT圧縮した結果に対し、量子化と呼ばれる処理を行うことで、高周波成分(画像上の細かい部分)を減らす。細かな部分は情報量も多いため、高周波成分を減らすことで情報量をぐっと減らすことができるわけだ。DCT圧縮と量子化については、基本的にJPEGと同じ仕組みだ。

こうやってできた圧縮データは、可変長符号化(VLC)回路で、さらに冗長度が減らされる。これでようやくMPEGビデオデータができる。

また、この圧縮されたデータは、後で差分を取るための比較用データとして再利用される。このため、MPEGデコーダと同様の回路で逆量子化、逆DCT圧縮の処理を行う。

MN85560では、上記の処理を縦横16ピクセル単位のマクロブロック単位で実行する。マクロブロック単位で多段階の処理が複数平行して実行されるパイプライン方式を取ることで、少ない回路で多くの処理をこなしている。

上で「前後のフレーム」と書いたが、「B」ピクチャーを作成するため、MPEG-2エンコード上は「前(過去)のフレーム」との比較だけでなく、「後(未来)のフレーム」との比較も必要だ。このため、入力された画像の順に動きベクトル検出やそれに続く圧縮処理をすれば良いわけでなく、フレーム順を入れ替える処理を行う。このために外付けのメモリを使い、画像を一時的に記憶する。

これらの一連の処理は内蔵のRISC CPUのマイクロコードで実行される。マイクロコードを切り替えるだけで、類似の異なる処理、つまり各種MPEG-2やMPEG-1圧縮を実現している。

■レートコントロールで決めたビットレートにする

MPEGビデオのエンコード処理で、もう一つ重要なのはレートコントロールと呼ばれる処理だ。これは、出力ビットレートを一定に保つための処理のことで、デコーダを破綻させないためには重要だ。MPEG-2デコーダはメモリを持ち、デコードすべきMPEGデータを一時的に蓄積しつつデコード処理を進める。デコーダには、MPEGデータの持つビットレートでMPEGデータが入力される。MPEGデータは、I、P、Bと呼ばれるピクチャーの形式でデータサイズが大きく異なる。また、複雑で動きが激しい映像は多くのデータ量を必要とするし、逆に静止画に近い映像は少ないデータ量で済む。このため、同じP、Bピクチャーでもサイズがダイナミックに変動する。

ただし、デコーダの持つメモリサイズは一定のため、デコーダのメモリがあふれたり、逆にデコード処理上必要なデータが不足しないようにする必要がある。PC上のソフトウェアMPEGデコーダは、PCのメモリをふんだんに使えるため、メモリの容量オーバーには比較的寛容だが、データ不足の場合はどうにもならない。

このため、デコーダの処理を考えつつ、決められたビットレートに収まるように、量子化処理などを制御するレートコントロール機能が必要となる。レートコントロールがきちんとできていないと、スムーズに再生できないMPEGファイルができてしまう。

以上で見てきたように、MPEG-2ビデオのエンコード処理はかなり複雑で、かついろいろな工夫が必要な処理である。

●代表的なMPEG-2ビデオエンコーダの内部構造

図1 MPEG-2規格ではエンコードの方法は規定していないので、細かな内部構造は各社ごとに多少異なる。

●MN85560内部のブロックダイアグラム

図2 動きベクトル検出など演算量の大きい処理は、専用の回路が用意されており、それらの回路の制御やデータ受け渡しなどをRISC CPUが担当する。

 

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