旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【WPF】 続・スクリーンショットを撮り続けて動画に保存する

以前スクリーンショットを撮り続けて動画に保存する記事を書いたのですが、実はMicrosoft Expression Encoderを使えばやりたいことは出来たようです。 ni4muraano.hatenablog.com

Microsoft Expression Encoderはここからダウンロードできます。NuGetからもダウンロードできるのですが、動作させようとすると良く分からないエラーが出て結局動かすことができませんでした。結局自分は下記手順で動作させることができました。

  1. リンクからMicrosoft Expression Encoderをダウンロード・インストールして
  2. NuGetからMicrosoft Expression Encoderをインストールする

プログラムについてですが、まずスクリーンショットを撮り続けて動画に保存する部分は以下になります(System.Drawing.Rectangleを使うためにSystem.Drawingを参照に追加してください)。

// usingに追加
using Microsoft.Expression.Encoder;
using Microsoft.Expression.Encoder.ScreenCapture;

// フィールドでキャプチャーを宣言
private readonly ScreenCaptureJob _capture = new ScreenCaptureJob();

// 設定、キャプチャー開始命令
_capture.CaptureRectangle = new System.Drawing.Rectangle(0, 0, 1200, 940);
_capture.ScreenCaptureVideoProfile.FrameRate = 30;
_capture.OutputScreenCaptureFileName = @"C:\Users\MyFolder\Videos\video.xesc";
_capture.Start();

そして、以下を実行することで保存した動画をWMVにエンコーディングできます。

// Stop, Disposeしないと動画が作成されない
_capture.Stop();
_capture.Dispose();
// 作成した動画をエンコーディングする
var media = new MediaItem(@"C:\Users\MyFolder\Videos\video.xesc"); ;
var job = new Job();
job.MediaItems.Add(media);
job.OutputDirectory = @"C:\Users\MyFolder\Videos";
job.Encode();