Top > ComputerGraphics > XNA > PlayMovieInXNA > ToEncodeMovieForXNA
Last-modified: Mon, 16 Jul 2012 01:47:19 JST
Counter:4061 Today:1 Yesterday:1 Online:4
このエントリーをはてなブックマークに追加

XNA4.0対応形式に動画をエンコードする

About

 ここでは既存の動画を、XNA4.0で標準的に再生できる動画フォーマットへエンコードする手順を紹介します。基本的にはフリーソフトで完結するようにしていますが、所定のフォーマットへ変換することのできるソフトであれば、ここで紹介する以外のものを使っても何ら問題はありません。ただし、フリーで全て完結することのできるソフトはあまりないと思います。

 このページは「XNAで動画を再生する」の関連ページです。

 ここではサンプルとして「mp4形式」の動画を提供していますが、mp4形式などのファイルをAVI形式やWMV形式にエンコードする方法に関しては解説していません。

対応フォーマット

 XNAで標準的に再生できる動画のフォーマットは決められています。これについては「メディアの概要- MSDN」から確認することができます。動画フォーマットに関する内容を抜粋すると次の通りです。

  1. デジタル著作権管理(DRM)で保護されているビデオは使用できない
  2. VC-1標準を使用して、WindowsMediaVideo9メインプロフィールにエンコードされている
  3. 固定ビットレート(CBR)によってエンコードされている
  4. オーディオトラックが含まれている
  5. オーディオは単一パスCBRフォーマット、WindowsMediaAudio(wma)によってエンコードされている
  6. 次の表に対応する最大ビットレート以下である
    レベル最大ビットレートフレームレートによる代表的な解像度
    2 Mbps320 x 240 @24Hz(QVGA)
    10 Mbps720 x 480 @30Hz
    720 x 576 @25Hz
    20 Mbps1280 x 720 @30Hz

 つまり用意した動画をXNA4.0で再生・利用するためには、これらの条件を満たす形式にエンコード(変換)する必要があるわけです。

エンコードに利用するソフトウェア

 これらのフォーマット条件を満たす出力機能を備えたソフトに関しては、探せばいくつか出てくると思いますが、ここではMicrosoftがフリーで公開している「WindowsMediaエンコーダ9」を利用します。ダウンロードやインストールについては次のページを参考にして下さい。手持ちの動画編集ソフト等で対応できる場合は態々利用する必要はありませんが、ここでは解説しないのでフォーマット仕様に従って設定の後、出力する様にして下さい。

ここで扱うサンプル動画

 音声付でロイヤリティ(著作権)フリー、かつ動画サイズがそこそこ小さいものをWeb上で発見することができなかったので、ここでは筆者が携帯電話で適当に撮影した動画を利用します。色々と面倒なのでこのサンプル動画に対する著作権を主張する以外の一切の利用方法を許可するという条件で公開することにします。実際に撮影した動画であるとか、自ら製作した動画を利用することの方が実際のシチュエーションには近いでしょうから、結果的に良かったのかもしれません。

  • エンコード元の動画(一度AVI形式やWMV形式に変換しなければ利用できません)
  • エンコード後の動画
movie.png

AVIやWMV形式へ動画を変換する

 まずは「WindowsMediaEncoder9」の対応形式へ変換することが必要です。ここでは動画をAVI形式へ変換することを想定していますが詳細は解説しません。元々扱いたい動画が標準的なAVI形式やWMV形式で、WindowsMediaEncoderで読み込めるのであれば何の問題もありません。mp4ファイルなどは読み込めないので一度AVI形式に出力してしまうのが良いでしょう。ファイルサイズが著しく大きくなる問題がありますがしかたありません。ちなみにサンプル動画を未圧縮AVIに変換した所、2Gbyteを超えるサイズになりました。AVI形式で配布していないのはファイルサイズが大きいためです。

 ここでは解説しませんが、筆者は「AviUtl」を利用して動画をAVI形式へ変換しています。AviUtlはフリーソフトとして公開され、エフェクトや字幕の適用、変換のための多くの機能を備えています。

  • 「AviUtl公式HP」http://spring-fragrance.mints.ne.jp/aviutl/
    • このページの内容に関して、AviUtlに関連する一切の情報公開サイト・フォーラムなどで質問しないようにしてください。迷惑になることと思います。

WindowsMediaエンコーダによるエンコード手順

0.png

 「WindowsMediaエンコーダー9」の起動時の画面です。「ユーザ設定のセッション」から開始します。

1.png

 「セッションのプロパティ」画面が表示されます。タブを「ソース」に切り替えます。表示された画面の内、「入力ソース」のチェック項目を「ファイル」に合わせます。「ファイル名(参照)」にエンコード(変換)するファイルを指定します。ここでは先のステップで変換済みのAVIファイルを指定しています。WindowsMediaEncoder9で利用できるフォーマットである必要があります。

8.png

 「セッションのプロパティ」画面のタブを「ソース」から「出力」に切り替えます。表示された画面の「ファイルにエンコード」にチェックを入れます。この時、デフォルトでは「エンコードからプル」にチェックが入っていると思います。「ファイルにエンコード」にチェックを入れてなお、チェックが入っている場合は、「エンコードからプル」のチェックを必ずハズして下さい。

 「ファイルにエンコード」にチェックを入れたら「ファイル名(参照)」の項目に出力先とそのファイル名を指定します。

2.png

 画面のタブを「圧縮」に切り替えます。「配信先」を「ファイルに保存」にします。この時点で表示される「ビデオ」および「オーディオ」の項目は「VBR」とされていてXNAで標準対応しない形式(CBRでない、可変ビットレート)ですが、これから変更するので問題ありません。「ファイルへ保存」に切り替えたら「編集」から次の作業へ映ります。

3.png

 表示された「独自のエンコード設定」ウィンドウではエンコード方法を設定することができます。ここがここで紹介する作業の最も重要な部分になります。この画像は画面を表示した時の最初の設定のままになっています。

4.png

 エンコードの設定をXNAに対応する様に変更していきます。まず「メディアの種類」の項目「オーディオ」のモードを「CBR」に変更しましょう。これで固定ビットレートになりました。さらに隣の項目「コーデック」も変更します。標準状態では「Windows Media Audio 9.2 Lossless」となっていましたが、「Windows Media Audio 9.2」に切り替えます。  次いで「ビデオ」の項目も変更します。「モード」は例によって「CBR」に切り替えます。コーデックは「Windows Media Video 9」です。これで最低限の設定は完了しましたが、更に品質の設定を行わないと、意図したものとは異なるエンコード結果になる可能性があります。

5.png

 「独自のエンコード設定」画面には「全般」タブ以外にもう一つタブが用意されています。ここでは「429Kbps」タブとなっています。もう一方のタブに切り替えます。オーディオの形式や動画の形式を設定するための画面が表示されます。画像はデフォルトの状態です。

6.png

 「オーディオ形式」に関しては「…CBR」が付けば(固定ビットレートである)いずれでも問題ありませんが、ここでは最高品質のもの(標準)を選んでいます。その他は知識がない限り「ビデオビットレート」のみ弄るようにしましょう。ビットレートは単純に画質の設定に繋がります。一般にファイルサイズとトレードオフになります。最高画質に設定するにはXNAで対応するギリギリの所まで値を引き上げれば良いし、逆に品質を下げてでもファイルサイズを小さくしたいのであれば、それに従って調節します。XNAでは最大「20Mbps」まで対応しています。これはオーディオ情報を含めた合計値で、現在の設定の合計値は「合計」の項目に示されています。この項目が20Mbpsを超えないように「ビデオビットレート」の項目に値を設定します。ここでは最高品質ギリギリの19Mbpsを設定しました。

7.png

 先の設定を終えて「OK」を実行すると、元の「圧縮」の画面にコントロールが戻ります。各項目が「ユーザ設定」になっているのを確認してください。また詳細に設定した内容が反映されているのが確認できます。設定に不備がなければ「適用」して上部メニューの「エンコードの開始」からエンコード(変換)を開始します。

9.png

 エンコード中の画面です。動画と音声が再生されますが「停止」を実行しないようにしてください。処理が中断されます。エンコード中はしばらく待機しておきます。

10.png

 エンコードが完了すると「エンコードの結果」画面が表示されます。適切に終了されていれば先に設定した出力先にエンコードされたファイルが出力されているはずです。そのファイルをXNAのリソースとして取り込みましょう。ここでは「test.wmv」ファイルとなっています。

 エンコードのエラーに関しては別途、WindowsMediaEncoder9の操作方法について検索するなりして調べてください。

 ビットレートを上げたからといって無条件に動画が"綺麗"になるわけではありません。エンコード前の動画が元より低ビットレートであったりすることも考えられますし、圧縮方法も異なるためです。動画の内容によっても見た目は大きく左右されるでしょう。極端なことを言えば、ファイルサイズは3倍、4倍と異なるのに、見た目が殆ど変わらない動画が出来あがる可能性もあります。ファイルサイズと動画の質は確かにトレードオフですが、全て最大ビットレートでエンコードすれば良い、というわけではないのです。

References