エフェクトにコントロールを追加する
このページは映像エフェクトプラグイン作成入門 の一部です。
/icons/-.icon
現在のエフェクトは以下のように何もない状態になっているはずです。
https://gyazo.com/3e7bd83c4a66e60f59dda66f393afc2c
ここにスライダーやトグルなどを追加していきます。
アニメーションスライダーの追加
SimpleEffectクラスを開いてください。
code:c#
public override string Label => "シンプルエフェクト";
と
code:c#
public override IEnumerable<string> CreateExoVideoFilters(int keyFrameIndex, ExoOutputDescription exoOutputDescription)
{
return [];
}
の間の行に次のコードを追加してください。
code:c#
public Animation X { get; } = new Animation(0, -9999, 9999);
また、コードの一番下のGetAnimatablesメソッドを以下のように書き換えてください。
code:c#
protected override IEnumerable<IAnimatable> GetAnimatables() => X; 上で追加したXを[]の中身に入れています。
ビルドしてみましょう。エフェクトを追加すると以下のように表示されます。
https://gyazo.com/bcb3e33268c99557904bb9cb6e24103a
アニメーションスライダーを追加できていますね。今はXという名前のアニメーションスライダーを追加しただけなので動かしても描画位置が変わったりはしません。
アニメーションスライダーには範囲, 単位, 小数点以下の桁数などの様々な設定があります。
トグルの追加
トグルも追加してみましょう。
先ほどアニメーションスライダーを追加した場所の下に次のコードを追加します。
code:c#
public bool Invert { get => invert; set => Set(ref invert, value); }
bool invert = false;
アニメーションスライダーではないのでGetAnimatablesメソッドは特に変更する必要はありません。
ビルドして確認するとこのようになります。
https://gyazo.com/92b4a01dd4512ab98dd54e9b85dee1c1
こちらもコントロールを作っただけなのでオンにしても何も起こりません。
これでコントロールの追加は完了です。
次回はこの値をVideoEffectProcessorクラスから取得して描画位置などに反映させます。
参考
最終的なSimpleEffect.csは次のようになります。
code:SimpleEffect.cs
using System.ComponentModel.DataAnnotations;
using YukkuriMovieMaker.Commons;
using YukkuriMovieMaker.Controls;
using YukkuriMovieMaker.Exo;
using YukkuriMovieMaker.Player.Video;
using YukkuriMovieMaker.Plugin.Effects;
namespace VideoEffectPluginTutorial
{
class SimpleEffect : VideoEffectBase
{
public override string Label => "シンプルエフェクト";
public Animation X { get; } = new Animation(0, -9999, 9999);
public bool Invert { get => invert; set => Set(ref invert, value); }
bool invert = false;
public override IEnumerable<string> CreateExoVideoFilters(int keyFrameIndex, ExoOutputDescription exoOutputDescription)
{
return [];
}
public override IVideoEffectProcessor CreateVideoEffect(IGraphicsDevicesAndContext devices)
{
return new SimpleEffectProcessor(devices, this);
}
protected override IEnumerable<IAnimatable> GetAnimatables() => X; }
}
/icons/-.icon