IronPython でスクリーンキャプチャのビデオを作成
Windows Media Encoder の COM コンポーネントを IronPython から使用すれば、IronPython で WMV の動画処理が可能となる。
とりあえず、今回は IronPython でスクリーンキャプチャの WMV ファイル作ってみる事にする。
主な手順は以下の通り。
- Windows Media Encoder 9 のインストール
- Windows Media Encoder の COM ラッパー作成
- IronPython のスクリプト作成
Windows Media Encoder 9 のインストール
Microsoft の Windows Media のダウンロードサイトから Windows Media Encoder 9 をダウンロードしてインストールする
http://www.microsoft.com/japan/windows/windowsmedia/download/default.aspx
Windows Media Encoder の COM ラッパー作成
.NET Framework SDK に含まれる tlbimp.exe を使って、wmenc.exe の COM ラッパーを作成する。(wmenc.exe は Windows Media Encoder のインストールディレクトリ内にあるはず)
>tlbimp.exe C:\Windows Media Components\Encoder\wmenc.exe
これで、カレントディレクトリに WMEncoderLib.dll が生成される
IronPython でスクリーンキャプチャのスクリプト作成
スクリーンキャプチャ実施のおおまかな手順は以下の通り。
- WMEncoderAppClass の Encoder プロパティから、もしくは WMEncoderClass でIWMEncoder2 オブジェクトを取得
- IWMEncSourceGroupCollection にIWMEncSourceGroup オブジェクトを追加
- IWMEncSourceGroup に IWMEncSource を追加
- IWMEncSource に入力デバイス(スクリーンキャプチャ)を設定
- IWMEncSourceGroup オブジェクトにエンコード用のプロファイル IWMEncProfile オブジェクトを設定
- IWMEncoder2 の PrepareToEncode メソッドで準備、Start メソッドで録画の開始、Stop メソッドで終了
import sys if len(sys.argv) < 2: print "%s [output file name]" % sys.argv[0] sys.exit() from System import * from System.IO import * import clr clr.AddReference("WMEncoderLib") from WMEncoderLib import * enc = WMEncoderClass() #こちらでも可 #app = WMEncoderAppClass() #enc = app.Encoder sg = enc.SourceGroupCollection.Add("sg1") src = sg.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO) #スクリーンキャプチャの場合は ScreenCap:// という記述を使用 src.SetInput("ScreenCap://test1", "", "") #Webカメラ等のデバイスから録画する場合は以下のようにする #src.SetInput("Default_Video_Device", "Device", "") #出力ファイル名を設定 enc.File.LocalFileName = FileInfo(sys.argv[1]).FullName profile = WMEncProfile2Class() profile.LoadFromFile(FileInfo("test.prx").FullName) sg.Profile = profile #エンコード(録画)の準備、Start を呼び出す前に必ず実行する必要有り enc.PrepareToEncode(True) #エンコードの開始 enc.Start() Console.ReadLine() #エンコード終了 enc.Stop()
WMEncoderAppClass の Encoder プロパティから WMEncoder を取得する場合は、サービスの「DCOM Server Process Launcher」が開始されていなければならない模様。(開始していないと 800706ba エラーが発生した)
エンコード用のプロファイルは、Windows Media Encoder 9 のユーティリティ「Windows Media プロファイルエディタ」を使って事前に作成(test.prx ファイル)したが、スクリプト上で作成することも、WMEncoder の ProfileCollection から取得することも可能。
プロファイル名を出力するスクリプト
ProfileCollection のプロファイル名を出力する
import clr clr.AddReference("WMEncoderLib") from WMEncoderLib import * enc = WMEncoderClass() for pf in enc.ProfileCollection: print pf.Name