Expression Encoder SDKを触ってみる その3

chakemiです。大晦日、今年もあとわずかですね。来年も引き続き頑張りたいと思います。 今年最後も、ExpressionEncoder SDK を触ってみたいと思います。

前回までは、エンコードするに当たってエンコードプロファイルを、プリセットとして用意して行ないました。 今回は、エンコードプロファイルをコード中に指定してエンコードを行なってみたいと思います。

開発環境

  • WindowsXP SP3
  • VisualC#2010Express
  • ExpressionEncoder4 SDK ※ExpressionEncoderは無償版です

前回までのプロジェクトに新たに、System.Drawingへの参照を追加し、 Microsoft.Expression.Encoder.ProfilesとSystem.Drawingに対するusingステートメントを追加します。

ビデオプロファイルの設定を以下のように指定します。

1
2
3
4
5
mediaItem.OutputFormat = new WindowsMediaOutputFormat();
mediaItem.OutputFormat.VideoProfile = new MainVC1VideoProfile();
mediaItem.OutputFormat.VideoProfile.Bitrate = new ConstantBitrate(512);
mediaItem.OutputFormat.VideoProfile.Size = new Size(512, 384);
mediaItem.OutputFormat.VideoProfile.FrameRate = 30;

このほかにも、KeyFrameDistance、AspectRateなど細かく指定できますが、今回は省略します。 オーディオプロファイルの設定は以下のようにしました。

1
2
3
4
mediaItem.OutputFormat.AudioProfile = new WmaAudioProfile();
mediaItem.OutputFormat.AudioProfile.Codec = AudioCodec.Wma;
mediaItem.OutputFormat.AudioProfile.Bitrate = new ConstantBitrate(64);
mediaItem.OutputFormat.AudioProfile.BitsPerSample = 16;

こちらも、SamplesPerSecondやChannelsの指定は、省略しました。 メディアソースのプロファイルを指定したので、プリセットを適用する必要がなくなりましたのでJobにインポートをしたら、エンコードを開始します。

以下、全体のソース

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Expression.Encoder;
//追加
using System.Drawing;
using Microsoft.Expression.Encoder.Profiles;

namespace ConsoleApplication1
{
    class Program
    {


        static void Main(string[] args)
        {
            MediaItem mediaItem = new MediaItem(@"C:\ruby.avi");

            //ビデオプロファイルの設定
            mediaItem.OutputFormat = new WindowsMediaOutputFormat();
            mediaItem.OutputFormat.VideoProfile = new MainVC1VideoProfile();
            mediaItem.OutputFormat.VideoProfile.Bitrate = new ConstantBitrate(512);
            mediaItem.OutputFormat.VideoProfile.Size = new Size(512, 384);
            mediaItem.OutputFormat.VideoProfile.FrameRate = 30;

            //オーディオプロファイルの設定
            mediaItem.OutputFormat.AudioProfile = new WmaAudioProfile();
            mediaItem.OutputFormat.AudioProfile.Codec = AudioCodec.Wma;
            mediaItem.OutputFormat.AudioProfile.Bitrate = new ConstantBitrate(64);
            mediaItem.OutputFormat.AudioProfile.BitsPerSample = 16;

            //jobの生成
            Job job = new Job();
            job.MediaItems.Add(mediaItem);

            //出力先
            job.OutputDirectory = @"C:\videoOutput";

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

            //エンコード
            Console.WriteLine("Encoding…c");
            job.Encode();
            Console.WriteLine("Finished encoding.");
            job.Dispose();
        }

        static void OnProgress(object sender, EncodeProgressEventArgs e)
        {
            Console.Write("\b\b\b\b\b\b\b");
            Console.Write("{0:F2}%", e.Progress);
        }



    }
}

指定した通りにエンコードが完了して出来上がり♪

2012年はどんな年になるのかなぁ~。

Comments