【Vegas】タイムライン上の全てのテキストイベントを、指定したフォントに変更するスクリプト【C#】
Vegas Proのテキストエディタってなんか微妙に慣れなくて、特定の文字を入れてた後になって末尾に文字を付け足そうとするとUI Gothicにされるし、一旦全文字を削除すると、UI Gothicにされるし、最初の1文字目が半角英数字で、その半角英数字の後に文字をたそうとするとUI Gothicになる。実は結構ストレスが溜まって鬱陶しい仕様。
で、プロジェクトって1つ作ろうとすれば、だいたいは1つのフォントに統一する場合が私は多いので、いっそのことフォントなんか無視して一旦作品を仕上げてしまって、最後にスクリプトでフォントを一括変更して統一を図る方がもう楽なんじゃないか。と思い、スクリプトを作りました。
結果、だいぶ気が楽になりました。最後に全体の文字幅が変わったりしますが、ある程度想定内に収まるので、これはストレスにならないです。
やりかた
過去に作成した【Vegas】タイムライン上の全てのテキストイベントのテキスト内容だけ抽出するスクリプト【C#】をベースにして、部分的に改造します。
1.使い回すプログラム、変更するプログラム
過去に作成したやつで使い回せるのは「全テキストイベントに○○する」という処理です。なのでfor文でテキストイベントを探す処理はそのままにします。
新たに作るところは2つでしょうか。
①フォントを指示するUI。
②テキストにフォントを適用する。
2.フォントを指示するUIの作成
新たにFormクラスを作ってしまえばいいでしょう。
Form1クラスを追加して、スクリプトの最初の方で呼びます。Font familyとFont sizeを指示できるようにしました。
3.テキストにフォントを適用する処理の作成
フォントの変更は結構面倒で、しかも手段はいくつかあるんだと思います。
前回のときもいいましたが、Vegasはテキストイベントをリッチテキスト形式で保持しているため、おそらくリッチテキストに対してフォントを適用するアプローチが簡単だろうと判断しました。結果的に正解でした。なぜならば
・C#にはSystem.Windows.Forms.RichTextBoxというクラスがあるからです。
・さらに過去のスクリプトでもRichTextBoxクラスをちょっとだけ利用していたからです。
これはラッキー。そして、
・ちょっと使ってるRichTextBoxに対して、フォントを変更する処理をして、
・Vegasのイベントクラスに再セットし直してあげればOK。
ということをやれば済むと判明ました。ね、すぐできそう。
RichTextBoxに対してフォントを変更するのは以下の通り。
float fontSize = 10;
// RTF形式ファイルを開く
string file = {RTF形式ファイルの絶対パス};
RichTextBox richtextBox = new RichTextBox();
richtextBox.Rtf = System.IO.File.ReadAllText(file);
// 全テキストを対象にする
richtextBox.SelectAll();
// フォント変更
richtextBox.SelectionFont = new System.Drawing.Font(fontFamily, fontSizeFinal);
これでもうフォントは変更できています。
最後にこのテキストイベントに上書きして再更新してあげればよいですのでやってみましょう。
System.Xml.XmlDocument textValDoc = new System.Xml.XmlDocument();
textValDoc.LoadXml(“
System.Xml.XmlNode textPValue = textValDoc.FirstChild;
textPValue.InnerText = richtextBox.Rtf; // your new rtf words.
textParam.Value = textPValue.InnerText;
textParam.ParameterChanged(); // Apply changed.
完成
これをビルドするとDLLができます。DLLを指定の場所に置きます。
ソースコード
全ソースコードをGithubに公開していますのでよければ使ってください。
christinayan01/demo/VegasChangeTextFont – Github
参考サイト
Scripting Changes to OFX Parameters – reddit
RichTextBox class – Microsoft Docs