Broadband Watch logo
バックナンバー

その116「DLNAの仕組み」
[2007/03/26]
その115「ドメインとActive Directory」
[2007/03/19]
その114「ワークグループができること」
[2007/03/12]
その113「WPSの仕組み」
[2007/03/05]
その112「Gopherの生い立ちと現在」
[2007/02/26]
その111「Wikiの使われ方」
[2007/02/19]
その110「文字コードとは」
[2007/02/05]
その109「IISの生い立ち」
[2007/01/29]
その108「NASの登場と一般への普及」
[2007/01/22]
その107「HomePNAのいろいろ」
[2007/01/15]
その106「Ogg Vorbisの成り立ち」
[2006/12/25]
その105「MIDIの原理とSMFの構造」
[2006/12/18]
その104「AIFFの構造」
[2006/12/11]
その103「WAVの構造と現状」
[2006/12/04]
その102「WMAの歴史」
[2006/11/27]
その101「AACの特徴」
[2006/11/20]
その100「MP3/MPEG Audioの仕組み」
[2006/11/13]
その99「HSDPAの仕組み」
[2006/11/06]
その98「H.264・MPEG-4 AVCの特徴」
[2006/10/30]
その97「IEEE 802.16e(モバイルWiMAX)の特徴」
[2006/10/23]
その96「TIFFの特徴」
[2006/10/16]
その95「PNGの現状と今後」
[2006/10/02]
その94「GIFの構造」
[2006/09/25]
その93「10GBASEの種類(2)」
[2006/09/11]
その92「10GBASEの種類」
[2006/09/04]
その91「GbEのいろいろ」
[2006/08/28]
その90「JPEGの特徴」
[2006/08/21]
その89「DivXの広がり」
[2006/08/07]
その88「MPEGの仕組み」
[2006/07/31]
その87「WMVのこれまで」
[2006/07/24]
その86「AVIの生い立ちとそのコーデック」
[2006/07/10]
その85「QuickTimeの変遷」
[2006/07/03]
その84「Realのこれまでと今後」
[2006/06/26]
その83「ShareとWinny」
[2006/06/19]
その82「DOCSISの仕組み」
[2006/06/12]
その81「SQLインジェクションの流れ」
[2006/06/05]
その80「RSSの動作」
[2006/05/29]
その79「Skypeの仕組み」
[2006/05/22]
その78「BitTorrentの特徴と今後」
[2006/05/15]
その77「Winnyの仕組みと現状」
[2006/05/08]
その76「WinMXの特徴」
[2006/04/24]
その75「Gnutellaの歴史と構造」
[2006/04/17]
その74「Napsterの歴史」
[2006/04/10]
その73「P2Pのいろいろ」
[2006/04/03]
その72「IEEE 802.11nの動向」
[2006/03/27]
その71「ActiveX Scriptingの動作」
[2006/03/20]
その70「Ajaxの仕組み」
[2006/03/13]
その69「DHTMLの動作」
[2006/03/06]
その68「Scriptの定義」
[2006/02/27]
その67「JavaScriptの仕組み」
[2006/02/20]
その66「Javaの動作」
[2006/02/13]
その65「RFCのプロセス」
[2006/02/06]
その64「ActiveX DocumentとActiveX Controlの違いと共通点」
[2006/01/30]
その63「ActiveX Controlの機能」
[2006/01/23]
その62「ActiveXを構成するもの」
[2006/01/16]
その61「Cookieの仕組みと用途」
[2005/12/26]
その60「malwareとその分類」
[2005/12/19]
その59「rootkitの動作」
[2005/12/12]
その58「CSSの役割」
[2005/12/05]
その57「HTMLの変遷」
[2005/11/28]
その56「PONとその種類」
[2005/11/21]
その55「FWAの仕組み」
[2005/11/14]
その54「DoSとDDoS」
[2005/11/07]
その53「SNMPとMIBの動作」
[2005/10/03]
その52「Jumbo Frameとフレームサイズ」
[2005/09/12]
その51「WPA2の仕組み」
[2005/09/05]
その50「WPAとWPA-PSKの違い」
[2005/08/29]
その49「WPAの仕組み」
[2005/08/22]
その48「WebDAVの動作」
[2005/08/08]
その47「OFDMAの仕組みとOFDMとの違い」
[2005/08/01]
その46「OFDMの仕組み」
[2005/07/25]
その45「WiMAXの特徴」
[2005/07/11]
その44「Wi-Fiの役割」
[2005/07/04]
その43「FTPの目的と動作」
[2005/06/27]
その42「UPnPの動作」
[2005/06/20]
その41「ネットマスクの仕組み」
[2005/06/13]
その40「ARPの機能」
[2005/06/06]
その39「DNSの原理」
[2005/05/30]
その38「デフォルトゲートウェイの役割」
[2005/05/23]
その37「MACアドレスの仕組み」
[2005/05/16]
その36「スイッチとその進化」
[2005/05/09]
その35「ルータによるメリット」
[2005/04/25]
その34「ブリッジの原理」
[2005/04/18]
その33「リピータの機能」
[2005/04/11]
その32「IPアドレスのクラス」
[2005/04/04]
その31「ブロードキャスト/マルチキャスト/ユニキャスト」
[2005/03/28]
その30「SMTP AUTHと認証の種類」
[2005/03/14]
その29「Submissionポートとスパムメール対策」
[2005/03/07]
その28「Outbound Port25 Blockingとは」
[2005/02/28]
その27「PGPの仕組み」
[2005/02/21]
その26「PKIと認証局」
[2005/02/14]
その25「公開鍵暗号方式とは」
[2005/02/07]
その24「共通鍵暗号とは」
[2005/01/31]
その23「SSHの仕組みと応用」
[2005/01/24]
その22「SSLの役割」
[2005/01/17]
その21「POP3とIMAP4の違い」
[2004/12/27]
その20「POP3の役割と機能」
[2004/12/20]
その19「SMTPの機能と問題点」
[2004/12/13]
その18「SPIとパケットフィルタリング」
[2004/12/06]
その17「LANの概念とその広がり」
[2004/11/29]
その16「SIPの役割」
[2004/11/15]
その15「プロキシの利用」
[2004/11/08]
その14「VoIPの仕組み」
[2004/11/01]
その13「イーサネットとは」
[2004/10/25]
その12「IP/TCP/UDP/ICMPとは」
[2004/10/18]
その11「DHCPの役割」
[2004/10/04]
その10「MIMOとは」
[2004/09/27]
その9「DMZとその効果」
[2004/09/13]
その8「ファイアウォールとは」
[2004/09/06]
その7「NATとNAPTの違いとIPマスカレード」
[2004/08/30]
その6「VPNとVPNパススルーの仕組み」
[2004/08/23]
その5「無線LANの問題とWEP」
[2004/08/09]
その4「IEEE 802.11a/b/gって何を意味しているの?」
[2004/08/02]
その3「ダイナミックDNSって?」
[2004/07/26]
その2「グローバルIPアドレスとプライベートIPアドレス」
[2004/07/12]
その1「PPPoEって何だろう?」
[2004/07/05]

その98「H.264・MPEG-4 AVCの特徴」


H.264、MPEG-4 AVCって何?

 その88の最後で「また項を改めて説明したいと思います」と書いたまま、そのまま説明するのをすっかり忘れていました。そこで今回は「H.264」について説明したいと思います。

 H.264とは、ITU-Tでの番号です。ITU-TではH.260~H.279までの20個を、動画のエンコード方法に割り当てることになっています。例えば、「H.261」はISDN回線を経由した動画転送の方法、「H.262」は汎用(4Mbps~10Mbps)の動画転送方法、「H.263」は電話会議などに利用される20kbps~2Mbpsの転送方法として、それぞれ勧告されています。

 一方、「MPEG-4 AVC」は名前の通り、「MPEG(Moving Picture Experts Group)」が検討を行なっているものです。この2つの規格、当初はまったく独立していました。古いのはH.264になります。元々はITU-T内で「H.26L(Long Term)」という名称で1998年から検討されていたもので、途中からH.264という名称に変わりました。

 対するMPEGは、2001年にMPEG-4 Version 1~4まで出揃ったところで作業は一段落しました。しかし、その後あちこちから「MPEG-4よりも効率が良い」と謳う方式が提案されるようになり、これらの審議を行なう必要が出てきました。そこで作業が進んでいたITU-Tと共同で「JVT(Joint Video Team)」を形成し、ここで統一して作業を行なうことにしました。

 この結果として2003年に標準化されたものは、ITU-TではH.264、MPEGではMPEG-4 AVC(Advanced Video Coding)という名前になりましたが、内容は同一のものです。以下、簡略化のためにH.264として表記しますが、これをMPEG-4 AVCと読み替えても問題はありません。


MPEG-4とH.264の違い

 それでは従来のMPEG、特にMPEG-4とH.264の違いは何でしょうか。いくつか特徴はあるのですが、最大のものは「圧縮率が高められるのであれば、何でもやる」という方針が違いと言えると思います。ざっと改良点を並べていくと、以下のようなものが挙げられます。

・動き検索にあたり、複数の画像からの参照が可能(従来は直前の画像のみを参照)
・検索のブロックサイズが4×4画素から16×16画素まで7通りで可変できる(従来は16×16画素もしくは8×8画素)
・検索精度を最大1/4ピクセル単位に変更(従来は最大1/2ピクセル単位)
・画面内予測符号化を高精度化。すべての画素で予測符号化を行なう(従来は直流/低周波数成分のみ)
・画素サイズに4×4画素と16×16画素の2種類を用意(従来は8×8画素のみ)。複雑な映像は4×4画素で、平坦な画素は16×16画素で予測を行なうことで、精度向上と処理効率向上を両立させた
・双方向画面間予測(いわゆる「Bピクチャ:Bi-Directional Predictive Picture」)の際に、どう予測するかをブロックごとに可変できるようにした(従来は予測方法は画面全体で均一)
・重み付け予測のサポート(従来はなし)
・DCT/量子化を4×4画素単位で実施(従来は16×16画素単位)
・DCTに加え、アマダール変換を採用(従来はDCTのみ)
・量子化パラメータを非線形に変更(従来は線形変換)
・デブロッキングフィルタを搭載(従来はなし)
・エントロピー符号化の拡張。「CAVLC:Context Adaptive Variable Length Coding」や「CABAC:Context Adaptive Binari Arithmetic Coding」といったものが利用可能)従来は単なるテーブルベースの符号化のみ)
・インターレス映像の取り扱いを加味(従来はプログレッシブのみ)
・ストリーミング映像の取り扱いを加味(従来はなし)


 各技術の詳細を説明し始めると、それだけで連載が100回分くらいできてしまいそうなのでここでは触れません。しかし、従来ならばコストパフォーマンス、つまり、その技術を実装することによる処理の増大やプログラムの複雑化と、得られる圧縮率向上の度合いを比較して、あまり効果がないと判断された技術は採用されなかったわけですが、H.264ではこれらを随時採用していったという感があります。当然のことながら、これはエンコーダ、デコーダの両方に負荷をかけるもので、当初は「H.264は大雑把に言ってMPEG-2の10倍の負荷」などと言われた時期もありました。


図1
 また、厄介なのは、H.264規格の中には至るところで「複数のオプションを並べ、1番適切なものをエンコーダが選択する」というやり方が出てくる点です。例えば、双方向画面間予測を例に取ってみましょう。

 まず、図1のような映像があるとします。太陽は3フレームの間位置がずれず、車は左から右へ、花は右から左へと移っていくという、ある種不思議な映像なわけですが、まぁこれは例ということでご勘弁ください。この3枚のフレームから、双方向画像予測を行なう場合、例えば花は、前フレームからそのまま持ってくるのが便利です。一方、車はというと、前フレームは半分切れているので、次フレームから持ってくる方が便利でしょう。そして太陽はというと、これは前後フレーム両方から持ってくればすみます(図2)。

 こうした具合にやることで効率を上げる、というのがH.264のスペックなわけですが、言うのは簡単でも処理はものすごく大変です。このケースで言えば、各フレームの中で「太陽」「花」「自動車」といった要素を認識し、これをフレームに渡って追いかけることで最適なフレームを選び出す作業が発生するわけです。

 加えて、H.264では直前/直後以外のフレームを参照することも可能になりました。ですので、真面目に最適化を行なう場合、前後10フレーム程度を参照しながら処理を行なうといった作業が発生することになります。こうした処理に関しては、H.264のSpecificationなどには「どうやってこれを実現するか」は、いっさい記載されていません。

 MPEG-1/2の頃から、デコーダに関してはかなり細かく説明が行なわれているのですが、逆にエンコーダに関しては「ここで規定されたデコーダで再生できるようなデータを生成せよ」といった形で指示されているだけで、実装は完全にアプリケーション設計者に任されています。この伝統はH.264においても健在で、こうした多用なオプションをフルに搭載し、すべてを使いこなしているエンコーダは、現時点で皆無と言って差し支えないのが現状です。


図2

H.264の使い方

 とは言いつつも、次第にH.264が普及を始めているのは事実です。すでに搭載されているものでは、PSPに搭載されるUMDディスクを使った動画、AppleのQuickTime 7はH.264をベースとしていますし、最近ではワンセグがやはりH.264を採用しています。

 また、Blu-ray DiscやHD DVDもH.264をベースとした映像をサポートします。MPEG-2に比べて概ね2倍という圧縮効率の高さが採用の決め手ですが、UMDやワンセグでは「データ転送速度を上げにくい」こと、HD DVDやH.264ではフルHDをサポートすることにより「画像サイズが極端に上がる」という点から、それぞれ採用されることになりました。そんなわけで、同じH.264と言っても使い方は微妙に異なっています。

 こうしたケースをサポートするため、H.264では、目的(用途)別にプロファイルと呼ばれるものが定義されており、主要なものでは以下の3点があります。

Baseline Profile:I/Pフレームのみ。エントロピー符号化も最小
Main Profile:Base Line ProfileにBフレームとCABACのサポート、重み付け予測などを追加
Extended Profile:Base Line Profileにインターレス映像のサポートを追加


 また、2005年末にMPEG-4 AVC Version 3として追加された新スペックの中には、High Profile/High 10 Profile/High 4:2:2 Profile/High 4:4:4 Profileといったものがあります。これらはMain Profileを拡張したもので、もっぱらハイビジョンなどをターゲットとしたものです。

 話を戻すとワンセグなどはBaseline Profile、QuickTime 7の場合はBasline ProfileとMain Profile、HD DVDやBlu-ray DiscではHigh Profileがそれぞれ利用されるといった具合です。また、プロファイルとは別にレベルという概念も定義されます。こちらは画面サイズに応じたパラメータを設定するもので、1~5.1まで15通りのレベルが定義されています。このプロファイルとレベルを適切に選ぶことで、目的にあったものを利用できるというのが、H.264の使い方の特徴と言えるでしょう。

 一方、インターネットでH.264が広く普及しているかというと、必ずしもそうとは言えません。もちろん、利用は可能(例えばブラウザにQuickTime 7のプラグインを登録しておけば、これを使ってH.264の再生が可能になります)です。しかし、対応したエンコーダが少ないことや、適切にパラメータを設定しないとMPEG-4と圧縮率が大して変わらないことが大きな要因で、今後広く普及するかに関しても微妙なところかもしれません。

 ワンセグやBlu-ray、HD DVDなどの家電機器では広く使われてゆくのは間違いないわけですが、インターネットで普及するためには、最低でも無料で使えるエンコーダが広く普及しないことには話になりません。しかし、今のところこうしたエンコーダが出てくる気配はないようで、このあたりが普及が家電止まりになる大きな要因と言えるかもしれません。


2006/10/30 10:59

槻ノ木 隆
 国内某メーカーのネットワーク関係「エンジニア」から「元エンジニア」に限りなく近いところに流れてきてしまった。ここ2年ほどは、企画とか教育、営業に近いことばかりやっており、まもなく肩書きは「退役エンジニア」になると思われる。(イラスト:Mikebow)
Broadband Watch ホームページ
Copyright (c) 2006 Impress Watch Corporation, an Impress Group company. All rights reserved.