なぜ動画ファイルにはエンコードが必要か
エンコードが必要なのか?
今回は、「なぜ、手間のかかるエンコードが必要なのか?」「そもそもエンコードとは何なのか?」動画ファイルが多数あるがどう違うのか?」「エンコードの設定って複雑?」、そんな初歩的な疑問を解決していきます。
動画をWebで配信する場合、元の動画データをそのままWeb上で配信しようとするとデータ量が多すぎて、動画を視聴することができません。そこで、「エンコード(encode)」という動画データの圧縮作業が必要になります。
通常、Webで視聴する動画は1Mbps弱ぐらいのビットレート(データ量)になるのですが、元の動画データのビットレートはどのくらいかというと図1-1のようになります。
エンコードとは、元の動画データを10分の1から100分の1以下に圧縮して、Web上で視聴しやすい動画データに変換することをいいます。
また、動画データはネットワークのトラフィックに過大な負荷をかけます。例えば、「ニコニコ動画(http://www.nicovideo.jp/)」では、1日の中でピーク時に日本全国のネットワークトラフィック総量の約10%弱ぐらいを消費します。1つのサイトが、日本全体の約10%を消費するなんて、いかに負荷が大きいか!わかる良い例と言えるでしょう。
そのような理由で、できるだけ動画のデータ量を減らすために、エンコード作業が必要になるのです。
次にエンコードをする時、どの「コーデック(CODEC:映像圧縮技術)」を使用するかが問題になります。コーデックは、動画を使用する環境と画質、ファイル形式によって選択肢が違ってきます。
例えば、GyaOやYahoo!動画は、Windows Mediaコーデックを使ったWMVファイルで動画配信してWindows Media Playerで再生し、YouTubeやMySpaceは、Sorenson SparkまたはOn2 VP6コーデックを使ったFLVファイルで動画配信し、Flash Playerで再生することになります。
また、図1-2のようにネット上での動画の見せ方について、さまざまなファイル形式とコーデック・プレーヤーが用意されています。
コンテナファイルとは
「コンテナファイル」とは、物流で品物を入れて輸送するコンテナをイメージするとわかりやすいです。
コンテナの中にはいろいろな品物が入りますが、コンテナファイルも同様にいろいろなコーデック(品物と思ってください)が入ります。外見は同じコンテナ(avi)でも入っている中身(コーデック)が違うのがコンテナファイルとなります。図1-2のmovファイルやasfファイルもコンテナファイルです。
コンテナファイルには注意が必要です。同じaviファイルでも、Web上で配信できるaviファイルもあれば、配信できないaviファイルもあるからです。
例えば、DivXコーデック(1Mbps)のaviファイルはWeb上で配信できますが、Microsoft DV ビデオコーデック(25Mbps)のaviファイルはWeb上で配信すると重くて使い物になりません。でも、外見は同じaviファイルですのでご注意ください。
逆に、同じaviファイルなのにWindows Media Playerで再生できるaviファイルと再生できないaviファイルがあります。この場合、Windows Media PlayerがインストールされているPCに再生できないaviファイルのコーデックがインストールされていないことが主な原因になります。
でも、外見が同じaviファイルなのですから、どのコーデックが使われているかわからないと思います。そのような時に、コーデックを調べるフリーソフトがありますので、それを使用して、コーデックを調べます。主に「真空波動研(http://kurohane.net/)」などが知られています。
なお、movファイルも編集用のmovファイル(Apple Intermediate Codec)と動画配信用のmovファイル(H.264 Codec)などがありますので注意してください。
次は、エンコードについて説明します。
エンコードすると画質が悪くガッカリです!
動画データは、なぜデータ量が大きいかというと、1秒間に約24枚とか約30枚という静止画(フレーム)を高速で表示しているからです(1秒間30枚で10分間18,000枚)。
ここで今までのエンコードの歴史を簡単に説明しましょう。
データを圧縮するため、まず考えられたのが「フレーム数を減らす」ということです。次に、動画データの「画像サイズを小さくする」です。
しかし、1秒間30フレームを15フレームにして、画面サイズを縦横半分にしてもデータ量は8分の1しか減りません。100分の1以下にデータ圧縮なんてとても無理です。
そこで考えられたのが、動画1フレームごとに低画質化することでした。BMPファイルをJPEGやGIFファイルに変換するのと同じような発想です。動画1フレームごとに低画質で一定化し、1秒のデータ量を決める。これがCBR(Constant Bit Rate:固定ビットレート)となります。同じ画質のフレームが次々と表示されるイメージです(図2-1)。
ところが、ここで問題が発生します。ビットレートが低いと、画質が悪いのです。動画1フレームごとに低画質で一定化したので、画像上に水をこぼしたようにぼやけてしまいます。
この問題に対処すべく新しい圧縮技術が開発されました。これが、フレーム間圧縮(差分圧縮)というものです。1枚の画像(フレーム)内で圧縮するのでは限界があるので、複数フレーム間で連携して圧縮しようという発想です。
原理は、元となるキーフレームのデータと、次のフレームは動いた部分だけの小さな(差分)データから動画を構成して、データ量を圧縮しようというものです。キーフレームが普通のデータで、差分データが小さなデータとなるので、1秒間のデータ量が画像の変化に合わせて随時変化します。これがVBR(Variable bitrate:可変ビットレート)となります(図2-2)。
このVBRの登場により、動画の画質が劇的に向上し、データ量も劇的に圧縮することができるようになりました。
「CBR」と「VBR」、これが、第1のキーワードです。
次に可変ビットレートの場合、どのようにビットレートを変化させていくかが問題なります。
「1パスエンコード(1 pass encode)」と「2パスエンコード(2 pass encode)」、これが、第2のキーワードです。
1パスエンコードはエンコード作業を1回(パス)で処理し、画像の解析と圧縮処理を同時にするエンコード方法で、2パスエンコードはエンコード作業を2回(パス)で処理し、1パス目で画像の解析を行い、どういう画像かを調べ、2パス目で圧縮処理を行うエンコード方法です。
1パスエンコードより2パスエンコードの方が、倍の作業が発生するためエンコード処理に約2倍時間がかかります。しかし、2パスエンコードの方が高画質・高圧縮率となります。逆に、1パスエンコードの方がエンコード処理時間が短い分、2パスエンコードに比べて画質や圧縮率が低下します(図2-3)。
エンコード方法とソフトウエア
それでは、第1・2のキーワードを組み合わせて、エンコード設定します。
CBRは、ビットレートを一定にしたいライブ配信や、あまり動かない映像(講演会やセミナー映像など)の低ビットレート化に有効ですし、VBRは低ビットレートの環境で、できるだけ画質を向上させたい場合に有効です。
また、1パスエンコードと2パスエンコードはエンコードの処理時間に違いがあり、画質があまり重要ではない映像で即時性が必要ならば1パスエンコード、画質重視のCM動画配信などは、2パスエンコードとなります。
例えば、株主総会などのライブ配信は即時性が重要なのと、光回線やADSL等いろいろな回線で視聴できなければならないので、ライブ配信用エンコードPCの負荷と回線の負荷を抑えるために、1パスエンコードのCBRなどを採用します。また、企業サイトで企業CMを配信する場合は、低ビットレートと画質を優先させるため2パスエンコードVBRを採用します(wmvやH.264やOn2VP6など)。
次に、エンコードソフトウエアですが、ビデオ編集機能とエンコード機能が一緒になっている、プレーヤーにエンコード機能が追加されている、エンコード専用ソフトウエアなど多種多様です。
主なソフトウエアは、「Windows Media エンコーダ(無料)(http://www.forest.impress.co.jp/lib/pic/video/vdoenc/winmediaenc.html)」「Adobe Flash Video Encoder(有料・Flashにバンドル)」「Adobe Flash Media Live Encoder(無料)(http://www.adobe.com/jp/products/flashmediaserver/flashmediaencoder/)」「Cleaner(有料)(http://www.too.com/digitalmedia/index.html)」「ProCoder(有料)(http://www.canopus.co.jp/catalog/procoder/procoder20_index.php)」「Sorenson Squeeze(有料)(http://www.flashbackj.com/sorenson/index.html)」「QuickTime Pro(有料)(http://www.apple.com/jp/quicktime/pro/)」「TMPGEnc(無料・有料)(http://www.tmpgenc.net/ja/j_main.html)」「AviUtl(無料)(http://spring-fragrance.mints.ne.jp/aviutl/)」「WinFF(無料)(http://code.google.com/p/winff/)」「FFmpeg(無料)(http://www.xucker.jpn.org/keyword/ffmpeg.html)」「ffdshow(無料)(http://sourceforge.net/projects/ffdshow/)」「VirtualDubMod(無料)(http://virtualdubmod.sourceforge.jp/)」「FlasKMPEG(無料)(http://cowscorpion.com/MultimediaTools/FlasKMPEG.html)」「携帯動画変換君(無料)(http://mobilehackerz.jp/contents/3GPConv)」です。
ソフトウエア選択の目安は、どういうエンコードをしたいかと、オプション機能(エンコード設定や画質調整機能)の使いやすさなどです。
次は、このオプション機能(画質調整機能)について説明します。
PCのRGBとビデオの色味について
コーデック圧縮技術の飛躍的向上により、今までの「動画が動いていれば良い」から、「よりきれいに」という画質向上の要望が高まっています。現に、H.264やOn2VP6などは、細かい職人的エンコードセッティングをしなくとも、デフォルトで驚くほどきれいにエンコードしてくれます。
ところが、ビデオ映像を実際にエンコードしてみるとわかるのですが、ビデオをTVモニターで見るのに比べ、PCモニターの方が「くすんで見える」ような状態になります。特に、CM映像の動画配信では、そのようなクレームがクライアントから寄せられることがあります。
この原因はコーデックの問題ではなく、実は色味補正の問題なのです。結論からいうと、PCモニターの色味と映像信号の色味とで信号領域が違うからです。その違いとして、映像信号の白はPCモニター上では完全な白ではなく、映像信号の黒はPCモニター上では完全な黒ではないということが挙げられます。
専門的になりますが、Photoshopなどの設定でわかるように、PCモニターのRGBは0から255の256階調です。ところが、映像信号は16-235の220階調しかないのです(特に現在使われている地上波NTSC映像信号はそうです)。映像信号の黒はちょっとグレーっぽい黒で映像信号の白はちょっとグレーっぽい白なので、くすんで見えるのはそのせいです。
この問題については、映像信号の220階調をRGBの256階調に伸長してあげることで解決します。(図3-1)グレーっぽい黒を本当の黒に、グレーっぽい白を本当の白にし、そのほかの色も一緒に伸長してあげると本当の色味になります。
図3-2はcleaner(http://www.too.com/digitalmedia/index.html)というソフトウエアです。左の映像が元のビデオ映像で、右の小さな映像が左右に区切られていますが、区切られた左側が補正前の映像(左の大きい映像と同じ色味)、区切られた右側が補正後の映像です。違いは明らかです。
色味の補正方法
設定方法は、エンコードソフトによって違うのですが今回はCleanerを使って説明します。
フィルターセッティングボタンからビデオのタブを選択して、カラーカーブ(図3-3)を調整するだけです。白い方の235を255で出力してあげて、黒い方の16を0で出力してあげます。これで、220階調が256階調に伸長するわけです。
ほかのエンコードソフトでも同様の設定項目があると思いますので、確認してみてください。特に、CMや映画などの映像制作予算に余裕がある映像は、ビデオ編集時に映像信号をしっかり管理して制作していますので(NTSC映像信号など)、この220階調をRGBの256階調に伸長してあげるだけで、十分画質が取り戻せます。
次回は、映像素材の受け渡しについて説明します。動画配信を行っていると、えたいの知れない映像データを受け取る場合があります。この対処法についても説明します。
なお、本稿の執筆にあたって、以下を参考にしました。
「グーグル脅威論なんて、くだらない 特別対談 中島聡×西村博之」『ascii』ASCII(発行年:2007.12)
川上 一郎「デジタルシネマシアターのコントラストと階調再現 川上 一郎」『月刊 フルデジタルイノベーション』株式会社ユニワールド(発行年:2007.10)