Expression Encoder 2 SP1 SDK - H.264 エンコードと制限事項など
こんにちははらだんです。今日は Expression Encoder 2 SP1 (以下 EE2 SP1) から使用できるコーデック、 H.264 を SDK を使用してエンコードしてみます。コンテンツは Vista 同梱の熊(bear.wmv)です。また EE2 SP1 SDK の制限事項についてもお伝えします。
独自のアプリケーションにてエンコードを行うには、準備として以下の環境が必要になります。
Expression Encoder 2 (Expression Encoder 2 試用版)
Visual Studio 2008 (Visual Studio 2008 Express Edition)
Expression Encoder 2 SP1 SDK は .Net Framework 3.5 が必要です。
インストールされていない場合には自動でインストールされます。
※ この記事を書いていて初めて気がついたのですが VS Express Edition と 試用版を使えばしばらくは無償にてエンコード アプリを試すことができる!(未確認です)
準備は OK でしょうか。さっそく VS にて以下のプロジェクトを開いてみます。
C:\Program Files\Microsoft Expression\Encoder 2\SDK\Samples\Simple\Simple.sln
このサンプル プログラムはWindows Vista に同梱のサンプル ビデオの熊 (Bear.wmv) をVC-1 コーデックの ASF 形式 (.WMV) に再エンコードするプログラムです。
たった数行であることに驚いたと思います。はらだんも驚きました。驚いてください。
今回はこのコードをちょっといじって H.264 に再エンコードするようにしてみます。
このプログラムに色を付ければ例えば定期的に特定のフォルダにある動画や音声ファイルをエンコードするアプリケーションやコマンドラインアプリケーションなのでバッチ処理による大量のエンコードアプリを作ることができます。
クラスの関係の説明
-----------------------
SDK のドキュメントが予想以上にさみしく、どうしたらよいものか途方にくれました。本当に申し訳ございません。説明が 1 行だけってありえません。
ばらばらになったガンプラのパーツを渡されて「足の一部です」と言われているような気分です。
今回使う部分だけでも紹介します。
Job クラス
-----
エンコードの動作を制御するためのクラスで、このクラスに登録した MediaItem クラスのオブジェクトがエンコードの対象になります。出力先のフォルダの指定、エンコードの開始(Encode())、エンコードの進捗を出すためのコールバックの設定などができます。
そういうわけで、Job クラスは EE2 SDK を使用したエンコード アプリでは必ず使います。
MediaItem クラス
-----
エンコードするソース コンテンツに関する情報を取り扱うクラスです。SDK の中で一番大きなクラスでソース コンテンツの情報を知ることもできます。エンコードを行うには、設定を記述する各種クラスのオブジェクトを用意し、 MediaItem クラスのプロパティに設定します。その後 MediaItem クラスのオブジェクトを Job クラスに設定することでエンコードの準備完了です。
今回はソースのエンコード設定を記述する VideoProfile / AudioProfile クラスのオブジェクトを準備します。このクラスも EE2 SDK を使用したエンコード アプリでは必ず使います。
VideoProfiles / AudioProfiles クラス
-----
コーデックの選択、ファイル コンテナの選択、ビットレート、画像サイズなどのエンコードの設定を行うクラスです。また、これらを簡単に設定できるストック プロファイルが用意されていて、これをコピーするだけで設定が完了します。また、MediaItem クラスは作成した時点でデフォルトのプロファイルが設定されています。ストック プロファイルは EE2 SP1 アプリケーション上で選択できるプロファイルと同一です。H.264 形式へのエンコードはストック プロファイルを使用します。
※ 制限事項:H.264 のエンコードは EE2 SP1 では以下の 2 つのストックプロファイルのみが使用できます。つまりこのプリセットの設定以外は使用できません。具体例としては出力の画面サイズは 640x480 か 320x240 のみとなります。ビットレートも固定です。が~ん。
将来的にはこの制限はなくなる方向のようですが現時点では未定です。
ストックプロファイル:
HardwareDeviceH264Large 640x480
HardwareDeviceH264Small 320x240
※制限事項:コンテナ(出力ファイル形式)について、ASF 形式で出力できれば Windows Media サービスにて H.264 のコンテンツの配信が可能となりますが、残念ながら H.264 のときには .mp4 のみとなります。が~ん。
◎ FileOutputMode.Mp4SingleFile
× FileOutputMode.AsfSingleFile
※制限事項:H.264 形式を使用する場合 AudioProfile は設定できず、AAC のみとなります。
Sample Code
MediaItem mediaItem = new MediaItem(@"C:\Users\Public\Videos\Sample Videos\Bear.wmv"); VideoProfile videoProfile = new VideoProfile(); videoProfile = VideoProfiles.HardwareDeviceH264Large; mediaItem.VideoProfile = videoProfile; Job job = new Job(); job.MediaItems.Add(mediaItem); job.EncodeProgress += new EventHandler<EncodeProgressEventArgs>(OnProgress); job.OutputDirectory = @"C:\output"; job.Encode();
----- static void OnProgress(object sender, EncodeProgressEventArgs e) { Console.WriteLine(e.Progress); } |
以上、エンコード方法でした。
次回は、VC-1 を対象に同様のプログラミングをデモンストレーションしてみたいと思います。
あと巷で噂になりそうな、無償版でどこまでできるのか、の検証もしてみたいと思います。
大人の事情によりどこまでできるか分かりませんが、限界ぎりぎりまで挑んでみたいと思っています。(もちろんご購入いただき存分にご利用いただきたいところですが、まずは評価して頂きたく思います。)皆さんもぜひ Expression Encoder を試してみてくださいね。
はらだんでした。