0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vegas Pro 18.0のC#スクリプトをVegas Pro 19.0で動かす際にやったこと

Last updated at Posted at 2021-09-18

概要

Vegas Pro 18.0用に作成した C# のスクリプトを Vegas Pro 19.0 で動作させる際にやったことのメモです。

基本的には修正は必要ないはずですが、変な書き方をしていると、修正が必要になることがあるようです。今回は以下の3点を修正しました:

  1. Generatorを取得する際に、GetChildByName()を使うのではなく、GetChildByUniqueID()を使う
  2. Vegas Pro 18.0のスクリプトは.NET Framework 4.7.2だったのが、Vegas Pro 19.0では.NET Framework 4.8 に変更(VS2019でビルドする際に変更が必要)
  3. RichTextBoxのデフォルトのフォントを取得する際に、Textを設定してSelectAll()したあとに取得するのではなく、RichTextBox を new した直後に取得する

背景

Vegas Pro 18.0 を使用して子供の動画編集をしています。動画編集する際の定型的な作業を自動化するために、いくつかスクリプトを作っています。

Vegas Pro 19.0がリリースされたので、Vegas Pro 18.0用にビルドした DLL が動作するかどうかを試してみました。すると、以下のスクリプトはうまく動作しませんでした。このスクリプトを Vegas Pro 19.0 で動くようにするためにやったことのメモを記載します。

やったこと

1. Generatorを取得する際に、GetChildByName()を使うのではなく、GetChildByUniqueID()を使う

タイムラインにテキストイベントを追加する際には、まず Media を生成する必要があります。この Mediaを生成する際に PlugInNode generator が必要です。この generator を取得する際に Vegas Pro 18.0 では以下のように取得できていました:

                PlugInNode generator = vegas.Generators.GetChildByName("VEGAS Titles & Text");
                Media media = Media.CreateInstance(vegas.Project, generator);

このコードを書いたときには、"VEGAS Titles & Text"という名前を見つけるのにものすごく苦労しました。いろんなコードを参考にしたりして試行錯誤しているうちに、たまたまこの名前を指定したら、ほしいものが取れたのでした。

Vegas Pro 19.0では"VEGAS Titles & Text"では取得できなくなってしまいました。Vegas Pro 19.0では以下の名前で取得できるようです:

                PlugInNode generator = vegas.Generators.GetChildByName("Titles & Text");
                Media media = Media.CreateInstance(vegas.Project, generator);

名前で取得するコードだと、今回のように名前が変わってしまったときに困ります。まさか名前が途中で変わるとは思っていなかったのですが、変わってしまうことが分かった以上、別の手段で generator を取得した方がよいと考えました。メソッド一覧を見ていると、UniqueIDでも取得できるようなので、取得した generator の UniqueID を調べてみました。

"Titles & Text" の UniqueID は "{Svfx:com.vegascreativesoftware:titlesandtext}" であることがわかりました。これは、Vegas Pro 18.0 でも Vegas Pro 19.0 でも同じようです。

そこで、generator を以下のように取得するようにしました:

        // Titles & Text のジェネレータを取得する
        private PlugInNode GetGeneratorTitlesAndText(Vegas vegas)
        {
            PlugInNode generator = vegas.Generators.GetChildByUniqueID("{Svfx:com.vegascreativesoftware:titlesandtext}"); //  Titles & Text
            return generator;
        }

せっかくなので generator を取得する関数を追加して、その関数を呼び出して取得するようにしました。

2. Vegas Pro 18.0のスクリプトは.NET Framework 4.7.2だったのが、Vegas Pro 19.0では.NET Framework 4.8が必要(VS2019でビルドする際に変更が必要)

Vegas Pro 19.0 の ScriptPortal.Vegas.dll を参照に登録するとこの変更が必要になります。

3. RichTextBoxのデフォルトのフォントを取得する際に、Textを設定してSelectAll()したあとに取得するのではなく、new した直後に取得する

テキストイベントのテキストを変更する関数は Vegas Pro 18.0 では以下のように書いていました:

        // テキストを変える
        private long ChangeText(OFXEffect ofxEffect, string newText, float fontSize)
        {
            OFXStringParameter textParam = ofxEffect.FindParameterByName("Text") as OFXStringParameter;
            {
                string rtfData = textParam.Value;   // デフォルトで入っているテキスト

                RichTextBox richtextBox = new RichTextBox();
                richtextBox.Rtf = rtfData;
                richtextBox.Text = newText;
                richtextBox.SelectAll();    // 全テキストが対象

                FontFamily fontFamily = richtextBox.SelectionFont.FontFamily;
                richtextBox.SelectionFont = new System.Drawing.Font(fontFamily, fontSize);    // フォント変更

                textParam.Value = richtextBox.Rtf;
            }

            return 0;
        }

今回変更したいのはフォントサイズなのですが、フォントサイズを変更するには fontFamily も指定しないといけないようです。fontFamily はデフォルトのままでいいので、あらかじめ fontFamily を取得しています。.NET Framework 4.8 にしたせいかどうかはわかりませんが、これでは動作しなくなりました。そこで、以下のように、RichTextBox を new した直後に fontFamily を取得するようにしました:

        // テキストを変える
        private long ChangeText(OFXEffect ofxEffect, string newText, float fontSize)
        {
            OFXStringParameter textParam = ofxEffect.FindParameterByName("Text") as OFXStringParameter;
            {
                string rtfData = textParam.Value;   // デフォルトで入っているテキスト

                RichTextBox richtextBox = new RichTextBox();
                FontFamily fontFamily = richtextBox.SelectionFont.FontFamily;
                richtextBox.Rtf = rtfData;
                richtextBox.Text = newText;
                richtextBox.SelectAll();    // 全テキストが対象

                richtextBox.SelectionFont = new System.Drawing.Font(fontFamily, fontSize);    // フォント変更

                textParam.Value = richtextBox.Rtf;
            }

            return 0;
        }

まとめ

上記の修正によりビルドしたDLLは、Vegas Pro 18.0 と Vegas Pro 19.0 のいずれでも動作するようになりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?