(57)【要約】【課題】画質の急峻な劣化を抑え、ＶＢＶバッファのオーバーフローを回避する。【解決手段】ＭＰＥＧエンコーダは、量子化スケールを決定する符号量制御部を備えている。符号量制御部は、１ピクチャ毎に、そのピクチャに対する割当可能な符号量を算出し、その割当符号量に基づき量子化スケールを決定している。符号量制御部は、１ピクチャ毎に割当符号量を算出する際に、ＶＢＶバッファがオーバーフローしないように、ＶＢＶバッファ使用量を考慮した最大の割当符号量（最大割当符号量Ｐｍａｘ）を算出する（ステップＳＴ６）。符号量制御部は、ＶＢＲ又はＣＢＲのそれぞれのアルゴリズムで各ピクチャへの符号割当量を決定し（ステップＳＴ７，９）、その結果、最大割当符号量Ｐｍａｘを超える場合には、その値の上限をＰｍａｘでクリップする。【選択図】図３
2005073063.tif 000002
【特許請求の範囲】
【請求項１】
動画像信号を符号化して動画像データストリームを生成する動画像符号化装置において、
上記動画像データストリームの符号量に基づき復号器の入力バッファの使用量（ＶＢＶバッファ使用量）を仮想的に算出し、上記ＶＢＶバッファ使用量に基づき割り当てが可能な最大の符号量（最大割当符号量）をピクチャ毎に算出し、当該最大割当符号量に基づきピクチャに対する割り当て符号量を定める符号量制御手段と、
上記割り当て符号量に基づきピクチャ毎に符号化を行って、上記動画像データストリームを生成する符号化手段とを備えること
を特徴とする動画像符号化装置。
【請求項２】
上記符号量制御手段は、任意のピクチャを符号化する直前での上記ＶＢＶバッファ使用量に基づきその任意のピクチャの最大割当符号量を算出し、当該最大割当符号量をその任意のピクチャに対して割り当てる符号量の上限とすること
を特徴とする請求項１記載の動画像符号化装置。
【請求項３】
上記符号量制御手段は、
任意のピクチャを符号化する直前でのＶＢＶバッファ使用量を変数として、その任意のピクチャを符号化した直後のＶＢＶバッファ使用量を算出する関数（ＶＢＶ関数）を設定しておき、当該ＶＢＶ関数に基づき算出されたＶＢＶバッファ使用量に基づきその任意のピクチャの最大割当符号量を算出すること
を特徴とする請求項２記載の動画像符号化装置。
【請求項４】
任意のピクチャを符号化する直前での上記ＶＢＶバッファ使用量をＢｘとし、その任意のピクチャを符号化した直後の上記ＶＢＶバッファ予定使用量をＢｙとし、ＶＢＶバッファ使用量の最大値をＢＭＡＸとし、復号器の入力バッファへの仮想的な転送ビットレートをＲ、上記動画像信号のピクチャ周期をＴとしたとき、上記ＶＢＶ関数（Ｂｙ＝ＶＢＶ（Ｂｘ））は、以下の条件１、条件２及び条件３を満たすこと
を特徴とする請求項３記載の動画像符号化装置。
条件１：Ｂｙ＝ＶＢＶ（Ｂｘ）は、Ｂｘの区間［０,ＢＭＡＸ］で、Ｂｘに対する単調増加関数である。
条件２：関数｛Ｂｙ＝Ｂｘ｝と関数｛Ｂｙ＝ＶＢＶ（Ｂｘ）-Ｒ×Ｔ｝とは、Ｂｘの区間［０,ＢＭＡＸ］ではＢｘ＝Ｂｔｈ（ただし、０＜Ｂｔｈ＜ＢＭＡＸ）で交わる。
条件３：Ｂｘ≦Ｂｔｈである場合には{ＶＢＶ（Ｂｘ）−Ｒ×Ｔ}≧Ｂｘであり、Ｂｘ＞Ｂｔｈである場合には{ＶＢＶ（Ｂｘ）−Ｒ×Ｔ}＜Ｂｘである。
【請求項５】
上記符号量制御手段は、
上記ＶＢＶ関数により算出された任意のピクチャを符号化した直後の上記ＶＢＶバッファ使用量よりも、当該任意のピクチャを実際に符号化した後のＶＢＶバッファ使用量の方が大きい場合、当該任意のピクチャの次のピクチャに割り当てる符号量の上限を最大割当符号量から超過符号量を減算した値とすること
を特徴とする請求項２記載の動画像符号化装置。
【請求項６】
動画像信号を符号化して動画像データストリームを生成する際の符号量制御方法において、
上記動画像データストリームの符号量に基づき復号器の入力バッファの使用量（ＶＢＶバッファ使用量）を仮想的に算出し、
上記ＶＢＶバッファ使用量に基づき割り当てが可能な最大の符号量（最大割当符号量）をピクチャ毎に算出し、
当該最大割当符号量に基づきピクチャに対する割り当て符号量を定め、
上記割り当て符号量に基づき生成する動画像データストリームの符号量を制御すること
を特徴とする符号量制御方法。
【請求項７】
任意のピクチャを符号化する直前での上記ＶＢＶバッファ使用量に基づきその任意のピクチャの最大割当符号量を算出し、当該最大割当符号量をその任意のピクチャに対して割り当てる符号量の上限とすること
を特徴とする請求項６記載の符号量制御方法。
【請求項８】
任意のピクチャを符号化する直前でのＶＢＶバッファ使用量を変数として、その任意のピクチャを符号化した直後のＶＢＶバッファ使用量を算出する関数（ＶＢＶ関数）を設定しておき、当該ＶＢＶ関数に基づき算出されたＶＢＶバッファ使用量に基づきその任意のピクチャの最大割当符号量を算出すること
を特徴とする請求項７記載の符号量制御方法。
【請求項９】
任意のピクチャを符号化する直前での上記ＶＢＶバッファ使用量をＢｘとし、その任意のピクチャを符号化した直後の上記ＶＢＶバッファ予定使用量をＢｙとし、ＶＢＶバッファ使用量の最大値をＢＭＡＸとし、復号器の入力バッファへの仮想的な転送ビットレートをＲ、上記動画像信号のピクチャ周期をＴとしたとき、上記ＶＢＶ関数（Ｂｙ＝ＶＢＶ（Ｂｘ））は、以下の条件１、条件２及び条件３を満たすこと
を特徴とする請求項８記載の符号量制御方法。
条件１：Ｂｙ＝ＶＢＶ（Ｂｘ）は、Ｂｘの区間［０,ＢＭＡＸ］で、Ｂｘに対する単調増加関数である。
条件２：関数｛Ｂｙ＝Ｂｘ｝と関数｛Ｂｙ＝ＶＢＶ（Ｂｘ）-Ｒ×Ｔ｝とは、Ｂｘの区間［０,ＢＭＡＸ］ではＢｘ＝Ｂｔｈ（ただし、０＜Ｂｔｈ＜ＢＭＡＸ）で交わる。
条件３：Ｂｘ≦Ｂｔｈである場合には{ＶＢＶ（Ｂｘ）−Ｒ×Ｔ}≧Ｂｘであり、Ｂｘ＞Ｂｔｈである場合には{ＶＢＶ（Ｂｘ）−Ｒ×Ｔ}＜Ｂｘである。
【請求項１０】
上記ＶＢＶ関数により算出された任意のピクチャを符号化した直後の上記ＶＢＶバッファ使用量よりも、当該任意のピクチャを実際に符号化した後のＶＢＶバッファ使用量の方が大きい場合、当該任意のピクチャの次のピクチャに割り当てる符号量の上限を最大割当符号量から超過符号量を減算した値とすること
を特徴とする請求項７記載の符号量制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばＭＰＥＧ-２（Moving Picture Experts Group -2）やＭＰＥＧ-４（Moving Picture Experts Group -4）方式で動画像信号を圧縮符号化する動画像符号化装置、並びに、符号化された符号化ストリームの発生符号量を制御する符号量制御方法に関するものである。
【背景技術】
【０００２】
ＭＰＥＧ-２等の動画像信号のエンコーダでは、ＶＢＶ（Video Buffering Verifier   :ISO13818-2 Annex C参照。）と呼ばれる仮想バッファの監視を行いながら符号化が行われる。ＶＢＶバッファは、デコーダ側の入力バッファをエンコーダ側で仮想したバッファである。エンコーダでは、ＶＢＶバッファの使用量（ビット占有量）を監視し、このＶＢＶバッファがオーバーフロー及びアンダーフローをしないように量子化スケールを制御したり画像をスキップしたりすることにより、デコーダ側での復号処理が破綻しないような符号量のデータストリームを発生する（例えば、特許文献１、特許文献２参照。）。
【０００３】
【特許文献１】特開平１０-２３４０３７号公報
【特許文献２】特開平１０-１２６７９２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、ＭＰＥＧ-２のエンコーダのアルゴリズムの一例を定めたテストモデルがあるが（ＴＭ５：Test Model 5）、ここではＶＢＶバッファのオーバーフローを回避する手段は特に示されていない。また、特許文献１や特許文献２に示すような従来の回避技術は、ＶＢＶバッファの使用量が所定の閾値を超えたとたんに量子化スケールを大きく変えたり、画像をスキップしたりするといったように、ＶＢＶバッファの都合上で急峻にデータを欠落させる制御を行うものであり、符号化された動画像の画質が急激に変化し、劣化が目立ってしまっていた。
【０００５】
本発明は、以上のような問題を解決するものであり、画質の急峻な劣化を抑え、ＶＢＶバッファのオーバーフローを回避することができる動画像符号化装置及び符号量制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る動画像符号化装置は、動画像信号を符号化して動画像データストリームを生成する動画像符号化装置であって、動画像データストリームの符号量に基づき復号器の入力バッファの使用量（ＶＢＶバッファ使用量）を仮想的に算出し、上記ＶＢＶバッファ使用量に基づき割り当てが可能な最大の符号量（最大割当符号量）をピクチャ毎に算出し、当該最大割当符号量に基づきピクチャに対する割り当て符号量を定める符号量制御手段と、上記割り当て符号量に基づきピクチャ毎に符号化を行って、上記動画像データストリームを生成する符号化手段とを備えることを特徴とする。
【０００７】
本発明に係る符号量方法は、動画像信号を符号化して動画像データストリームを生成する際の符号量制御方法であって、上記動画像データストリームの符号量に基づき復号器の入力バッファの使用量（ＶＢＶバッファ使用量）を仮想的に算出し、上記ＶＢＶバッファ使用量に基づき割り当てが可能な最大の符号量（最大割当符号量）をピクチャ毎に算出し、当該最大割当符号量に基づきピクチャに対する割り当て符号量を定め、上記割り当て符号量に基づき生成する動画像データストリームの符号量を制御することを特徴とする。
【発明の効果】
【０００８】
本発明に係る動画像符号化装置及び符号量制御方法では、ＶＢＶバッファ使用量に基づき割り当てが可能な最大の符号量（最大割当符号量）をピクチャ毎に算出し、当該最大割当符号量に基づきピクチャに対する割り当て符号量を定めている。
【０００９】
すなわち、本発明に係る動画像符号化装置及び符号量制御方法では、ピクチャ毎に符号量割り当てを行っているので、１画面内で画質が急峻に変化することがなくなる。また、ＶＢＶバッファ使用量から一旦最大割当符号量をピクチャ毎に算出し、例えばその最大値割当符号以上の符号割り当てをピクチャに対して行わないように符号量を制御しているので、急峻なデータ欠落が発生せず、画質劣化が目立たない。
【発明を実施するための最良の形態】
【００１０】
以下、本発明を実施するための最良の形態として、本発明を適用したＭＰＥＧエンコーダについて図面を参照して詳細に説明する。
【００１１】
全体構成
図１は、本発明を適用したＭＰＥＧエンコーダの構成を示すブロック図である。
【００１２】
図１に示すＭＰＥＧエンコーダ１０は、画像並べ替え部１１と、動き検出部１２と、差分検出部１３と、ＤＣＴ（Discrete Cosine Transform）演算部１４と、量子化部１５と、可変長符号化（ＶＬＣ）部１６と、送信バッファ１７と、視覚パラメータ検出部１８と、符号量制御部２０と、逆量子化部２１と、ＩＤＣＴ（Inverse  Discrete Cosine Transform）演算部２２と、加算器２３と、フレームメモリ２４と、動き補償部２５と、スイッチ２６とを備えている。
【００１３】
ＭＰＥＧエンコーダ１０には、デジタル化された動画像データが入力される。入力された動画像データは、ピクチャ単位で画像並べ替え部１１に入力される。
【００１４】
画像並べ替え部１１は、表示時間に従って並べられたピクチャ順序を、符号化する順序に並べ替える。例えば、Ｉ０→Ｂ１→Ｂ２→Ｐ３→Ｂ４→Ｂ５→Ｐ６→Ｂ７→・・・という画像順序で入力された動画像を、Ｉ０→Ｐ３→Ｂ１→Ｂ２→Ｐ６→Ｂ４→Ｂ５→Ｐ９→Ｂ７→・・・といったような符号化を行う画像順序に並べ替えを行う。なお、Ｉ、Ｐ、Ｂは、ピクチャの符号化方法の種別、その下付け添え字は、画像の入力順序を示している。並べ替えをされた画像データは、動き補償の画素単位であるマクロブロック（例えば輝度１６×１６画素，色差８×８画素）単位で、動き検出部１２、差分検出部１３及び視覚パラメータ検出部１８に送られる。
【００１５】
動き検出部１２は、動きベクトルを各マクロブロックに対して検出する。また、動き検出部１２では、参照方向を示す情報等の動き補償に関連する情報も生成し、動きベクトルとともに出力する。検出された動きベクトル及び関連情報は、動き補償部２５及びＶＬＣ部１６に送られる。
【００１６】
差分検出部１３には、符号化順序にピクチャの並べ替えがされた動画像データが、マクロブロック単位で入力される。それとともに、差分検出部１３には、逆量子化部２１，ＩＤＣＴ演算部２２，加算器２３，フレームメモリ２４，動き補償部２５，スイッチ２６によって、局部復号処理がされることによって生成された予測画像データが、マクロブロック単位で入力される。
【００１７】
差分検出部１３は、イントラ予測パス３１と、インター予測パス３２と、これらの一方のパスを選択するスイッチ３３とから構成されている。イントラ予測パス３１では、入力されたマクロブロックに対して何ら処理を行わず、データを通過させる。インター予測パス３２では、減算器３４によって、マクロブロック単位の入力画像データから、参照画像に対して動き補償がされたマクロブロック単位の予測画像データを減算する。スイッチ３４は、そのマクロブロックがイントラマクロブロックであればイントラ予測パス３１を選択してマクロブロック単位の画像データを出力し、インターマクロブロックであればインター予測パス３２を選択してマクロブロック単位の画像データを出力する。減算処理部１６によって処理がされたマクロブロックは、ＤＣＴ演算部１４に供給される。
【００１８】
ＤＣＴ演算部１４は、入力されたマクロブロック単位の動画像データに対して、２次元の離散コサイン変換（ＤＣＴ）を施して直交変換し、空間領域の動画像データを周波数領域の動画像データ（ＤＣＴ係数）に変換する。ＤＣＴ変換された動画像データは、量子化部１５に供給される。
【００１９】
量子化部１５は、ＤＣＴ係数を量子化スケールと呼ぶ値で除算することにより、ＤＣＴ係数の量子化を行う。量子化スケールは、符号量制御部２０によりその値が増減される。量子化スケールが大きくなれば量子化後の値が少なくなり、量子化スケールが小さくなれば量子化後の値が大きくなる。従って、符号量制御部２０により量子化スケールを増減する制御を行うことによって、出力する符号化ストリームのビットレートを制御することができる。さらに、量子化部１５は、マクロブロック毎に量子化したＤＣＴ係数を、直流成分のデータから高域成分方向へスキャンをして、１次元のデータストリームとする。量子化部１５により量子化されたデータは、ＶＬＣ部１６に送られる。
【００２０】
ＶＬＣ部１６は、量子化された画像データ（ＤＣＴ係数）を可変長符号化して、係数０のランレングスとそれに続く非０係数の値の組に、データを符号化する。さらに、ＶＬＣ部１６は、画像データ（ＤＣＴ係数）とともに、動きベクトル等の各種ＭＰＥＧのシステムデータが入力され、これらのデータをＭＰＥＧフォーマットに従って多重化し、ＭＰＥＧビデオストリームを生成する。生成されたＭＰＥＧビデオストリームは、送信バッファ１７に格納される。
【００２１】
送信バッファ１７は、生成したＭＰＥＧビデオストリームを格納し、後段の伝送路符号化やＭＰＥＧ多重化装置等に読み出されるまで、その格納したＭＰＥＧビデオストリームを格納する。
【００２２】
視覚パラメータ検出部１８は、その画像の符号化の難易度を示すパラメータをピクチャ毎に検出する。例えば、視覚パラメータ検出部１８は、Ｉピクチャに対してはピクチャ内のアクティビティを算出し、Ｂ,Ｐピクチャに対してはＢＤ（Block Difference）値又はＢＤ値の分散値を算出し、これらの値を符号化の難易度を示すパラメータとして出力する。
【００２３】
符号量制御部２０は、量子化部１５の量子化スケールの値をコントロールして、送信バッファ１７から出力されるＭＰＥＧ-２ビデオストリームの発生符号量の制御、すなわち、ビットレート制御を行う。
【００２４】
符号量制御部２０は、具体的には、各ピクチャに割り当てる符号量を算出し、その割り当て符号量に基づきピクチャ毎に量子化スケールを出力する。すなわち、１つのピクチャ内の同一種類のマクロブロックでは、量子スケールが変更せずに量子化処理が行われることとなる。また、符号量制御部２０は、送信バッファ１７から出力されるＭＰＥＧ-２データストリームのビットレートが変動するように符号量を制御する方式（ＶＢＲ(Variable Bit Rate)制御）、又は、送信バッファ１７から出力されるＭＰＥＧ-２データストリームのビットレートが一定であるように符号量を制御する方式（ＣＢＲ(Constant Bit Rate)制御）のいずれか一方の符号量制御方式を選択し、選択した符号量制御方式に基づき各ピクチャの発生符号量を算出している。
【００２５】
逆量子化部２１，ＩＤＣＴ演算部２２，加算器２３，フレームメモリ２４，動き補償部２５及びスイッチ２６は、参照画像を生成するための局部復号器として機能している。
【００２６】
逆量子化部２１は、量子化部１５から出力される動画像データ（ＤＣＴ係数）のうち、Ｉピクチャ又はＰピクチャを構成するデータのみをマクロブロック単位で抽出する。Ｉピクチャ又はＰピクチャを構成するデータのみを抽出するのは、参照画像となるのがＩピクチャ又はＰピクチャのみだからである。逆量子化部２１は、量子化部１５によって行われたスキャン方式に応じて、１次元のデータストリームを２次元のマクロブロック単位のデータに変換する。さらに、逆量子化部２１は、量子化部１５で用いられた量子化スケールを用いて逆量子化処理を行う。逆量子化処理がされた動画像データ（ＤＣＴ係数）は、ＩＤＣＴ演算部２２に供給される。
【００２７】
ＩＤＣＴ演算部２２は、入力された動画像データ（ＤＣＴ係数）に対して、２次元の逆離散コサイン変換（ＤＣＴ）を施して、周波数領域の動画像データ（ＤＣＴ係数）を逆直交変換し、空間領域の動画像データに変換する。空間領域のデータとされた動画像データは、加算器２３に供給される。
【００２８】
加算器２３には、ＩＤＣＴ演算部２２からの動画像データと、動き補償部２５により動き補償がされた予測画像データがそれぞれマクロブロック単位で入力され、それらを加算して参照画像データを生成する。なお、ここで、予測画像データとして加算器２３に供給されるマクロブロックは、ＩＤＣＴ演算部２２から出力されるＰピクチャの参照画像とされたＩ又はＰピクチャを構成しているマクロブロックである。また、ＩＤＣＴ演算部２２から入力されるマクロブロックが、イントラマクロブロックである場合には、スイッチ２６がオープンとなり、加算器２３に予測画像データが入力されない。つまり、ＩＤＣＴ演算部２２から入力されるマクロブロックが、予測がされたマクロブロックである場合のみ、予測画像データが加算器２３に入力される。加算器２３から出力された参照画像データ（Ｉ又はＰピクチャ）は、フレームメモリ２４に格納される。
【００２９】
フレームメモリ２４は、過去参照画像及び未来参照画像を格納する。フレームメモリ２４は、新たなＩピクチャ又はＰピクチャが加算器２３から入力される毎に、格納する画像を更新する。
【００３０】
動き補償部２５は、フレームメモリ２４に格納されている参照画像に対して、動きベクトルを用いて動き補償をし、予測画像をマクロブロック単位で生成する。予測画像データは、差分検出部１３及び加算器２３に供給される。
【００３１】
以上のようなＭＰＥＧエンコーダ１０では、入力された動画像データをＭＰＥＧ-２方式で圧縮符号化し、ＭＰＥＧ-２データストリームを生成することができる。
【００３２】
符号量制御部の処理
以下、符号量制御部２０の処理内容についてさらに詳細に説明する。
【００３３】
（全体フロー）
図２に、符号量制御部２０による処理の全体処理フローを示す。
【００３４】
符号量制御部２０は、ステップＳＴ１で、１枚のピクチャに対するビット割り当て処理を行う。すなわち、ある１枚のピクチャに対してどれだけの符号量を割り当てるかを決定する。このステップＳＴ１で決定される１枚のピクチャに対して割り当てる符号量のことを、以下、割当符号量という。続いて、ステップＳＴ２において、符号量制御部２０は、ステップＳＴ１で決定した割当符号量に基づき、そのピクチャ内の最初のマクロブロック（ＭＢ）に対する量子化スケールを決定する。続いて、ステップＳＴ３において、ピクチャの最後のＭＢであるか否かを判断し、最後のＭＢでない場合にはステップＳＴ２に戻り次のＭＢに対して量子化スケールを決定し、最後のＭＢである場合には、ステップＳＴ４に進む。
【００３５】
ステップＳＴ３で最後のＭＢであると判断されたら、ステップＳＴ４において、その動画像信号の最後のピクチャであるか否かを判断する。最後のピクチャでなければステップＳＴ１に戻り、次のピクチャに対してステップＳＴ１からステップＳＴ３までの処理を繰り返し行う。そして、最後のピクチャであれば、制御処理を終了する。
【００３６】
以上のようにＭＰＥＧエンコーダ１０では、１ピクチャ毎に割当符号量を決定し、決定した割当符号量に基づき量子化スケールを制御している。このことにより、ピクチャの途中で急激に量子化スケールが変動することがなくなる。
【００３７】
（ビット割り当て処理）
次に、ステップＳＴ１における任意のピクチャに対するビット割り当て処理について詳細に説明をする。
【００３８】
符号量制御部２０は、図３に示すステップＳＴ５〜ステップＳＴ１１の処理を行うことによって、任意の１枚のピクチャに対する割当符号量を決定する。
【００３９】
まず、ステップＳＴ５において、符号対象となっているピクチャの１ピクチャ前のピクチャの実際の符号発生量を、送信バッファ１７のバッファ量を参照して検出する。
【００４０】
続いて、ステップＳＴ６において、符号化対象となっているピクチャに対して割り当てが可能な最大の符号量（最大割当符号量Ｐｍａｘ）をＶＢＶバッファの使用量を考慮して計算する。なお、最大割当符号量Ｐｍａｘの計算方法等については、その詳細を後述する。
【００４１】
続いて、ステップＳＴ７において、ＣＢＲ制御を行った場合の符号化対象のピクチャに対する割当符号量（元ＣＢＲ割当符号量（tbit_CBR_org））を計算する。元ＣＢＲ割当符号量（tbit_CBR_org）の計算には、例えば、ＴＭ５のＳＴＥＰ１におけるアルゴリズム等を用いる。続いて、ステップＳＴ８において、ステップＳＴ７で算出した元ＣＢＲ割当符号量（tbit_CBR_org）の上限値を、ステップＳＴ６で算出した最大割当符号量Ｐｍａｘで制限した割当符号量（ＣＢＲ割当符号量（tbit_CBR））を算出する。
【００４２】
すなわち、ＣＢＲ割当符号量（tbit_CBR）は、元ＣＢＲ割当符号量（tbit_CBR_org）が最大割当符号量Ｐｍａｘより大きい場合には、その値が最大割当符号量Ｐｍａｘと同一となり、元ＣＢＲ割当符号量（tbit_CBR_org）が最大割当符号量Ｐｍａｘ以下である場合には、その値が元ＣＢＲ割当符号量（tbit_CBR_org）と同一となる。
【００４３】
続いて、ステップＳＴ９において、ＶＢＲ制御を行った場合の符号化対象のピクチャに対する割当符号量（元ＶＢＲ割当符号量（tbit_VBR_org））を計算する。元ＶＢＲ割当符号量（tbit_VBR_org）の計算には、視覚パラメータ１８により検出されたそのピクチャの符号化の難易度を示すパラメータに基づき算出を行う。なお、ＶＢＲ制御を行った場合の符号化対象のピクチャに対する割当符号量の具体的な算出方法については、その詳細を後述する。
【００４４】
続いて、ステップＳＴ１０において、ステップＳＴ９で算出した元ＶＢＲ割当符号量（tbit_VBR _org）の上限値を、ステップＳＴ６で算出した最大割当符号量Ｐｍａｘで制限した割当符号量（ＶＢＲ割当符号量（tbit_ VBR））を算出する。すなわち、ＶＢＲ割当符号量（tbit_VBR）は、元ＶＢＲ割当符号量（tbit_VBR_org）が最大割当符号量Ｐｍａｘより大きい場合には、その値が最大割当符号量Ｐｍａｘと同一となり、元ＶＢＲ割当符号量（tbit_VBR_org）が最大割当符号量Ｐｍａｘ以下である場合には、その値が元ＶＢＲ割当符号量（tbit_VBR_org）と同一となる。
【００４５】
続いて、ステップＳＴ１１において、ステップＳＴ８で算出したＣＢＲ割当符号量（tbit_ CBR）、又は、ステップＳＴ１０で算出したＶＢＲ割当符号量（tbit_ VBR）のうちいずれか一方を選択し、選択した割当符号量（tbit）を出力する。すなわち、ＣＢＲ制御とＶＢＲ制御の切り換えを行っている。なお、ステップＳＴ１１における選択処理については、その詳細を後述する。
【００４６】
ステップＳＴ１１での処理を終えると、１枚のピクチャに対するビット割当処理が完了する。
【００４７】
最大割当符号量Ｐｍａｘ
つぎに、ステップＳＴ６の最大割当符号量Ｐｍａｘの計算方法について説明をする。
【００４８】
最大割当符号量Ｐｍａｘは、割当符号量がこの値よりも大きくなると、ＶＢＶバッファがオーバーフローする可能性が非常に高くなる、というピクチャに対する割当符号量の上限値を規定する値である。最大割当符号量Ｐｍａｘを割当符号量の上限リミットとすることにより、符号量制御部２０は、ＶＢＶバッファをオーバーフローさせないような量子化スケールの制御、すなわち、ビットレート制御を行うことができる。
【００４９】
最大割当符号量Ｐｍａｘは、ＶＢＶバッファの使用量に基づき、次のように算出される。
【００５０】
ＶＢＶバッファは、エンコーダ側で仮想されたデコーダの入力バッファの仮想モデルである。エンコーダは、ＶＢＶバッファの使用量（ビット占有量）を仮想し、その使用量を一定の範囲（０から所定の正の値）内で維持しながらストリームを生成することによって、復号時に破綻しないようなストリームを保障をしている。ＶＢＶバッファについては、ISO13818-2 Annex Cに説明されており、デコーダ側での制約を規定しているが、ここでは、エンコーダ側に置き換えて説明する。すなわち、エンコーダの出力段にＶＢＶバッファが設けられているものとして説明をする。また、ＶＢＶバッファに対する制約に関しては、通常、ＭＰＥＧ-２ストリーム一般について述べられるが、ここでは、ＭＰＥＧ-２ストリームをＤＶＤフォーマットに適用した場合について説明する。
【００５１】
なお、以下の説明で用いる変数及び定数について、次のように定義するものとする。
【００５２】
Ｔ＝ピクチャの発生周期。すなわち、フレームレートの逆数。 
ｎ＝任意のピクチャのピクチャ番号。各ピクチャは、ピクチャ番号順に並んで符号化がされている。ｎは整数である。 
ＰＸ＝Ｘ番目のピクチャの実際の符号発生量（Ｘは整数）。従って、Ｐｎは、ｎ番目に符号化されたピクチャの符号発生量となる。 
ＢＸ＝Ｘ番目のピクチャの符号化直前のＶＢＶバッファの使用量。従って、Ｂｎは、ｎ番目のピクチャの符号化直前のＶＢＶバッファの使用量となる。 
Ｂｍａｘ＝ＶＢＶバッファの使用量の最大値。すなわち、ＶＢＶバッファの容量。
【００５３】
（１）  まず、ＤＶＤフォーマットにＭＰＥＧ-２を適用した場合、図４に示すように、エンコーダとＶＢＶバッファとの関係は、「エンコーダから出力されたＭＰＥＧ-２ストリームは瞬時にＶＢＶバッファに転送される」、「ＶＢＶバッファからはビットレートＲｍａｘでＭＰＥＧ-２データストリームは出力されるが、ＶＢＶバッファが空の場合にはビットレートは０となる」といった関係となる。
【００５４】
（２）  ＶＢＶバッファの使用量（ビット占有量）の変動について説明をする。図５にＶＢＶバッファの使用量の推移の一例を示す。図５の縦軸はＶＢＶバッファの使用量、図５の横軸は時間を表している。
【００５５】
エンコーダは、入力された動画像信号をピクチャ番号の順（０，１，２，３，４，…，（ｎ-１），ｎ，…）に従って符号化する。
【００５６】
０番目のピクチャが符号化された直後（時刻０）、ＶＢＶバッファに符号量Ｐ０が瞬時に転送され、ＶＢＶバッファの使用量がＢ０＋Ｐ０となる。続いて、次の１番目のピクチャの符号化が終了するまでの間は、ＶＢＶバッファからレートＲｍａｘで符号の送出が行われて、ＶＢＶバッファ中の使用量が時間とともに減少していく。
【００５７】
１番目のピクチャが符号化される直前（時刻Ｔ）となると、ＶＢＶバッファの使用量がＢ１となり、そこに符号量Ｐ１の１番目のピクチャが瞬時に転送される。この結果、時刻Ｔでは、ＶＢＶバッファの使用量がＢ１＋Ｐ１となる。
【００５８】
以下、同様にＶＢＶバッファからの転送と、符号化されたピクチャの符号のＶＢＶバッファへの格納とが続き、ｎ番目のピクチャが符号化される直前（時刻ｎ×Ｔ）となると、ＶＢＶバッファの使用量がＢｎ（＝Ｂｎ−１＋Ｐｎ−１）となり、そこに符号量Ｐｎのｎ番目のピクチャが瞬時に転送される。この結果、時刻ｎ×Ｔでは、ＶＢＶバッファの使用量がＢｎ＋Ｐｎとなる。
【００５９】
ここで、符号の送出量が送入量を上回ると、時刻Ｔｘに示されるようにＶＢＶバッファの使用量が０になり、ＶＢＶバッファからのデータの送出が行われなくなる。ＤＶＤフォーマットの場合、このようにエンコーダ側でバッファのアンダーフローが発生することは許容される。
【００６０】
しかしながら、ＤＶＤフォーマットであっても、ＶＢＶバッファのオーバーフローは許容されていない。
【００６１】
そこで、符号量制御部２０では、Ｘ番目のピクチャを符号化する直前のＶＢＶバッファの使用量（ＢＸ）に基づき、Ｘ番目のピクチャを符号化した後のＶＢＶバッファの許容最大値を定める関数を設定しておく。すなわち、この値よりもＶＢＶバッファの使用量が大きくなると、ＶＢＶバッファがオーバーフローする可能性が非常に高くなる、という使用量を、符号化する直前のＶＢＶバッファの使用量を変数として求める関数を設定しておく。そして、符号量制御部２０では、この関数に基づき決定された許容最大値を、Ｘ番目のピクチャの符号量を決定する量子化スケールに反映させ、ビットレート制御を行っている。
【００６２】
このように符号量制御部２０では、ＶＢＶバッファがオーバーフローする可能性が高いか否かをピクチャを符号化する前に予め決定し、可能性が高ければそのピクチャの量子化スケールを大きくするといったようにフィードフォワード制御を行う。このことによって、より早いタイミングでＶＢＶバッファの使用量をビットレートに反映させることができ、この結果、急峻な画像劣化を抑制することができる。
【００６３】
以下、このような関数のことをＶＢＶ関数といい、ＶＢＶ（）として表すものとする。なお、ＶＢＶ（）の（）内には変数が入る。
【００６４】
（３）つぎに、ＶＢＶ関数の条件について説明をする。
【００６５】
Ｘ番目のピクチャを符号化する前のＶＢＶバッファの使用量をＢＸとし、Ｘ番目のピクチャを符号化した後のＶＢＶバッファの許容最大値をＢＹとしたとき、ＢＸとＢＹとの関係は、ＶＢＶ関数“ＶＢＶ（）”を用いて次の式（１）に示すように表す。
【００６６】
ＢＹ＝ＶＢＶ（ＢＸ）      …（１）        
【００６７】
ここで、ＶＢＶ関数は、次のような特徴を有する関数である。 
特徴１：Ｂｙ＝ＶＢＶ（Ｂｘ）は、Ｂｘの区間［０,Ｂｍａｘ］で、Ｂｘに対する単調増加関数である。 
特徴２：関数｛Ｂｙ＝Ｂｘ｝と関数｛Ｂｙ＝ＶＢＶ（Ｂｘ）−（Ｒｍａｘ×Ｔ）｝とは、Ｂｘの区間［０,Ｂｍａｘ］ではＢｘ＝Ｂｔｈ（ただし、０＜Ｂｔｈ＜Ｂｍａｘ）で交わる。 
特徴３：Ｂｘ≦Ｂｔｈである場合には{ＶＢＶ（Ｂｘ）−（Ｒｍａｘ×Ｔ）}≧Ｂｘであり、Ｂｘ＞Ｂｔｈである場合には{ＶＢＶ（Ｂｘ）−（Ｒｍａｘ×Ｔ）}＜Ｂｘである。
【００６８】
図６に、以上のような３つの特徴を有するＶＢＶ関数の一例を示す。この図６に示すＶＢＶ関数は、ＢＸが［０，Ｂｔｈ］の区間ではＢｙが所定の値（Ｂｔｈ以上の値）で一定となっており、ＢＸが［Ｂｔｈ，Ｂｍａｘ］の区間ではＢｙが増加率１未満の割合で徐々に増加している。
【００６９】
（４）つぎに、ＶＢＶ関数を用いた最大割当符号量Ｐｍａｘの算出方法について、図７のフローチャートを参照して説明をする。
【００７０】
なお、ここでは、現在のピクチャ｛（ｎ−１）番目のピクチャ｝の符号化直後のタイミング（時刻（ｎ−１）×Ｔ）で、次のピクチャ｛ｎ番目のピクチャ｝に対する最大割当符号量Ｐｍａｘを算出する手法を示す。
【００７１】
まず、ステップＳＴ１６において、次ピクチャ（ｎ番目のピクチャ）の符号化直前のＶＢＶバッファの使用量Ｂｎを算出する。使用量Ｂｎは、現在のピクチャ｛（ｎ−１）番目のピクチャ｝の符号化直前のＶＢＶバッファの使用量Ｂｎ−１、現在のピクチャ｛（ｎ−１）番目のピクチャ｝の実際の発生符号量Ｐｎ−１、及び、転送レートＲｍａｘに基づき次の式に基づき算出することができる。
【００７２】
Ｂｎ＝Ｐｎ−１＋Ｂｎ−１−（Ｒｍａｘ×Ｔ）      
【００７３】
続いて、ステップＳＴ１７において、ステップＳＴ１６で算出したＶＢＶバッファの使用量Ｂｎが、計算上でマイナスの値となっているか否かを判断し、計算上マイナスの値となっていればステップＳＴ１８においてＢｎ＝０として次のステップＳＴ１９に進み、そうでなければそのまま次のステップＳＴ１９に進む。
【００７４】
続いて、ステップＳＴ１９において、次ピクチャ（ｎ番目のピクチャ）の符号化直前のＶＢＶバッファの使用量Ｂｎを、ＶＢＶ関数の変数に代入して、次ピクチャを符号化した後のＶＢＶバッファの許容最大値（ＶＢＶ（Ｂｎ））を算出する。
【００７５】
続いて、ステップＳＴ２０において、ＶＢＶ（Ｂｎ）からＢｎを減算して、次ピクチャに対する最大割当符号量Ｐｍａｘを算出する。
【００７６】
続いて、ステップＳＴ２１において、ステップＳＴ２０で算出した最大割当符号量Ｐｍａｘから、現在のピクチャでの超過符号量を減算し、その減算値を再度最大割当符号量Ｐｍａｘに代入する。
【００７７】
このステップＳＴ２１での処理は、現在のピクチャ（（ｎ−１）番目のピクチャ）に対しても前回の処理ルーチンにおいて最大割当符号量Ｐｍａｘが求められているが、現時点（時刻（ｎ−１）×Ｔ）では、その現在のピクチャを実際に符号化して発生した符号量（Ｐｎ−１）もすでにわかっている。ここで、実際に現在のピクチャを符号化したところ、符号量（Ｐｎ−１）が、現在のピクチャの最大割当符号量Ｐｍａｘより大きくなってしまう、という可能性もある。このような場合、符号量（Ｐｎ−１）から現在のピクチャの最大割当符号量Ｐｍａｘを減算した値を超過符号量として記憶しておき、ステップＳＴ２１の処理においてその超過符号量分次ピクチャの最大割当符号量Ｐｍａｘに対して補正を加えるようにしている。
【００７８】
続いて、ステップＳＴ２２では、ステップＳＴ２１で超過符号量の補正がされた最大割当符号量Ｐｍａｘが計算上でマイナスの値となっているか否かを判断し、計算上マイナスの値となっていればステップＳＴ２３においてＰｍａｘ＝０とする。そうでなければそのまま処理を進める。なお、Ｐｍａｘ＝０になった場合には、次ピクチャに対して割り当てられる符号量が無いということを意味するが、実際には量子化部に対して最も大きい量子化スケールが与えられることとなる。
【００７９】
以上の処理を終えると最大割当符号量Ｐｍａｘが算出される。算出された最大割当符号量Ｐｍａｘは、図３のステップＳＴ６に引き渡される。
【００８０】
（５）つぎに、図６に示したＶＢＶ関数を用いた場合におけるＶＢＶバッファの使用量の推移について説明し、ピクチャに対する割当符号量の上限値を最大割当符号量Ｐｍａｘとするとによって、ＶＢＶバッファがオーバーフローしにくくなることを証明する。
【００８１】
まず、Ｂｘ≦Ｂｔｈの範囲でＶＢＶバッファを使用した場合について、図８、図９及び図１０を参照して説明をする。
【００８２】
図８に示すように、ｎ−１番目のピクチャの符号化直前のＶＢＶバッファの使用量がＢｘ＝Ｂｎ−１であるとき、ＶＢＶ関数で指定する許容最大値までＶＢＶバッファが使用されるようにｎ−１番目のピクチャを符号化すると、符号化直後のＶＢＶバッファ使用量はＢｙ＝Ｖｎ−１になる（図８中矢印Ａ１）。ここで、図８中Ｐｎ−１は、図示してあるとおりＶｎ−１とＢｎ−１との差であるので符号化したｎ−１番目のピクチャの符号量である。
【００８３】
この後、ｎ番目のピクチャの符号化までにレートＲｍａｘで転送が行われ、その結果、ＶＢＶバッファ使用量は、“Ｂｙ＝Ｖｎ−１−Ｒｍａｘ・Ｔ”となる（図８中矢印Ａ２）。この値は、ｎ番目のピクチャの符号化直前のＶＢＶバッファ使用量である。従って、Ｂｙ＝Ｂｘの直線で折り返し（図８中矢印Ａ３，Ａ４）、ｎ番目のピクチャの符号化直前のＶＢＶバッファ使用量をＢｎとする。ここで、Ｂｘ≦Ｂｔｈの範囲でＶＢＶバッファを使用した場合、ＶＢＶ関数の特徴（特徴３参照。）より、必ず、Ｂｎは、Ｂｎ−１以上の値となる。
【００８４】
同様に、ＶＢＶ関数で指定する許容最大値までＶＢＶバッファが使用されるようにｎ番目のピクチャを符号化すると、ｎ番目のピクチャの符号化直後のＶＢＶバッファ使用量はＢｙ＝Ｖｎになり（図８中矢印Ａ５）、ｎ番目のピクチャの符号量はＰｎとなる。
【００８５】
Ｐｎ−１とＰｎとの間には、図８から、Ｐｎ−１≧Ｐｎの関係があり、ＶＢＶバッファ使用量は、Ｖｎ＝Ｖｎ−１であるので、ＶＢＶバッファ使用量は１ピクチャ前と変化しないことがわかる。
【００８６】
さらに、これを繰り返していくと、ＶＢＶバッファ使用量がＢｘ＝Ｂｔｈを目指して動いていくことがわかる。つまり、Ｂｘ≦Ｂｔｈの範囲でＶＢＶバッファを使用した場合、ＶＢＶ関数により指定する符号量まで使ってピクチャを符号化してもＶＢＶバッファのオーバーフローは発生しないことがわかる。
【００８７】
また、図９に示すように、ＶＢＶ関数で指定する許容最大値までＶＢＶバッファが使用されない場合には、図９中の矢印Ａ１〜Ａ５の動きによってＢｘの値が減少する方向に動く。従って、これを繰り返していくと、ＶＢＶバッファ使用量がＢｘ＝０を目指して動いていくことがわかる。つまり、Ｂｘ≦Ｂｔｈの範囲でＶＢＶバッファを使用した場合、ＶＢＶ関数により指定する符号量まで使わずにピクチャを符号化してもＶＢＶバッファのオーバーフローは発生しないことがわかる。
【００８８】
図１０に示すように、ｎ−１番目のピクチャの符号化直前のＶＢＶバッファの使用量がＢｘ＝Ｂｎ−１であるときに、ｎ−１番目のピクチャをＶＢＶ関数で指定する許容最大値を目標に符号化した結果（図１０中矢印Ａ１）、符号化直後のＶＢＶバッファ使用量が許容最大値からΔ１だけ超過してＶｎ−１になったとする。
【００８９】
この後、ｎ番目のピクチャの符号化までにレートＲｍａｘで転送が行われ、その結果、ＶＢＶバッファ使用量は、“Ｂｙ＝Ｖｎ−１−Ｒｍａｘ・Ｔ”となる（図１０中矢印Ａ２）。また、この値（Ｂｙ＝Ｖｎ−１−Ｒｍａｘ・Ｔ）は、ｎ番目のピクチャの符号化直前のＶＢＶバッファ使用量である。従って、ｎ番目のピクチャの符号化直前のＶＢＶバッファ使用量を、Ｂｙ＝Ｂｘの直線で折り返して（図１０中矢印Ａ３，Ａ４）、Ｂｎとする。ここで、Ｂｘ≦Ｂｔｈの範囲でＶＢＶバッファを使用した場合、ＶＢＶ関数の特徴（特徴３参照。）より、必ず、Ｂｎは、Ｂｎ−１以上の値となる。
【００９０】
続いて、ｎ番目のピクチャの符号化直前のＶＢＶバッファの使用量がＢｘ＝Ｂｎであるときに、ｎ番目のピクチャは、ＶＢＶ関数の許容最大値から超過符号量Δ１だけ小さい値を目標に符号化される（図１０中矢印Ａ５）。図８の場合と比較すると、ｎ番目のピクチャの符号化前のＶＢＶバッファ使用量がΔ２だけ増えてしまっているが、一方で、符号化した後のＶＢＶバッファ使用量がΔ１だけ減少している。そのため、Δ１とΔ２とがほぼ等しければ、符号量としてはｎ−１番目のピクチャの超過分を次のｎ番目のピクチャの減少分によってほぼ差し引き０とすることができることとなり、ＶＢＶバッファがオーバーフローしにくいことがわかる。
【００９１】
続いて、Ｂｘ＞Ｂｔｈの範囲でＶＢＶバッファを使用した場合について、図１１、図１２及び図１３を参照して説明をする。
【００９２】
図１１に示すように、ｎ−１番目のピクチャの符号化直前のＶＢＶバッファの使用量がＢｘ＝Ｂｎ−１であるときに、ＶＢＶ関数で指定する許容最大値までＶＢＶバッファが使用されるようにｎ−１番目のピクチャを符号化すると、符号化直後のＶＢＶバッファ使用量はＢｙ＝Ｖｎ−１になる（図１１中矢印Ａ１）。ここで、図１１中Ｐｎ−１は、図示してあるとおりＶｎ−１とＢｎ−１との差であるので符号化したｎ−１番目のピクチャの符号量である。
【００９３】
この後、ｎ番目のピクチャの符号化までにレートＲｍａｘで転送が行われ、その結果、ＶＢＶバッファ使用量は、“Ｂｙ＝Ｖｎ−１−Ｒｍａｘ・Ｔ”となる（図１１中矢印Ａ２）。また、この値（Ｂｙ＝Ｖｎ−１−Ｒｍａｘ・Ｔ）は、ｎ番目のピクチャの符号化直前のＶＢＶバッファ使用量である。従って、ｎ番目のピクチャの符号化直前のＶＢＶバッファ使用量を、Ｂｙ＝Ｂｘの直線で折り返して（図１１中矢印Ａ３，Ａ４）、Ｂｎとする。ここで、Ｂｘ＞Ｂｔｈの範囲でＶＢＶバッファを使用した場合、ＶＢＶ関数の特徴（特徴３参照。）より、必ず、Ｂｎは、Ｂｎ−１以下の値となる。
【００９４】
同様に、ＶＢＶ関数で指定する許容最大値までＶＢＶバッファが使用されるようにｎ番目のピクチャを符号化すると、ｎ番目のピクチャの符号化直後のＶＢＶバッファ使用量はＢｙ＝Ｖｎになり（図１１中矢印Ａ５）、ｎ番目のピクチャの符号量はＰｎとなる。
【００９５】
Ｐｎ−１とＰｎとの間には、図１１から、Ｐｎ−１＜Ｐｎの関係があり、ＶＢＶバッファ使用量は、Ｖｎ＞Ｖｎ−１であるので、ＶＢＶバッファ使用量は１ピクチャ前から減少することがわかる。
【００９６】
さらに、これを繰り返していくと、ＶＢＶバッファ使用量がＢｘ＝Ｂｔｈを目指して動いていくことがわかる。つまり、ＶＢＶ関数により指定する符号量まで使ってピクチャを符号化してもＶＢＶバッファのオーバーフローは発生しないことがわかる。
【００９７】
また、図１２に示すように、ＶＢＶ関数で指定する許容最大値までＶＢＶバッファが使用されない場合には、図１２中の矢印Ａ１〜Ａ５の動きによってＢｘの値が減少する方向に動く。従って、これを繰り返していくと、ＶＢＶバッファ使用量がＢｘ＝Ｂｔｈを目指して動いていくことがわかる。つまり、Ｂｘ＞Ｂｔｈの範囲でＶＢＶバッファを使用した場合、ＶＢＶ関数により指定する符号量まで使わずにピクチャを符号化してもＶＢＶバッファのオーバーフローは発生しないことがわかる。
【００９８】
図１３に示すように、ｎ−１番目のピクチャの符号化直前のＶＢＶバッファの使用量がＢｘ＝Ｂｎ−１であるときに、ｎ−１番目のピクチャをＶＢＶ関数の許容最大値を目標に符号化した結果（図１３中矢印Ａ１）、符号化直後のＶＢＶバッファ使用量が許容最大値からΔ１だけ超過してＶｎ−１になったとする。
【００９９】
この後、ｎ番目のピクチャの符号化までにレートＲｍａｘで転送が行われ、その結果、ＶＢＶバッファ使用量は、“Ｂｙ＝Ｖｎ−１−Ｒｍａｘ・Ｔ”となる（図１３中矢印Ａ２）。また、この値（Ｂｙ＝Ｖｎ−１−Ｒｍａｘ・Ｔ）は、ｎ番目のピクチャの符号化直前のＶＢＶバッファ使用量である。従って、ｎ番目のピクチャの符号化直前のＶＢＶバッファ使用量を、Ｂｙ＝Ｂｘの直線で折り返して（図１３中矢印Ａ３，Ａ４）、Ｂｎとする。ここで、Ｂｘ＞Ｂｔｈの範囲でＶＢＶバッファを使用した場合、ＶＢＶ関数の特徴（特徴３参照。）より、必ず、Ｂｎは、Ｂｎ−１以下の値となる。
【０１００】
続いて、ｎ番目のピクチャの符号化直前のＶＢＶバッファの使用量がＢｘ＝Ｂｎであるときに、ｎ番目のピクチャは、ＶＢＶ関数の許容最大値から超過符号量Δ１だけ小さい値を目標に符号化される（図１３中矢印Ａ５）。図１１の場合と比較すると、ｎ番目のピクチャの符号化前のＶＢＶバッファ使用量がΔ２だけ増えてしまっているが、一方で、符号化した後のＶＢＶバッファ使用量がΔ１だけ減少している。そのため、Δ１とΔ２とがほぼ等しければ、符号量としてはｎ−１番目のピクチャの超過分を次のｎ番目のピクチャの減少分によってほぼ差し引き０とすることができることとなり、ＶＢＶバッファがオーバーフローしにくいことがわかる。
【０１０１】
（６）ＭＰＥＧエンコーダ１０では、以上のようにＶＢＶ関数を用いて最大割当符号量Ｐｍａｘを算出し、最大割当符号量Ｐｍａｘを各ピクチャに対する割当符号量の上限値とすることで、ＶＢＶバッファをオーバフローさせずに、最適な量子化スケールの算出制御、すなわち、ビットレート制御を行うことができる。
【０１０２】
ＣＢＲ又はＶＢＲの選択
つぎに、ＣＢＲ制御又はＶＢＲ制御の選択処理について説明をする。
【０１０３】
符号量制御部２０では、上述したステップＳＴ１１において、ＣＢＲ制御に基づくアルゴリズムで算出された割当符号量（tbit_ CBR）又はＶＢＲ制御に基づくアルゴリズムで算出された割当符号量（tbit_ VBR）のいずれか一方を選択する処理を行っている。
【０１０４】
符号量制御部２０では、ＣＢＲ制御を行った場合の１つのピクチャに対する割当符号量の算出方法として、例えば、ＴＭ５のＳＴＥＰ１におけるアルゴリズム等を用いている。
【０１０５】
一方、符号量制御部２０では、ＶＢＲ制御を行った場合のピクチャの割当符号量の算出方法として、符号化前のピクチャから求めた、そのピクチャの符号化の難易度を示すパラメータに基づき算出を行っている。具体的には、Ｉピクチャであれば、画面のアクティビティを符号化の難易度を示すパラメータとして用いる。アクティビティが大きければ、そのピクチャには符号量を大きく割り当て、アクティビティが小さければそのピクチャには少ない符号量を割り当てる、といったアクティビティに対する単調増加関数を用いて割当符号量を算出する。また、Ｂ,Ｐピクチャであれば、ＢＤ値やＢＤ値の分散を符号化の難易度を示すパラメータとして用いる。ＢＤ値が大きければ、そのピクチャには符号量を大きく割り当て、ＢＤ値が小さければそのピクチャには少ない符号量を割り当てる、といったＢＤ値に対する単調増加関数を用いて割当符号量を算出する。
【０１０６】
このようにＶＢＲ制御を行う場合には、符号化前の画面の特徴から符号化の難易度を検出して、その難易度に基づき可変ビットレート制御が行われる。この結果、符号量が必要とされるピクチャに対しては符号量を多く、符号量が少なくてもよい画質が得られるピクチャに対しては符号量を少なく割り当てることができ、非常に効率的なビットレート制御が可能となる。さらに、フィードフォワード制御によるレートコントロールが行われるので、符号量が大量に必要となるピクチャが突然入力されても、そのピクチャに対して充分に符号量を割り当てることができ、そのため、シーンチェンジ時にも画質の劣化が生じづらい。
ＣＢＲ制御又はＶＢＲ制御の選択処理フローについて、図１４を参照して説明をする。
【０１０７】
図１４に示す選択処理フローは、ステップＳＴ１１のサブルーチンとして機能する。従って、図１４に示す選択処理フローは、１ピクチャ毎に行われることとなる。
【０１０８】
まず、ステップＳＴ３１において、そのピクチャがＧＯＰの先頭のピクチャであるか否かを判断する。判断した結果、そのピクチャがＧＯＰの先頭であれば、ステップＳＴ３２に進んでＶＢＲフラグを偽（VBR_Flag＝False）に設定し、ステップＳＴ３３に進む。判断した結果、そのピクチャがＧＯＰの先頭でなければ、そのままステップＳＴ３３に進む。
【０１０９】
続いて、ステップＳＴ３３において、ＶＢＲフラグが真（VBR_Flag＝True）であるか否かを判断する。判断した結果、ＶＢＲフラグが真（VBR_Flag＝True）であればステップＳＴ３５に進み、ＶＢＲフラグが偽（VBR_Flag＝False）であればステップＳＴ３４に進む。続いて、ステップＳＴ３４において、ＢＤ値が第１の閾値よりも大きく且つＢＤ値の分散が第２の閾値よりも大きいか、否かを判断する。つまり、そのピクチャの符号化の難易度を判断する。ＢＤ値が第１の閾値よりも大きく且つＢＤ値の分散が第２の閾値よりも大きい場合（つまり、ピクチャの符号化の難易度が高い場合）にはステップＳＴ３５に進み、それ以外の場合（つまり、ピクチャの符号化の難易度が高くない場合）にはステップＳＴ３６に進む。
【０１１０】
ステップＳＴ３５では、ＶＢＲフラグを真（VBR_Flag＝True）に設定し、ステップＳＴ３７に進む。
【０１１１】
ステップＳＴ３６では、そのピクチャをＣＢＲ制御で符号化した場合の割当符号量（ＣＢＲ割当符号量：tbit_CBR）と、そのピクチャをＶＢＲ制御で符号化した場合の割当符号量（ＶＢＲ割当符号量：tbit_VBR）とを比較する。比較した結果、ＶＢＲ制御で符号化した場合の割当符号量の方が小さい場合にはステップＳＴ３７に進み、ＣＢＲ制御で符号化した場合の割当符号量の方が小さい場合にはステップＳＴ３８に進む。
【０１１２】
そして、ステップＳＴ３７では、そのピクチャに対してＶＢＲ制御での符号割り当てを選択し、ステップＳＴ３８では、そのピクチャに対してＣＢＲ制御での符号割り当てを選択する。ステップＳＴ３７又はステップＳＴ３８の処理を終了すると、そのピクチャに対する選択処理フローが終了する。
【０１１３】
以上のようにＭＰＥＧエンコーダ１０では、では、ＣＢＲ制御又はＶＢＲ制御の選択をピクチャ毎に行っている。また、ＭＰＥＧエンコーダ１０では、符号化前の信号から求められたそのピクチャの符号化の難易度（例えば、ＢＤ値、ＢＤ値の分散）を参照し、その難易度が高ければＶＢＲ制御を行い、低ければＣＢＲ制御を行うようにしている。また、難易度が低い場合であっても、ＶＢＲ制御の割当符号量の方がＣＢＲ制御の割当符号量の方が小さければ、ＶＢＲ制御を行う。
【０１１４】
さらに、上記のフローにおけるＶＢＲフラグ（VBR_Flag）は、過去のピクチャの符号化の際に、符号化の難易度が高いためＶＢＲ制御を選択したことを示すフラグであり、符号量制御部２０では、ＶＢＲフラグ（VBR_Flag）が真（True）となった場合には、そのＧＯＰ内の以後のピクチャへの符号割り当てを強制的にＶＢＲ制御に設定をしている。
【０１１５】
これは、一度でもＶＢＲ制御が入ると、ピクチャの発生符号量がＣＢＲ制御の場合よりも極端に大きくなることがあり、ＧＯＰ全体での発生符号量を一定にするＣＢＲ制御にとっては以後のピクチャに対して割り当てる符号の絶対量が不足し、符号の割り当てができなくなってしまうことがある。このため、一度でも、符号化の難易度が高いためＶＢＲ制御を選択した場合には、ＧＯＰ内の以後のピクチャに対しては常にＶＢＲ制御を行うこととしている。
【０１１６】
この理由を図１５を参照してさらに説明する。
【０１１７】
図１５（Ａ）は、ＣＢＲ制御がＧＯＰの終わりまで継続した場合を示したものであり、このＧＯＰでは、当然であるが総符号量がＣＢＲ制御のＧＯＰに対する総符号量とほぼ一致する。
【０１１８】
図１５（Ｂ）は、ＧＯＰの途中からＶＢＲ制御によって符号割り当てを増やしたい場合があるが、そのような制御を行うとこのＧＯＰの総符号量がＣＢＲ制御を使った場合の総符号量よりも多くなる必要がある。例えばＴＭ５で示されているＣＢＲ制御を例にとると、ピクチャの符号化結果によって次のピクチャへの符合割り当て量を調整しなおすというフィードバック制御を行うことでＧＯＰ全体で一定の符号量を使い切っている。従って図１５（Ｂ）のようなケースで、ＧＯＰ途中のピクチャでいったん符号量が増えた場合、以後のピクチャに対してＣＢＲ制御に復帰させる制御を行うと、ＧＯＰの残りの符号量が不足しピクチャへビット割り当てが行えなくなる可能性がある。具体的には、図１５（Ｂ）は、ＧＯＰの総符号量をＣＢＲ制御のＧＯＰ総符号量と一致させるために、最後のピクチャへの符号割当量をマイナスにせざるを得ない、という状況を表している。ただ、実際にはマイナスの符号量は無いのでこのような符号割り当ては不可能である。
【０１１９】
図１５（Ｃ）では、このような状況に対処するために、ＧＯＰの途中で符号化の難易度に応じたＶＢＲ制御による符号割り当てが入ったときには、ＧＯＰ中の以後のピクチャでＣＢＲ制御の枠をはずし、必ずＶＢＲ制御による符号割り当てを行うようにする。もっとも、図１５（Ｄ）に示すように、ＣＢＲ制御を行った場合よりも符号量が少ないためにＶＢＲ制御が選択された場合には、ＧＯＰ内での符号量に自由度があるため、ＶＢＲ制御の後にＣＢＲ制御が選択されてもよい。
【０１２０】
続いて、ＣＢＲ, ＶＢＲ制御を適応的に切り替える様子を図１６に示す。
【０１２１】
図１６（Ａ）には、ＶＢＲ制御による記録レートの時間推移（実線）及びＣＢＲ制御による記録レートの時間推移（点線）を示している。ここでのＶＢＲ制御（実線）は、符号化の難易度によって符号量が変化するタイプのもので、簡単な画像が来るとレートが下がり、難しい画像が来るとレートが上がっている様子を示している。これに対してＣＢＲ制御（点線）は、符号化の難易度に関わらず、一定のレートで符号化を行うことを示している。
【０１２２】
図１６（Ａ）で示したレート制御の切り替えが行われた結果、本システムのレートがどのように選択されるかを示したものを図１６（Ｂ）に示す。
【０１２３】
区間Ａでは、ピクチャの符号化が簡単であるとステップＳＴ３４で判断されて、さらにＳＴ３７で符号発生量がＶＢＲ制御がＣＢＲ制御を下回ると判断されたために、ＶＢＲ制御が選択されていることを示している。区間Ｂでは、ピクチャの符号化が難しいとステップＳＴ３４で判断されたため、ＶＢＲ制御が選択されたことを表している。区間Ｃでは、ピクチャの符号化が簡単であるとステップＳＴ３４で判断されて、さらにＳＴ３７で符号発生量がＣＢＲ制御がＶＢＲ制御を下回ると判断されたために、ＣＢＲ制御が選択されていることを示している。
【０１２４】
以上のように、ＭＰＥＧエンコーダ１０では、符号化の簡単な区間でＣＢＲ制御より符号量が少なくなるならＶＢＲ制御を使用して符号発生量を軽減させるので、例えば有限の記録容量を持つ記録媒体への記録時間をできるだけ延ばすことができ、伝送容量を有効に活用することができる。また、ＭＰＥＧエンコーダ１０では、符号化の難しい区間ではＶＢＲ制御を用いて充分な符号量を割り当てて画質を上げることができる。また、ＭＰＥＧエンコーダ１０では、中程度の符号化難易度区間ではＣＢＲを使うことで、おおよその平均的記録時間の目安を提供し、ユーザーの使い勝手も向上するようにしている。
【図面の簡単な説明】
【０１２５】
【図１】本発明が適用されたＭＰＥＧ-２エンコーダのブロック構成図である。
【図２】符号量制御処理の全体処理のフローチャートである。
【図３】ピクチャへの割当符号量の決定処理のフローチャートである。
【図４】ＶＢＶバッファを説明するための図である。
【図５】ＶＢＶバッファの使用量の遷移を示す図である。
【図６】ＶＢＶ関数を示す図である。
【図７】最大割当符号量の算出処理のフローチャートである。
【図８】Ｂｘ≦Ｂｔｈの範囲でＶＢＶバッファが使用され、且つ、ＶＢＶ関数で指定する許容最大値までＶＢＶバッファが使用される場合の、ＶＢＶバッファの使用量の遷移を示す図である。
【図９】Ｂｘ≦Ｂｔｈの範囲でＶＢＶバッファが使用され、且つ、ＶＢＶ関数で指定する許容最大値よりも小さい値でＶＢＶバッファが使用される場合の、ＶＢＶバッファの使用量の遷移を示す図である。
【図１０】Ｂｘ≦Ｂｔｈの範囲でＶＢＶバッファが使用され、且つ、ＶＢＶ関数で指定する許容最大値よりも大きい値でＶＢＶバッファが使用される場合の、ＶＢＶバッファの使用量の遷移を示す図である。
【図１１】Ｂｘ＞Ｂｔｈの範囲でＶＢＶバッファが使用され、且つ、ＶＢＶ関数で指定する許容最大値までＶＢＶバッファが使用される場合の、ＶＢＶバッファの使用量の遷移を示す図である。
【図１２】Ｂｘ＞Ｂｔｈの範囲でＶＢＶバッファが使用され、且つ、ＶＢＶ関数で指定する許容最大値よりも小さい値でＶＢＶバッファが使用される場合の、ＶＢＶバッファの使用量の遷移を示す図である。
【図１３】Ｂｘ＞Ｂｔｈの範囲でＶＢＶバッファが使用され、且つ、ＶＢＶ関数で指定する許容最大値よりも大きい値でＶＢＶバッファが使用される場合の、ＶＢＶバッファの使用量の遷移を示す図である。
【図１４】ＣＢＲ制御又はＶＢＲ制御の選択処理のフローチャートである。
【図１５】強制的にＶＢＲ制御を行うことの理由について説明をするための図である。
【図１６】本発明のアルゴリズムによってＣＢＲ, ＶＢＲ制御を適応的に切り替える様子について説明をするための図である。
【符号の説明】
【０１２６】
１０  ＭＰＥＧエンコーダ、１５  量子化部、１７  送信バッファ、１８  視覚パラメータ検出部、２０  符号量制御部
【図１】
2005073063.tif 000003
【図２】
2005073063.tif 000004
【図３】
2005073063.tif 000005
【図４】
2005073063.tif 000006
【図５】
2005073063.tif 000007
【図６】
2005073063.tif 000008
【図７】
2005073063.tif 000009
【図８】
2005073063.tif 000010
【図９】
2005073063.tif 000011
【図１０】
2005073063.tif 000012
【図１１】
2005073063.tif 000013
【図１２】
2005073063.tif 000014
【図１３】
2005073063.tif 000015
【図１４】
2005073063.tif 000016
【図１５】
2005073063.tif 000017
【図１６】
2005073063.tif 000018