IronPython でビデオ編集
Windows Media Encoder の COM コンポーネントを使って IronPython でビデオファイルの編集を実施する。
複数の wmv ファイルからビデオの一部をそれぞれ取り出し連結するような編集処理を実施する場合の APIの使い方は以下の通り。
- wmv ファイルからビデオの一部を取り出す
- IWMEncSource の MarkIn と MarkOut で取り出す範囲を指定
- 複数の wmv ファイルから取り出したビデオの一部分を連結する
- IWMEncSourceGroupCollection の Activate プロパティに先頭になる IWEncSourceGroup2 を設定
- IWMEncSourceGroup2 の SetAutoRollover メソッドの第一引数に -1、第二引数に次に連結するソースグループ名を設定
#test1.wmv の 0〜40秒目と test2.wmv の 20〜30秒目を連結して test_dest.wmv ファイルを生成するスクリプト from System import * from System.IO import * from System.Threading import * import clr clr.AddReference("WMEncoderLib") from WMEncoderLib import * app = WMEncoderAppClass() enc = app.Encoder sgcol = enc.SourceGroupCollection profile = WMEncProfile2Class() profile.LoadFromFile(FileInfo("test.prx").FullName) sg1 = sgcol.Add("sg1") sg1.Profile = profile #test1.wmv の先頭から 40秒目までトリミング vsrc1 = sg1.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO) vsrc1.SetInput(FileInfo("test1.wmv").FullName, "", "") vsrc1.MarkIn = 0 vsrc1.MarkOut = 40000 #sg1 の後に sg2 を連結する sg1.SetAutoRollover(-1, "sg2") sg2 = sgcol.Add("sg2") sg2.Profile = profile #test2.wmv の 20秒目から 30秒目までをトリミング vsrc2 = sg2.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO) vsrc2.SetInput(FileInfo("test2.wmv").FullName, "", "") vsrc2.MarkIn = 20000 vsrc2.MarkOut = 30000 #sg1 を先頭のソースグループとして設定 sgcol.Active = sg1 enc.File.LocalFileName = FileInfo("test_dest.wmv").FullName enc.PrepareToEncode(True) enc.Start() print "Encode Start" #エンコード処理が終了するまでループして待つ while enc.RunState != WMENC_ENCODER_STATE.WMENC_ENCODER_STOPPED: Thread.Sleep(1000) print ".", enc.Stop()