アドビ システムズ社
この記事の発端は、2006年5月に開催されたTODCON 8での私たち2人の会話でした。私たちは2人とも、Flash Videoの利用、誤用および可能性といったテーマの探求に多くの時間を費やしています。活動領域は異なりますが、私たちの仕事で大きく共通するところは、やり取りする会話や電子メールメッセージの多くが「このFlash Videoが動作しません」から始まることです。TODCONで私たちがメモを比較したところ、ほとんどの問題の原因はFlash Videoの技術ではなく、その作成と配布方法であることが分かりました。具体的には、Flash Video(FLV)ファイルを作成するときに、データ転送速度と帯域幅との密接な関係が理解されていないようです。
この記事では、この関係について説明し、それを取り巻く謎のいくつかを取り除きます。テーマへのアプローチ方法にかかわらず、実際はビデオを処理しているのではないことを理解する必要があります。 Flash Playerへのオーディオおよびビデオデータのストリーミングを行っているのです。
多くの点において、河川のダムの管理者であると言えます。 水門が正しく設置されていれば、ダムから流れ出した水は下流の堤防を越えることはありません。 水門が正しく設置されていないと、水は堤防を越えて、下流の町にあふれ出します。
これをビデオに置き換えた場合、水門が大きく開いていると、ビデオは再生して停止します。ビデオおよびオーディオデータの激流がFlash Playerに強い負荷をかけてしまいます。 プレーヤーはデータをバッファしてからリリースします。そのために、ビデオは停止してから開始するのです。 ほとんどの場合、これは、FLVファイルが作成されたときのデータ転送速度が大きすぎることを意味します。 私たちはよくこう言います。「データ転送速度を高すぎる値に設定するのは、虫にスイカを飲み込ませようとするようなものだ。」
もう1つの一般的な誤解は、Flash Videoの再生を制御するためにActionScriptコードを記述する必要があるということです。これは厳密には正しくありません。 記述するActionScriptコードによって制御されるのはデータストリームです。 NetStreamクラスのplay()およびpause()メソッドは、ストリームのオン/オフを切り替えます。しかし、これらのメソッドはビデオのオン/オフを切り替えません。これは、Flash Videoを扱う際に理解すべき重要な概念です。
この記事に書かれた操作を行うには、以下のソフトウェアが必要です。
Flashとビデオの一般的な知識.
FLVファイルを作成する前に、作業計画が必要です。 フルスクリーンビデオをエンコードするだけでは、ユーザが感心するほどの優れた技術を持っているとはいえません。 人々はあっという間にページを離れていき、愕然とすることでしょう。
最初の主要な考慮事項は、ユーザの帯域幅です。 事実、インターネットの世界では、未だに帯域幅に明白な格差があります。 大都市圏に住んでいる場合は、ケーブルモデムかDSLサービスによって高速インターネット回線にアクセスできるでしょう。 地方の場合は、ダイアルアップサービスである確率が高くなります。 ユーザの大部分が都市圏に住んでいると想定すれば、ビデオの物理的なサイズは320×240が適しているでしょう。その同じビデオが、ダイアルアップ回線では滞ります。ダイアルアップの場合、120×90のビデオがほぼ限界です。
使用すべき物理サイズが分からない場合は、次の大まかなガイドラインに従ってください。
注意: VGAサイズのファイル(640×480)は一般的に相当のビットレートでうまく動作しますが、非常に細かな設定が必要です。語り手の顔を映すビデオや動きが限定されたビデオが、この変換に最も適しています。
注意: ここでは、Flash Playerでの再生を目的にした FLVファイルの作成についてのみ説明しています。プレーヤーでサポートされる形式に最近追加されたH.264ビデオについては説明していません。このトピックについて詳しくは、David Hassounの記事「Flash Playerにおける高解像度H.264ビデオおよびAACオーディオのサポートについての説明」を参照してください。
準備処理の次のステップは、実際にビデオを見ることです。 QuickTimeまたはWindows Media Playerでビデオを開き、じっくりと見ます。 実際には、2回見ます。 初回は、ビデオ全体を通して楽しさの要素をシステムから得ることができます。 2回目は、ビデオの中のアクション、画像の品質、カラー、オーディオに十分に注意します。 これらの要素すべてが、Flash 8 Video Encoderで行う最終的な圧縮に重大な影響を及ぼします。
ビデオの内容についてよく把握したら、ビデオの長さ、サイズ、フレームレート、ビデオの作成に使用されたオーディオおよびビデオコーデックをメモします。 Windows Media Playerでこれらの設定を見るには、ファイル/プロパティを選択します(図1)。QuickTimeでは、ウィンドウ/ムービーの情報を表示を選択します(図2)。
図1: Windows Media Playerでは、FLVファイルを作成するときに使用する貴重な情報が数多く得られます。
図2: QuickTimeでは、ウィンドウ/ムービーの情報を表示を選択して、ビデオのプロパティを表示します。
ビデオのサイズとフレームレートが、最も重要な情報です。 FLVを元のビデオよりも大きくしようとすると、品質が低下する問題に陥ります。 ビデオを大きいサイズに変更することは、Adobe Photoshop®画像のサイズを変更することと同じです。つまり、大きくなるのはピクセルだけなので、その結果、画像の品質は著しく低下します。 また、アスペクト比も考慮してください。 標準のビデオのアスペクト比は4:3です。ビデオの比率を変更するとゆがみが生じます。
最後のポイントについては、次のような話がありました。 2、3ヶ月前、やってきたあるユーザが、私たちが間違った情報を広めていると非難しました。 ただ単に、彼のビデオがうまく動作しないとのことでした。 実際、4:3のアスペクト比を使用していたにもかかわらず、画像はゆがんでいました。 私たちがビデオのサイズを見ると、200×177でした。常にビデオを正常に再生するには、前述したサイズを使用してください。
次に、フレームレートを考慮する必要があります。 放送用ビデオカメラと多くの家庭用ビデオカメラでは、ビデオはNTSC標準レートの29.97フレーム/秒(fps)(一般的には30 fps)で記録および再生されます。 もう1つの放送規格であるPALのフレームレートは、25 fpsです。これはヨーロッパで一般的に使用されています。 どちらのフレームレートもFlash Videoには適しません。30 fpsまたは25 fpsのフレームレートは、Flash Playerには大抵の場合大きすぎます。 ビデオ撮影時のフレームレートが29.97 fps(30 fps)だった場合、15 fpsのフレームレートを使用してFLVを作成します。 ビデオがPAL規格を使用して撮影された場合、12 fpsのフレームレートが適切です。 ビデオに速い動きや遷移が多数ある場合は、より速いフレームレートが必要になる場合もあります。素材に合わせて判断してください。 速いフレームレートを設定する場合は、ビデオファイルの物理的なサイズを小さくしたり、ビットレートを低くしたりするなどして、別の点で最適化を図る必要があります。
640×480以上のビデオを使用するとフレームレートは低下しますが、再生はよりスムーズになります。ビデオチュートリアルを作成する場合、オーディオ付きのQuickTime画面で構成すると、通常FLVは800×600になります。この場合、ビデオ内の動作(マウスの移動、パン、ズーム)は最低限に抑え、FLVの出力フレームレートを10フレーム/秒にします。
最後に、DVフォーマット自体やMPEG 4、H.264、AVIなどの一般的なオンラインコーデックなど、ほとんどのビデオコーデックではデータの損失が発生します。 つまり、ビデオを圧縮してファイルサイズを小さくするときに、情報が失われます。 FLVファイルの作成では、既に圧縮されているビデオがさらに圧縮されます。 これは、PhotoshopやFireworks®でJPEG画像にJPEG圧縮を適用するのとまったく同じ影響があります。 最終的に、ビデオが少しぼやけてしまいます。 多くのサイトでは非常に明瞭なビデオを見ることができますが、それらのほとんどはプロによって撮影され、データ損失のないコーデックを使用してデジタル化されてから、Flash CS3 Video Encoderでエンコードされています。Macintoshの場合、データ損失のない一般的なコーデックは、AppleのQuickTimeアニメーションおよびビデオコーデックです。Windowsの場合、非圧縮AVI形式です。これらのコーデックを使用して映像を編集または合成し、それをFLVにエンコードします。これは、統合された高品質な最終バージョンをFLVにエンコードし、品質を低下させる複数のエンコーディングパスを避けるためです。重要なのは、最終的なFLVのファイルサイズであり、ビデオファイルではありません。
サードパーティのビデオ供給会社を利用する場合は、データ損失のないコーデックを適用するように依頼します。ビデオの作成または仕上げにAdobe After Effects®、Adobe Premiere® ProまたはFinal Cut Proを使用する場合は、ビデオコーデックまたはアニメーションコーデックを使用してQuickTimeムービーを作成することをお勧めします。ビデオにアルファチャネルが含まれている場合は、「色深度」を「数百万色+」に設定したアニメーションコーデックを使用してください。ビデオの場合、経験的に、QuickTime形式のほうがWMVおよびAVI形式よりも優れた結果が得られます。
ビデオ編集アプリケーションからビデオを直接FLV形式にエクスポートすることは避けてください。 デジタルビデオ(DV)映像出力を編集アプリケーションから直接エクスポートした場合によく見られるもう1つの問題は、インターレースです。インターレースとは、各ビデオフレームを2つの独立したフィールド(互い違いのピクセル行)に分割して走査する方式ですが、これによってエンコーディングに大きな障害が発生し、ファイルサイズが大きくなります。 常に、ビデオのノンインターレース(プログレッシブ)バージョンをレンダリングしてから、FLVにエンコードしてください。 そうすることで、コンピュータスクリーン、ハンドヘルド機器、電話(いずれにしても一般にビデオはプログレッシブフレームとしてのみ表示される)で再生するときに、インターレースによって起こる可能性があるゴーストの影響を排除できます。
準備で最後に決定するのは、対象とするFlash Playerのバージョンです。 Flash Player 8および現在のFlash Player 9は通常よりも早く採用されていますが、実際は、Flash Player 6およびFlash Player 7のほうが広く浸透しています。 また、企業のシステム環境で作品を表示するユーザが多いことも考慮してください。 企業のIT部門では、通常、Flash Player 8またはFlash Player 9の採用までに時間がかかります。ほとんどのIT部門には、企業が所有するコンピュータへのソフトウェア(ブラウザのプラグインも含む)のインストールに関し、厳格な企業内ルールがあります。 主に企業のシステム環境で視聴される場合、Flash Player 6またはFlash Player 7を対象にする必要があります。
対象とするFlash Playerによって、プロジェクトデザインおよび使用できるコーデックが大きく変わってきます。 Flash Player 8またはFlash Player 9を対象にする場合、次のことが可能です。
Flash Player 6またはFlash Player 7を対象にする場合、次のことが可能です。
準備が完了し、帯域幅戦略、ビデオのサイズおよびフレームレートが決まりました。 ここまで決まっていれば、後はFLVファイルの作成に集中できます。
よく耳にする不満に、次のようなものがあります。 「いつもデフォルト値を使っているのに、うまくいきません。 どういうことなのでしょうか」デフォルト設定の使用は手榴弾を投げているようなものだから、というのがその答えです。 Flash 8 Video Encoder設定のデフォルト値は、一般的な用途に合わせた大まかな概算値でしかありません。
「Encoding Settings」ペインで、次の設定を行ってください。
図3: デフォルトを無視し、ファイルに名前を付け、「ビデオ」タブをクリックします。
「ビデオ」をクリックして、Flash Videoエンコーディング設定パネルを開きます。ここでは、使用するコーデックを始めとして、非常に重要な決定をいくつか行う必要があります。ビデオコーデックポップアップメニューの2つのコーデックは、Sorenson SparkとOn2 VP6です。前述のように、選択すべきコーデックは、対象とするFlash Playerのバージョンによって決まります。On2 VP6は、Flash Player 8およびFlash Player 9での再生を対象としたプロジェクトの場合にのみ選択します。プロジェクトにアルファチャネルが含まれている場合は、Flash Player 8またはFlash Player 9を対象とします。Flash Player 7以前の場合は、Sorenson Sparkのみを選択できます。
ここで、FLVファイルのフレームレートを選択する必要があります。フレームレートポップアップメニューをクリックすると、エンコードするビデオと同じフレームレートから30 fpsのフレームレートまで、多くの選択肢が表示されます。QuickTimeまたはWindows Media Playerでビデオをプレビューしたときに作成したメモをチェックします。 ほとんどのアプリケーションでは、フレームレートは12または15 fpsにします。
注意: あらゆるルールと同様、このルールにも例外があります。 私たちは、スクリーンキャプチャソフトウェアを使用して、ビデオチュートリアルをいくつか用意しました。 これらのキャプチャは通常は物理サイズ640×480で行われ、ブラウザでの再生をスムーズにするために、ビデオチュートリアルのフレームレートは5 fpsです。フレームレートは、Frame Rateフィールドでの値の選択、およびキーボードを使用した値の入力によって、変更できます。
次に決定するのは、キーフレームの配置です。 このポップアップメニューでの選択肢は、「Automatic」と「Custom」です。
多くの点において、ビデオはタイムライン上の一連の画像のようなものです。 各画像を作成する必要があり、そのためにデジタルビデオのファイルサイズは、かなり大きくなります。 ビデオファイルのサイズとプロセッサへの負荷を小さくするために、デジタルビデオでは、キーフレームと差分(デルタ)フレームという2種類のフレームを使用します。
キーフレームには、完全な画像が含まれます。 差分フレームには、見ることができればですが、フレーム間の差分だけが含まれます。 壁の前を歩く人を撮影する場合、キーフレームはPhotoshopの画像のようになり、人と、壁の詳細すべてを含みます。 一方、差分フレームには壁は含まれません。変化しないからです。差分フレーム内の情報は失われたのではありません。保存されていて、ビデオの再生時にフレームに戻されます。
これは、FLVファイルの最終的なファイルサイズに大きな影響を及ぼすため、理解する必要がある重要な概念です。 ビデオがキーフレームのみで構成され、15 fpsでエンコードされるとします。ビデオの各フレームが15KBの場合、ビデオは1秒で225KBになります。ここで、1秒ごとに1つのキーフレームを使用してみましょう。すなわち、フレーム1および15には完全な画像が配置されますが、その間の13フレームは差分フレームとなります。分かりやすいように、それぞれのファイルサイズを5KBとします。変化しないものは削除されるためです。その1秒のクリップのファイルサイズは、95KBにまで小さくなります。
On2 VP6コーデックおよびSparkコーデックでは、キーフレームはさらに分散されます。 例えば、300フレームごとに1つのキーフレームが配置されることも珍しくありません。 このことを計算してみれば、通常のFLVファイルが元のビデオの約10%のファイルサイズになる理由が、はっきりとわかります。
15 fpsで再生されるビデオの300フレームには、ビデオの20秒ごとに1つのキーフレームがあります。 前述の例を使うと、1秒ごとに1つのキーフレームがあるビデオのサイズは1.9MBになります。 キーフレームが300フレームごとに配置されるFLVファイルは、1.5MBのファイルサイズの20秒のビデオになります。
FLVの品質とキーフレームに関係するもう1つの要因は、ビデオ内の動きです。 疾走するF1レーサーや多数のパンおよびズームがビデオに含まれる場合、キーフレームの間隔を狭める必要があります。 農園の1本の木しかビデオに含まれない場合は、品質を落とすことなくキーフレームの間隔を広げることができます。このような理由で、エンコーディングの前にビデオを見ることを提案しました。
デジタルメディアのすばらしい点は、ソフトウェアを使用する際に、頼りになる一定のルールがあることです。 最初のルールは、ソフトウェアの機能に任せるということです。 つまり、経験豊かなデジタルビデオ制作者でないかぎり、Flash CS3 Video Encoder設定の「自動」オプションを選択するのが最適です。「Automatic」を選択すると、コーデックによってビデオ内の変化の多い領域(疾走するレーシングカー)やほとんど変わらない領域(畑の中の1本の木)がざっと確認され、キーフレームの配置が決まります。 SparkコーデックとOn2 VP6コーデックの大きな違いは、対象とするFlash Playerのバージョンは別として、On2 VP6コーデックのほうが一般にSparkよりも少ないキーフレームで優れた結果をもたらす点です。
図4: コーデック、フレームレート、キーフレーム配置の選択が、処理の最初のステップです。
FLVファイルのサイズをさらに小さくする必要がある場合、カスタムキーフレーム間隔を指定して「Automatic」キーフレーム設定を無効にするとよいでしょう。 一般的なものであれば、まず5秒間隔に設定してみます。対象のフレームレート(上記の例では15 fps)に単純に5(秒)を掛けます。その結果(この例では75フレーム)をKeyframe Intervalフィールドに入力します。 ビデオの品質がよくない場合は、間隔を1秒(15フレーム)短くして、もう一度試します。 残念ながら、異なるキーフレーム設定をプレビューする最適な方法は、異なる間隔値のバージョンをそれぞれレンダリングし、目で見て比較することです。 しかし、これがFlash 8 Video Encoderでのバッチ処理があらゆるユーザに好まれている理由ではないでしょうか。負荷のかかる処理をコンピュータで処理できるように、レンダリングを設定してそれを夜通し処理させます。
Flash CS3 Video Encoderについて誤解が生じる部分があるとすれば、それはデータ転送速度が高いほど品質も高いと思われていることです。FLVファイルがローカルハードディスク上にあるという理想的な環境では、これは正しいかもしれません。しかし、視聴者と視聴者が見るFLVファイルの間にネットワークが存在する場合、データ転送速度は最も重要な考慮事項になります。 データ転送速度を1,000 kbps以上(!)に設定したにもかかわらず、FLV作成者はビデオの品質が低い理由が分からないと言って、私たちにビデオへのリンクを送ってくることがよくあります。 私たちを閉口させるのは、その転送速度はFLVのビデオ部分のみだということです。
データ転送速度を設定する場合、まず、ビデオには従来から2つのトラックがあるということを理解しておく必要があります。 画像はビデオトラックにあり、オーディオは別のトラックにあります。 ビデオのデータ転送速度は、オーディオのデータ転送速度とは別のものです。
FLVの合計データ転送速度は、ビデオのデータ転送速度とオーディオのデータ転送速度の合計になります。 例えば、Flash CS3 Video Encoderのデフォルト設定は、Flash 8- Medium Quality(400 kbps)です。「オーディオ」タブを開くと、オーディオエンコーダのデータ転送速度は96 kbpsに設定されています。したがって、結果のFLVファイルの合計データ転送速度は496 kbpsです。これは、Web再生よりも企業のLAN環境に適しています。 この記事の最初に示したダム管理者のたとえで言えば、そのレートでは水門は大きく開いてしまい、ダム下流の町は最悪の日を迎えることになります。
魔法の数字はいくつでしょうか。 高帯域幅の環境では、ビデオのデータ転送速度とオーディオのデータ転送速度の合計を350 kbps未満にするとよいでしょう。 ダイアルアップの環境では、合計を100 kbps以下にします。
ここから次の疑問が生じます。 ビデオ部分だけの魔法の数字はいくつでしょうか。 答えは、ブロードバンドでは200~300 kbps、ダイアルアップでは約60~70 kbpsです。視聴者の大部分がローカルネットワーク(イントラネットサイトなどの内部Webアプリケーション)を使用する場合、大抵は400~600 kbpsで問題ありませんが、このビットレートが帯域幅の制約の影響を受けないようにするには、ほぼ完璧なネットワークおよびクライアント/視聴者環境が必要となります。 ビットレートの設定について特定の魔法の値を提示できればよいのですが、動きやズーム/パン移動が多く、物理サイズも大きいビデオの場合は、前に述べたような「畑の中に木が1本立っている」ビデオよりも高いレートが必要になる場合があります。 最適な結果を得るには、美的品質と、現実のネットワークの制約およびビデオの内容とのバランスを取る必要があります。
図5: ビデオのデータ転送速度は約300 kbpsで開始します。
ここで注意していただきたいのは、非常に高いビットレート設定でエンコードされたFLVファイルをプレビューすると、デスクトップで(おそらくLANネットワークで配布された場合でも)高速再生されるため、誤った充足感に陥りがちです。 しかし、平均的なユーザのことを考慮し、視聴者の実際の接続速度を反映したビットレート設定を尊重するようにしてください。
ビットレートの問題でFlash Playerが再生を維持できない状況になった場合、Flash Player自体で対処して、視覚上の品質またはフレームレート、あるいはその両方を低下させることがよくあります。 ネットワークのトラフィックおよび速度がビデオの品質に影響しないようにしてください。エンコードされたビットレートがすべての人にとって適切であるようにするためには、妥協するつもりでいてください。
オーディオのデータ転送速度についても、大きな決定事項があります。 モノラルサウンドにするか、ステレオサウンドにするかという選択です。 48または64 kbpsのモノラルレートをお奨めしますが、これは私たちが音に対して鈍感だからではありません。モノラルサウンドトラックの方が必要な帯域幅が小さくなるからです。 ステレオよりもモノラルを選択して、実用性を重視することもよい考えでしょう。 オーディオのほとんどが話し声の場合は、48 kbpsが適当です。しかし、複雑なサウンド(例えば、サウンドトラック、音楽、サウンドエフェクトなど)が映像に含まれる場合、オーディオの大切なニュアンスを保つために64 kbps以上で対応する必要がある場合があります。 しかし、現実を考えてみてください。 突き詰めて考えると、平均的な視聴者にはステレオとモノラルの音質の違いは分かりません。スピーカーの電子機器を収納するキャビネットの方が電子機器自体よりも高価な場合が多いのです。
図6: ほとんどの場合、Flash Videoにはモノラルサウンドで十分です。
注意: この記事で説明している基本的な設定を超えて、さまざまな設定を試す場合は、Robert Reinhardtの優れたFlash Video用ビットレート計算機をお試しください。
Flash Player再生用FLVファイルの作成に関する微妙な差異と決定事項について、感化することができたら幸いです。 このように、FLVファイルの作成は、単純にFlash CS3 Video Encoderのプリセット値を選択してFLVファイルをレンダリングするだけではありません。
最後に1つの助言をして、締めくくりたいと思います。 ここで挙げた提案は、ガイドラインです。 つまり、自由に実験してください。Flash Videoに関して言えば、デジタルメディア物理学の最初のルールが関わっています。それによれば、 すべてのアクションには、同時に正反対の意地の悪い含意が存在します。 これであなたは、ビデオが停止して再開したり、ぼやけたり、奇妙な動作をしたりする現象が起きた場合、その原因を理解する出発点と(願わくば)自信を得ました。 そして、それを修正する方法を知っています。
Flash Videoおよびエンコーディングの詳細については、以下のリソースを参照してください。