0

好的,我有一个媒体作品,并添加了 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));

有没有一种优雅的方法可以做到这一点而不必求助于计时器?

4

0 回答 0