次の方法で共有


自己表現

自己表現 - Microsoft Expression Encoder 3 SDK を使用してビデオをエンコードする

Adam Miller

これまでに見たお気に入りの映画の 1 シーンに、(「クリスマス バケーション」で Chevy Chase 演じる) Clark W. Griswold がクリスマス プレゼントを隠しているときに、屋根裏部屋に閉じ込められてしまう場面があります。彼は保温のために、ピンク色の手袋、緑色の帽子、そして茶色のファー ストールを埃だらけのチェストから引っ張り出して身に着けます。このときチェストの底に、若いころ撮影したホーム ビデオを見つけ、古い映写機を使って (涙を流しながら) ビデオを見て時間をつぶします。

ホーム ビデオはあれから大きな進歩を遂げましたが、撮影したビデオを友人や家族に見せるにはどうすればよいか、というのは今も変わらぬ問題の 1 つです。YouTube、Vimeo、Facebook のようなサイトではビデオを簡単に共有できますが、高解像度ビデオになると 1 分間に 100 MB 余りしか転送できないため、こうしたサイトにデータを転送する作業には多くの時間がかかる可能性があります。おそらく、お使いのポータブル デバイス、ゲーム機、ホーム シアター メディア センターでは、ファイルを再生することさえできないでしょう。こうした問題を解決するには、ビデオを別の形式に変換する必要があります。この処理をエンコードと呼びます。

Expression Encoder について

マイクロソフトはビデオ エンコード ツールとして Expression Encoder 3 をリリースしており、このツールは Web アプリケーションとデスクトップ アプリケーションの魅力的な UI を作成する Expression 製品ファミリに含まれています。Expression Encoder には無償版と有償版があり、有償版は Expression Studio 3 スイート (599 ドル) と Expression Web 3 スイート (149 ドル) に付属しています。無償版のダウンロードでは、Silverlight Smooth Streaming ビデオや H.264 ビデオへのエンコード、およびソースとしての H.264 ビデオの使用はサポートしていませんが、Windows Media ビデオ ファイルへのエンコードをサポートしており、すばらしい SDK もあります。この記事で紹介する多くのコード サンプルには有償版のプログラムが必要ですが、すべてのコード サンプルを無償版の SDK でビルドする予定です。そのため、実行時に InvalidMediaException や FeatureNotAvailableException を受け取ることになります。

Expression スイートの購入予定がなければ、microsoft.com/expression (英語) から Expression Encoder の無償版をダウンロードして作業を開始できます。また、Expression Professional MSDN Subscription または Visual Studio Professional with MSDN Premium Subscription を通じて入手することもできます。このような機能セットを含み、さまざまな入力形式や出力ターゲットをサポートしているプロフェッショナル ビデオ エンコード ソフトウェア アプリケーションが 149 ドルというのは、比較的割安です。同様のビデオ エンコード ソリューションの中には 3,000 ドルを超えるものもあります。

有償版と無償版のどちらを選択しても、Encoder 3 QFE のインストールが必要です。Encoder 3 QFE をインストールすると、新たなファイルの種類と入力デバイスに対するサポートが追加され、特定の状況でパフォーマンスが向上します。また、軽微なバグ修正も含まれています。QFE インストーラーは、Microsoft Expression Web サイトの Expression Encoder ページにあります。

サポート対象の形式

サポート対象のビデオ入力形式は、次のとおりです。

  • Windows Media ビデオ (.wmv)
  • DVD ビデオ (.vob)
  • MPEG (.mpg、.mpeg)
  • Audio Video Interleave (.avi)
  • Microsoft Digital Video Recording (.dvr-ms)

有償版では、次の形式 (および他の少数の形式) のサポートが加わります。

  • MPEG-4 (.mp4、.m4v)
  • QuickTime (.mov)
  • AVC HD (.mts)
  • モバイル デバイス ビデオ (.3gp、.3g2)

大筋のところでは、Expression Encoder は Windows Media Player で再生できるすべてのメディア ファイルをサポートします。さらに多くのファイルをサポートするのであれば (および Windows Media Player でそれらのファイルを再生できるようにするのであれば)、K-Lite Codec Pack (codecguide.com、英語) や Community Combined Codec Pack (cccp-project.net、英語) などのコーデック パックをインストールできます。どちらもオープン ソースの ffdshow プロジェクトに基づいており、VP6 エンコードされたフラッシュ (.flv) ファイル、Matroska (.mkv) コンテナーの H.264 ビデオ、および Ogg (.ogg) ビデオ ファイルに対するサポートを追加します。

無償版の Expression Encoder は、出力コーデックとして Microsoft VC-1 のみをサポートします。ただし、Silverlight (単一ビットレートのみ)、Xbox 360、Zune、および Zune HD のビデオは依然としてエンコードできます。また、VC-1 コーデックはなかなかよくできており、VC-1 コーデックの圧縮は (特定の状況では H.264 以上とは言わないまでも) H.264 と同程度に優れています。有償版にアップグレードすると、Silverlight Smooth Streaming ビデオ (マルチビットレート) および H.264 を出力できます。つまり、iPhone、PS3、Flash Player (バージョン 10 では H.264/.mp4 をサポートします)、および他の無数のデバイスで再生できるビデオをエンコードできます。

エンコードの基礎

特定の出力デバイスをサポートするには、ビデオ プロファイル設定の一部を変更する必要があるため、ビデオ エンコードの基礎について理解しておく必要があります。ビデオの再エンコードとは、実際には、ビデオの圧縮を解除してから別のコーデックを使用して圧縮し直すか、サイズ、縦横比、フレーム レートなどの属性を手動で変更する処理です。無損失圧縮という手法もありますが、圧縮後のビデオ ファイルが非常に大きいままになるため、めったに使用されません。そこで、ビデオを格納 (および転送) するために必要な容量を減らすために、コーデックと呼ばれるアルゴリズムを使用してビデオを圧縮および圧縮解除します。その後、圧縮されたビデオ ストリームは、(WMV や MP4 などの) コンテナーと呼ばれる仕様に従って格納されます。多くの場合、コンテナーとコーデックは相互に排他的なコントラクトではないので、H.264 が MP4 コンテナーの最も一般的なコーデックですが、他のコーデックを使用することもできます。

ビットレート (キロビット/秒) は、圧縮されたビデオの格納に使用するデータ量を定義します。ビットレートを減らすと、より高いレートでビデオを圧縮するようにエンコーダーに指示され、ビデオ品質が低下します。ビデオのビットレートを決定する方法をエンコーダーに指示するには、さまざまな方法があります。最も簡単な方法は固定ビットレート (CBR) を使用することです。CBR により、エンコーダーはビデオの各 1 秒にそれぞれ同量のデータを使用するよう強制されます。可変ビットレート (VBR) を使用すると、ファイルのビットレート全体をどのようにするかをエンコーダーに指示できますが、エンコーダーはビデオの特定のセクションに必要なデータ量に基づいてビットレートを上げたり下げたりすることができます。制約付きの可変ビットレートでは、使用する平均ビットレートだけでなく、上限となる最大ビットレートも指定します。この点を除けば、制約なしの VBR と同じです。

制約付きの可変ビットレートは、Silverlight Smooth Streaming ビデオをエンコードするときに便利です。これは、ビットレートがクライアントの帯域幅を超えないように、クライアントからより低品質のストリームを要求させるのに役立ちます。CBR と VBR は、ビデオ ファイルのサイズ全体を指定することで、使用する圧縮の量を示します。

また、品質ベース VBR を使用するようにエンコーダーに指示することもできます。品質ベース VBR では、ビデオ全体のサイズではなく、圧縮解除されたソース ビデオで維持する品質の割合 (つまり、データ量) を指定します。たとえば、漫画のようなアニメーションであれば、自然を撮影したビデオやアクション満載のビデオに比べて、データ量が少なくても高い品質が維持されます。このため、高品質のソースがあり、このソースを最高の品質を維持したまま別の形式に変換することが目的の場合は、品質ベース VBR の使用を検討してください。このような定義は氷山の一角にすぎませんが、中核となるのは出力の設定を選択することです。エンコードのその他の定義については、今回の記事でコード サンプルに定義を適用するときに説明します。

SDK の使用

コード サンプルを確認するには、高品質のビデオを使用します。高解像度ビデオが手元になければ、microsoft.com/japan/windows/windowsmedia/musicandvideo/hdvideo/contentshowcase.aspx からすばらしい HD ビデオをいくつか入手できます。ここでは、コード サンプルのソースとして Adrenaline Rush ビデオを使用します。

Expression Encoder 3 をインストールしたら、新しい Visual Studio C# コンソール アプリケーション プロジェクトを作成します。\Program Files (x86)\Microsoft Expression\Encoder 3\SDK にある Microsoft.Expression.Encoder.dll と Microsoft.Expression.Encoder.Utilities.dll への参照を追加します。また、WindowsBase への参照を追加する必要もあります。WindowsBase は、[参照の追加] ダイアログ ボックスの [.NET] タブにあります。使用するクラスの多くは Microsoft.Expression.Encoder 名前空間に存在するため、Microsoft.Expression.Encoder 名前空間に対する using ステートメントを追加します。

インスタンスを作成する最初のアイテムは、MediaItem オブジェクトです。MediaItem コンストラクターは、唯一のパラメーターとして文字列を受け取ります。次のように、エンコード プロジェクトのソースとして、使用するファイルへのパスを渡します。

MediaItem src = new MediaItem(@"C:\WMdownloads\AdrenalineRush.wmv");

MediaItem オブジェクトの作成にはほんの 1 ~ 2 秒しかかかりません。ただし、ソース ビデオの高さ、幅、フレーム レート (個々の画像を画面に表示する頻度)、再生時間など、ソース ビデオに関する情報を収集するかなりの量の作業が SDK によって自動的に行われています。オーディオ ストリームに関する情報もこの時点で収集されます。

次に、(パラメーターなしのコンストラクターのみを保持する) Job クラスのインスタンスを作成し、作成した MediaItem を MediaItem の一覧に追加します。Job クラスは、目的の出力形式 (プロファイルと呼びます) のマネージャーとして機能します。

Job job = new Job();
job.MediaItems.Add(src);

ここで、エンコード時に使用するオーディオ プロファイルとビデオ プロファイルを job に指示する必要があります。最も簡単な方法は、UI で定義されたいずれかのプロファイルを使用することです。たとえば、Zune HD のビデオを作成するには、次のように VC1ZuneHD プリセットを使用できます。

job.ApplyPreset(Presets.VC1ZuneHD);

最後に、出力ディレクトリを指定して、エンコード処理を開始します。

job.OutputDirectory = @"C:\EncodedFiles";
job.Encode();

Program.cs ファイルは、図 1 のようになります。

図 1 Zune HD のビデオの作成

using Microsoft.Expression.Encoder;

namespace TestApp
{
  class Program
  {
      static void Main(string[] args)
      {
          MediaItem src = new MediaItem
              (@"C:\WMdownloads\AdrenalineRush.wmv");
          Job job = new Job();
          job.MediaItems.Add(src);
          job.ApplyPreset(Presets.VC1ZuneHD);
          job.OutputDirectory = @"C:\EncodedFiles";
          job.Encode();
      }
  }
}

アプリケーションを実行する前に、作業がもう 1 つ残っています。つまり、64 ビット版の Windows を使用している場合、x86 にビルドするようにプロジェクトを変更する必要があります。Visual Studio で [プロジェクト] メニューの [(プロジェクト名) のプロパティ] をクリックします。開いたダイアログ ボックスで [ビルド] タブをクリックし、[プラットフォーム ターゲット] を [Any CPU] から [x86] に変更します。

これで、アプリケーションを実行し、Zune HD で再生できるビデオを作成する準備ができました。エンコード処理は完了までに数分かかり、CPU を非常に集中的に使用します。ビデオのエンコードはコンピューターでの並列タスクのメリットを活かせるため、ここではマルチコア コンピューターを使用すると大きなメリットが得られます。

また、Expression Encoder には、YouTube、Vimeo、Facebook などのオンライン サービスにエンコードするためのプリセットもあります。私の Panasonic Lumix DMC-ZS3 デジタル カメラで録画した 720p ビデオは、録画済ビデオ 1 分あたりおよそ 110 MB を使用します。YouTube HD プリセット (720p) を使用してビデオを変換すると、このビデオがわずか 16 MB に縮小されます。そのため、アップロードやローカルでの保存がはるかに効率的になります。また、ビデオを .mp4 ファイルに変換すると、より多くのビデオ編集プログラムと互換性を確保できるようになります。

カスタム設定

VC1ZuneHD プリセットと同じ出力を手動で生成するには、図 2 のようなコードを使用してビデオ プロファイルとオーディオ プロファイルを設定する必要があります。図 2 のコードをコンパイルする場合、Microsoft.Expression.Encoder.Utilities と System.Drawing への参照を追加する必要があります。また、Microsoft.Expression.Encoder.Profiles と System.Drawing に対する using ステートメントを追加します。OutputFormat では、原則的に出力ファイルのコンテナーを指定します。「原則的に」と言ったのは、Silverlight のエンコード動作が若干異なるためです (後で簡単に説明します)。

図 2 Zune HD のビデオとオーディオ プロファイルの設定

MediaItem src = new MediaItem(@"C:\WMdownloads\AdrenalineRush.wmv");

src.OutputFormat = new WindowsMediaOutputFormat();

src.OutputFormat.VideoProfile = new AdvancedVC1VideoProfile();
src.OutputFormat.VideoProfile.Bitrate = new 
    VariableConstrainedBitrate(1000, 1500);
src.OutputFormat.VideoProfile.Size = new Size(480, 272);
src.OutputFormat.VideoProfile.FrameRate = 30;
src.OutputFormat.VideoProfile.KeyFrameDistance = new TimeSpan(0, 0, 4);
src.OutputFormat.AudioProfile = new WmaAudioProfile();
src.OutputFormat.AudioProfile.Bitrate = new 
    VariableConstrainedBitrate(128, 192);
src.OutputFormat.AudioProfile.Codec = AudioCodec.WmaProfessional;
src.OutputFormat.AudioProfile.BitsPerSample = 24;


Job job = new Job();
job.MediaItems.Add(src);
job.OutputDirectory = @"C:\EncodedFiles";
job.Encode();

VideoProfile では、使用するビデオ コーデックと、エンコード時に使用する詳細設定を指定します。同様に、AudioProfile では、使用するオーディオ コーデックと、その設定を指定します。VariableConstrainedBitrate を作成するときに、最初のパラメーターでは平均ビットレートを、2 つ目のパラメーターでは最大ビットレートを指定します。サイズの設定では、エンコードされたビデオが収まるボックスを示します。Adrenaline Rush ビデオの正しく拡大/縮小されたサイズは、縦横比を維持するために実際には 480x272 です。ただし、480x480 と入力しても、拡大/縮小後のビデオは 480x272 になります。

図 2 の KeyFrameDistance プロパティは、まだ説明していないビデオ エンコードの概念に関係します。ほとんどのビデオ エンコードは、ビデオ フレームごとに画像全体を格納するのではなく、フレームごとの変化のみを格納することで機能します。そして、キー フレームとは、画像全体を含むフレームのことです。このコードでは、4 秒ごとにキー フレームを作成します。キー フレームは、ビデオに大きな変化 (シーンの変更など) があるときに自動的に作成されますが、再生中にビデオ内を検索できるようにするため、あらかじめ定義された間隔でもキー フレームを作成します。

Silverlight Smooth Streaming

Silverlight Smooth Streaming は、現在のネットワーク状態を基に、再生中のメディア ファイルのビットレートを動的に切り替えます。Smooth Streaming プロジェクトは、.ismv ファイルに格納されている個々のビデオと、Smooth Streaming の再生をサポートする .ism メタデータ ファイルと .ismc メタデータ ファイルから構成されます。

Silverlight Smooth Streaming プロジェクトを作成するには、複数の変更を行う必要があります。まず、KeyFrameDistance を 2 秒に変更します。KeyFrameDistance が 4 秒のままでもビデオは再生されますが、プレーヤーによってビットレートが切り替えられるときに再生が一時的に中断することがあります。Silverlight プレーヤーは 2 秒のチャンクでビデオを要求するため、各要求の先頭にキー フレームがあると、より安定した再生が行われます。また、次の行を追加する必要もあります。

src.OutputFormat.VideoProfile.SmoothStreaming = true;

SmoothStreaming を true に設定すると、.ismv ファイルにビデオを出力して .ism ファイルと ismc ファイルを作成するようにエンコーダーに指示されます。ビットレートが 1 つしかなければ実際には Smooth Streaming プロジェクトにはならないため、複数の出力ビットレートを作成するために、VideoProfile に複数のストリームを追加する必要があります。これを行うには、図 3 のようなコードを使用します。

図 3 Silverlight Smooth Streaming の追加

MediaItem src = new MediaItem(@"C:\WMdownloads\AdrenalineRush.wmv");
src.OutputFormat = new WindowsMediaOutputFormat();

src.OutputFormat.VideoProfile = new AdvancedVC1VideoProfile();
src.OutputFormat.VideoProfile.KeyFrameDistance = new TimeSpan(0, 0, 2);
src.OutputFormat.VideoProfile.SmoothStreaming = true;
src.OutputFormat.VideoProfile.Streams.Clear();
src.OutputFormat.VideoProfile.Streams.Add(new StreamInfo(new 
    VariableConstrainedBitrate(2000, 3000), new Size(1280, 720)));
src.OutputFormat.VideoProfile.Streams.Add(new StreamInfo(new 
    VariableConstrainedBitrate(1400, 1834), new Size(848, 476)));
src.OutputFormat.VideoProfile.Streams.Add(new StreamInfo(new 
    VariableConstrainedBitrate(660, 733), new Size(640, 360)));

src.OutputFormat.AudioProfile = new WmaAudioProfile();
src.OutputFormat.AudioProfile.Bitrate = new 
    VariableConstrainedBitrate(128, 192);
src.OutputFormat.AudioProfile.Codec = AudioCodec.WmaProfessional;
src.OutputFormat.AudioProfile.BitsPerSample = 24;

Job job = new Job();
job.MediaItems.Add(src);
job.OutputDirectory = @"C:\EncodedFiles";
job.Encode();

このコードでは、エンコードする 3 つの異なるビットレートとサイズを指定しています。最適な品質にするには、ビットレートが減るにつれてビデオ サイズも縮小する必要があります。独自のビットレートを指定するときは、Expression Encoder 3 UI の IIS Smooth Streaming 設定を使用できます。ソース ファイルよりも高い解像度でビデオをエンコードしても品質を向上できないことに注意してください。また、あまり効率のよくない圧縮方法を使用している場合は、ソース ファイルよりも高いビットレートでエンコードすることだけに意味があります。SDK でソース ファイルのビットレートを判断できた場合、そのビットレートは MediaItem の SourceVideo Profile プロパティに存在することになります。

int bitrate = ((ConstantBitrate)src.SourceVideoProfile.Bitrate).Bitrate;

SDK でソース ファイルのビットレートを取得できなかった場合、ファイル サイズを基に、かなり正確にビットレートを見積もることができます。その数式は次のとおりです。

おおよそのビットレート (kb/s) = (ファイル サイズ (KB) * 8 /ビデオ再生時間 (sec)) - オーディオ ビットレート (kb/s)

System.IO.FileInfo クラスを使用してソース ファイルのサイズを取得し、SDK を使用して再生時間 (MediaItem.FileDuration プロパティ) とオーディオ ビットレート (可能な場合) を取得できます。オーディオ ビットレートがわからない場合は、128 または 160 を使用して見積もります (ほとんどのオーディオ ビットレートは 64 ~ 192 です)。また、Windows Media Player の [プロパティ] ダイアログ ボックス (Alt キーを押してメニューを表示し、[ファイル]、[プロパティ] の順にクリックします) でオーディオ ビットレートを確認できる場合があります。

進行状況の監視

エンコード ジョブの完了までには数時間かかることもあるため、エンコードの進行状況を確認できると便利です。SDK では、ハンドラーを追加できるイベントを通じてエンコード処理を監視する簡単な方法が提供されます。

job.EncodeProgress += new EventHandler<EncodeProgressEventArgs>(OnProgress);

イベントを処理するには、次のようなメソッドを追加します。

static void OnProgress(object sender, EncodeProgressEventArgs e)
{
  Console.Clear();
  Console.WriteLine((100 * (e.CurrentPass - 1) + e.Progress) / e.TotalPasses + "%");
}

マルチパス エンコードとは、このコード サンプルに関係する新しい概念です。可変ビットレートを使用してエンコードするとき、この処理は "パス" と呼ばれる 2 つの手順で実行されます。最初のパスではソース ビデオが分析されて、最も複雑な部分と、ビットレートを上げることでメリットを得られる部分が判断されます。2 回目のパスでは、最初のパスで取得した情報を使用してビデオがエンコードされます。このため、固定ビットレートを使用する場合は、EncodeProgressEventArgs クラスの CurrentPass プロパティまたは TotalPasses プロパティを使用する必要はありません。

ビデオの結合

1 つのビデオの一部のみをエンコードしたり、複数のビデオを 1 つに結合したりする場合は、SDK によってサポートが提供されます。ソース メディア アイテムの開始時刻と終了時刻を変更するには、Clips プロパティを変更します。ビデオの最初の 6 秒間のみをエンコードするには、次のようなコードを使用します。

src.Sources[0].Clips[0].StartTime = new TimeSpan(0);
src.Sources[0].Clips[0].EndTime = new TimeSpan(0, 0, 6);

ソース ファイルとして他のビデオを追加するには、MediaItem の Sources プロパティに新たなビデオを追加できます。これによって、複数のソース ファイルが順番に 1 つの出力ファイルにエンコードされます。

MediaItem src = new MediaItem(@"C:\WMdownloads\AdrenalineRush.wmv");
src.Sources.Add(new Source(@"C:\WMdownloads\Video2.wmv"));

ライブ エンコード

Expression Encoder では、Web カメラなどのライブ ソースからのエンコードもサポートしています。概念 (およびコード) はエンコード ビデオ ファイルと同様ですが、別の一連のクラスを使用します。これらのクラスは、Microsoft.Expression.Encoder.Live 名前空間にあります。

最初に使用するクラスは LiveJob です。LiveJob は Encoder.Job のように動作し、ビデオのエンコード動作を処理します。ただし、ライブ シナリオでの OutputFormat は MediaItem オブジェクト (必須ではありません) ではなく、LiveJob のプロパティです。LiveJob オブジェクトのインスタンスが作成されるときに、コンピューターに接続されているビデオ入力デバイスが検索され、VideoDevices プロパティと AudioDevices プロパティに値が設定されます。その結果、エンコーダーの入力ソースとしてこれらのプロパティを使用できます。図 4 に例を示します。

図 4 ライブ ビデオのエンコード

using (LiveJob job = new LiveJob())
{
  LiveDevice videoDevice = job.VideoDevices[0];
  LiveDevice audioDevice = job.AudioDevices[0];
  LiveDeviceSource liveSource = job.AddDeviceSource(videoDevice, 
      audioDevice);
  job.ActivateSource(liveSource);
  WindowsMediaBroadcastOutputFormat outputFormat = new 
     WindowsMediaBroadcastOutputFormat();
  outputFormat.BroadcastPort = 8080;
  job.OutputFormat = outputFormat;
  Console.WriteLine("Press enter to stop encoding...");
  job.StartEncoding();
  Console.ReadLine();
  Console.WriteLine("Stopping");
  job.StopEncoding();
}

これによって、Web カメラを使用したライブ エンコード セッションが開始され (Web カメラが接続されていると想定しています)、ポート 8080 経由でローカル コンピューターに配信されます。ライブ エンコードを表示するには、Windows Media Player を起動して、[ファイル] メニューの [URL を開く] をクリックし、「mms://localhost:8080」と入力します。ストリームのエンコードと転送にかかる時間により 20 ~ 30 秒の遅延が生じますが、バッファー処理の後、Web カメラのビデオが表示されます。Windows Media サービスまたは IIS Media Services のソースとしてこのビデオを使用すれば、世界中に配信できる可能性があります。

その他のツール

選択したエンコード設定で、必要な出力品質が得られるかどうかわからなければ、Expression Encoder 3 UI に A/B Compare という便利な機能が用意されています。この機能を使用すると、現在の再生位置を含む 5 秒間のビデオをエンコードできます。エンコードされたビデオはソース ビデオと共に分割画面のように表示されるため (図 5 参照)、エンコードされたビデオと元のビデオの品質を容易に比較できます。

図 5 Expression Encoder 3 の A/B Compare

image: A/B Compare in Expression Encoder

その後、[Edit] (編集) メニューの [Save current settings as preset] (現在の設定をプリセットとして保存) をクリックして、ユーザー定義のプリセットとして現在の設定を保存できます。プリセットは XML ファイルとして格納され、SDK と共に使用できます。

job.ApplyPreset(@"C:\WMdownloads\NewPreset.xml");

コンソール アプリケーションを使用してビデオ変換処理を簡単に自動化する方法をお考えの方は、convertmedia.codeplex.com (英語) から入手できる Convert-Media PowerShell Module for Expression Encoder を確認してください。この PowerShell モジュールには Expression Encoder SDK がラップされており、コードの記述を必要としないコマンド ライン エンコード インターフェイスが提供されます。すべての CodePlex プロジェクトと同様、このモジュールもオープン ソースです。

これで、ビデオ エンコードに関連する主な専門用語を理解し、ここで得た知識に基づいて、使用するコーデックとビットレートを判断できるようになっていただけたらさいわいです。また、Expression Encoder 3 SDK を使用して Xbox 360、iPhone、Silverlight などの特定のターゲットのビデオ、およびライブ ストリーミング ビデオをエンコードする方法についても理解していただけたと思います。ですので、ホーム ビデオや忘れていた記憶の価値に気付くために、Clark W. Griswold のように屋根裏部屋に閉じ込められるのを待たないでください。ホーム ビデオや忘れていた記憶を世間の人々が利用しやすい形式に変換しましょう。

Adam Miller は、ネブラスカ州のリンカーンにある Nebraska Global のソフトウェア エンジニアです。Miller のブログは blog.milrr.com (英語) でご覧いただけます。

この記事のレビューに協力してくれた技術スタッフの Ben Rush に心より感謝いたします。