// Vegasのテキストイベントのフォントを変更する void ChangeTextFont(Media media, string file, string fontFamily, float fontSize) { if (media.Generator != null) { if (media.Generator.IsOFX) // 2021.2.7 null参照で例外のバグ修正 // OFXEffect形式に変換して、Text情報を取得 { OFXEffect ofxEffect = media.Generator.OFXEffect; OFXStringParameter textParam = (OFXStringParameter)ofxEffect.FindParameterByName("Text"); if (textParam != null) { string rtfData = textParam.Value; // これがテキスト // まず、temp.rtfを書き出します System.IO.StreamWriter writer = new System.IO.StreamWriter(file); writer.WriteLine(rtfData); writer.Close(); // 次に、temp.rtfを読み込むとプレーンテキストになっています RichTextBox richtextBox = new RichTextBox(); richtextBox.Rtf = System.IO.File.ReadAllText(file); // 2021.6.12 // rtf形式のフォントを変更する float fontSizeFinal = richtextBox.SelectionFont.Size; if (fontSizeFinal > 0.0f) { fontSizeFinal = fontSize; } richtextBox.SelectAll(); // 全テキストが対象 richtextBox.SelectionFont = new System.Drawing.Font(fontFamily, fontSizeFinal); // フォント変更 richtextBox.SaveFile(file); // debug. フォントが変わったか確認してみよう // OFXEffectの"Text" Parameterに対して再登録する // Referenced source: https://www.reddit.com/r/SonyVegas/comments/5lolln/scripting_changes_to_ofx_parameters/ System.Xml.XmlDocument textValDoc = new System.Xml.XmlDocument(); textValDoc.LoadXml("<OfxParamValue>" + textParam.Value + "</OfxParamValue>"); System.Xml.XmlNode textPValue = textValDoc.FirstChild; textPValue.InnerText = richtextBox.Rtf; // your new rtf words. textParam.Value = textPValue.InnerText; textParam.ParameterChanged(); // Apply changed. // temp.rtfを削除 if (System.IO.File.Exists(file)) { System.IO.File.Delete(file); } } } } }
Take GenerateTakeText(Vegas vegas, string text) { if (text.Length == 0) { return(null); } // テキストを順次追加 PlugInNode plugin = vegas.Generators.GetChildByName("VEGAS タイトルおよびテキスト"); // 日本語版だとプラグイン名はこれです。英語版は不明 Media media = new Media(plugin); // これちょっと遅いです if (media.Generator == null) { return(null); } if (!media.Generator.IsOFX) { return(null); } // Text属性を得る。 // 全属性を見たい場合はウォッチのOfxEffect.Parameters.Results Viewを見るとある。(多分21個) OFXEffect ofxEffect = media.Generator.OFXEffect; OFXStringParameter textParam = (OFXStringParameter)ofxEffect.FindParameterByName("Text"); if (textParam == null) { return(null); } // テキストをセット RichTextBox richtextBox1 = new RichTextBox(); richtextBox1.Text = text; richtextBox1.SelectAll(); // 全テキストが対象 richtextBox1.SelectionFont = new System.Drawing.Font(_fontFamily, _fontSize); // フォント変更 //richtextBox.SaveFile(file); // debug. フォントが変わったか確認してみよう // OFXEffectの"Text" Parameterに対して再登録する System.Xml.XmlDocument textValDoc = new System.Xml.XmlDocument(); textValDoc.LoadXml("<OfxParamValue>" + textParam.Value + "</OfxParamValue>"); System.Xml.XmlNode textPValue = textValDoc.FirstChild; textPValue.InnerText = richtextBox1.Rtf; // your new rtf words. textParam.Value = textPValue.InnerText; textParam.ParameterChanged(); // Apply changed. // これらはTextが見つかれば絶対全部見つかるからnullチェックしない OFXRGBAParameter textColorParam = (OFXRGBAParameter)ofxEffect.FindParameterByName("TextColor"); OFXDouble2DParameter locationParam = (OFXDouble2DParameter)ofxEffect.FindParameterByName("Location"); OFXChoiceParameter alignmentParam = (OFXChoiceParameter)ofxEffect.FindParameterByName("Alignment"); OFXDoubleParameter outlineWidthParam = (OFXDoubleParameter)ofxEffect.FindParameterByName("OutlineWidth"); OFXRGBAParameter outlineColorParam = (OFXRGBAParameter)ofxEffect.FindParameterByName("OutlineColor"); OFXBooleanParameter shadowEnableParam = (OFXBooleanParameter)ofxEffect.FindParameterByName("ShadowEnable"); //OFXStringParameter shadowColorParam = (OFXStringParameter)ofxEffect.FindParameterByName("ShadowColor"); // パラメータセット // // TextColor textColorParam.Value = _fontColor;// new OFXColor(50.0f / 255.0, 100.0f / 255.0f, 150.0f / 255.0f); // Alignment // alignmentParam.Choiesを確認すること // OFXChoiceはReadOnly型なのでなにもできません alignmentParam.Value = alignmentParam.Choices[_Align]; //alignmentParam.Choices[7]; //Location OFXDouble2D loc; loc.X = _locationX; loc.Y = _locationY; locationParam.Value = loc; // Outline outlineWidthParam.Value = _outlineWidth; outlineColorParam.Value = _outlineColor;// new OFXColor(10 / 255.0, 10 / 255.0f, 10 / 255.0f); MediaStream stream = media.Streams[0]; //VideoEvent videoEvent = new VideoEvent(Timecode.FromSeconds(_currentTime), Timecode.FromSeconds(_timeLength)); //track.Events.Add(videoEvent); Take take = new Take(stream); //videoEvent.Takes.Add(take); //_currentTime += _timeLength; return(take); }