さて、メディア構成があり、それに 3 つのメディア クリップを追加しました...
MediaComposition composition = new MediaComposition();
MediaClip clip1 = await MediaClip.CreateFromFileAsync(file);
MediaClip clip2 = await MediaClip.CreateFromFileAsync(file);
MediaClip clip3 = await MediaClip.CreateFromFileAsync(file);
composition.Clips.Add(clip1);
composition.Clips.Add(clip2;
composition.Clips.Add(clip3);
ここで、各クリップに個別のキャプションを表示する必要があり、これを実現するために、Win2D API の DrawTextLayout メソッドを使用するカスタム ビデオ エフェクトを作成しました。はっきりさせておきますが、オーバーレイでこれを行いたくありません! しかし、ビデオ エフェクトはファクトリ デザイン パターンを使用して構築されているため、ビデオ エフェクトの各インスタンスに異なるデータをロードするにはどうすればよいでしょうか?
MyVideoEffect のコアは次のとおりです。
public void ProcessFrame(ProcessVideoFrameContext context)
{
using (CanvasBitmap inputBitmap = CanvasBitmap.CreateFromDirect3D11Surface(canvasDevice, context.InputFrame.Direct3DSurface))
using (CanvasRenderTarget renderTarget = CanvasRenderTarget.CreateFromDirect3D11Surface(canvasDevice, context.OutputFrame.Direct3DSurface))
using (CanvasDrawingSession ds = renderTarget.CreateDrawingSession())
{
CanvasTextFormat textFormat = new CanvasTextFormat();
CanvasTextLayout textLayout = new CanvasTextLayout(canvasDevice, text, textFormat, width, height);
ds.DrawTextLayout(someTextLayout, x, y, Colors.Yellow);
}
}
ここで、「text」パラメータは毎回異なる値を持つ必要があります。
ビデオ エフェクトを追加するときに一意の値を指定するにはどうすればよいですか?
composition.Clips[0].VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(MyVideoEffect).FullName));
composition.Clips[1].VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(MyVideoEffect).FullName));
composition.Clips[2].VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(MyVideoEffect).FullName));
うまくいけば、タイマーに頼らずにこれを行うエレガントな方法はありますか?