Flash Media Generator



はじめに
つくったひと:髭山髭人(ひげやま ひげひと)
ジャンル:ニコ生配信用演出ツール(Flash形式)
更新した日 or バージョン:2016/05/22 くらい
略称:FMG

・自己責任で使ってください
・二次配布はご遠慮ください
・サポート・質問受付などは基本的に行っておりません
 ほぼ必要な情報は全てこの説明書に書いてあります
 あれこれ試行錯誤してもダメだったら諦めてください
・Flashコメントジェネレーターの作者さんとは何の関係もありません
 自分が勝手に本家プラグインの性質を利用しているだけです


ダウンロード先https://enty.jp/higehito (Enty)
もしくは こちら

File: fmg0522test.zip
MD5: 59d5bf302be7794dd826cc4c88d70489
SHA1: 0fec5016a5b6f329b72645ff88cfd99a5599d69a
機能紹介
指定したキーワード(コメント)に反応して、好きな画像を配信画面上に表示できます
オプションで、画像の大きさや位置・表示時間・ランダム表示・・・等指定できます
前提環境
① NLE / OBS 等の .swf ファイルを載せられる配信ツールを使っている

Flashコメントジェネレータと、何らかのコメントビューワ系ツールを連携させている

表示領域は 640×360 ピクセル (16:9) です
これは、配信設定サイズ 640×360 で運用させることを前提に作っているからです

▼FlashMediaGenerator 本体の中身

確認事項
作者側で確認している事・していない事

大抵の場合、配信ツールにFMG本体を載せる事さえ出来るなら、
あとはコメントビュワーツールにプラグインが対応していれば使えるのではないか...と思います

▼キャプチャ配信ツール動作確認備考
NLE (NicoNicoLiveEncoder)作者はアンコちゃんと一緒に運用させています
OBS (OpenBroadcasterSoftware)一部、動作不安定になる環境があるようです / ログファイルが溜まります
FME (FlashMediaLiveEncoder)
Xsplit
▼コメントビューワツール
やります!アンコちゃん作者はNLEと一緒に運用させています
NiconamaCommentViewer○(条件付)コメジェネのプラグインが人柱版でないと、エラーが頻繁に出ます
Nwhois
▼メディア種類
.jpg / .png
.gifアニメーションgifは再生されず、1フレーム目だけの表示となります
.swfフレームレート設定が必要な場合があります
音声ファイル / 動画などサウンドや動画の再生は今のところ一切想定して作っていません

▼動作確認済みの組み合わせ
NLE + アンコちゃん or NCV (人柱版)
OBS + アンコちゃん or NCV (人柱版)

導入方法



① .dat を探す ② 位置を書き込む ③ 本体を配置 ④ 最後の仕込み 設定の更新と反映
動作には NicoLiveComment.dat というファイルが必要なので、まずはこれを探します

場所はPC環境や、配信ツールによって異なりますが、
利用しているコメジェネ本体の settings フォルダの中にある dat.ini に、ファイルの場所がかかれているかと思います

大抵の人は↓

アンコちゃんの場合
C:\Users\(ユーザー名)\AppData\Local\NicoView2\plugins

NiconamaCommentViewerの場合
C:\Users\(ユーザー名)\AppData\Roaming\posite-c\NiconamaCommentViewer

のフォルダ内に NicoLiveComment.dat があるかと思います


::補足::

いくつかのコメントビュワー系ツールと、Flashコメントジェネレーター(以下コメジェネ)を連携させる為に、
コメジェネの作者さんが作ったプラグインが、このファイルを書き出してくれます

FlashMediaGeneratorは、この書き出された NicoLiveComment.dat を参照して動作するので、
位置を調べる必要がある・・・という訳です

今調べた NicoLiveComment.dat の位置を define.ini ファイルに書き込みます

書き込む場所は [setting] セクション内にある path の項目となります


以下は、大抵の人の環境で通じそうな表記例です
ユーザー名の箇所は適宜書き換えてください
※下記はあくまで例なので、大幅に場所が異なる場合もあります

NLE
# NLEとアンコちゃん
path=C:\Users\ユーザー名\AppData\Local\NicoView2\plugins\NicoLiveComment.dat

# NLEとNiconamaCommentViewer
path=C:\Users\ユーザー名\AppData\Roaming\posite-c\NiconamaCommentViewer\NicoLiveComment.dat


OBS ( 先頭にURLが付かないと動作しません )
# OBSとアンコちゃん
path=http://absolute/C:\Users\ユーザー名\AppData\Local\NicoView2\plugins\NicoLiveComment.dat

# OBSとNiconamaCommentViewer
path=http://absolute/C:\Users\ユーザー名\AppData\Roaming\posite-c\NiconamaCommentViewer\NicoLiveComment.dat

FlashMediaGenerator.swf 本体を、配信ツール上に取り込みます

本体の表示サイズは 640×360 (アスペクト比率 16:9 )となっています
表示領域を配信画面いっぱいに引き伸ばして運用させてください


NLE , OBS 共に、慣れている人ならコメジェネを取り入れるのと同じ感覚で配置できますが、
一応 OBS だけ別途説明を書いておきます


OBS の場合 (クリックで開きます)

FMGの本質は、好きなコメントキーワードに対して、画像を配信上に表示させることが出来る演出ツールです

define.ini[keyword] セクションに、
好みのキーワードと、それに反応して表示させる画像の設定を書くことが出来ます

画像は全て srcフォルダ に入れてください


::補足::
srcフォルダ内であれば、原則ファイル名は問いませんし、
自分の管理しやすいようにフォルダ分けもできます
define.ini を書き換えた場合、
変更を反映させる為に 一度再読み込みする必要があります

本体の表示領域内、一番左上の隅から 25x25 ピクセルの領域がクリックできるようになっています
クリックしても内部で処理を行うだけなので、画面上に目だった変化はおきませんが、
その領域をクリックしている間は、矢印から指カーソルに変化するので分かりやすいかと思います

OBSの場合、Flashのクリックは出来ませんが、
ソースからFlashの再表示(チェックOFF→ON)をするだけで再読み込みをするようです



[keyword]設定



基本形 座標指定 ランダム位置 サイズ指定 時間指定 図解 ランダム画像 複数キーワード指定
基本的なキーワード設定は以下のようになっており、
このペアとなる設定を、define.ini に一行ずつ書いて増やしていきます

反応させたいキーワード=表示させたいファイル名



半角イコール = で区切りますが、このときスペースなどの空白は入れないでください。
正しくキーワードやファイル名を判別できなくなります
この書き方のルールは、define.iniを編集する上で基礎的なルールでもあります


表記例
わこつ=いらっしゃい.png


こうすると、「わこつ」というキーワードに反応して、
srcフォルダの下にある いらっしゃい.png というファイルが表示されます

「挨拶」というフォルダに入れたい場合は、以下のような感じになります
わこつ=挨拶/いらっしゃい.png



::補足::
・キーワードは完全一致ではなく、コメントの中に指定されたキーワードが含まれていればその時点で反応します
・一部の半角記号は安易に含めることが出来ません

詳しくは キーワードの仕様 を読んでみて下さい
表示位置を指定するオプションです
わこつ=いらっしゃい.png,X100,Y200


こうすると、いらっしゃい.png画像は、左から100ピクセル / 上から200ピクセル の位置に表示されるようになります
オプション同士の区切り記号は原則 , (半角カンマ)です

このオプションはX,Y共に省略すると、位置が 0 ピクセル として扱われます
X と Y のどちらか片方だけを指定する書き方も出来ます

表示位置をランダムに変更するオプションです
テスト=test.png,X200,Y100,RX100,RY100


こうすると、画像の表示位置にランダム性を持たせることができるようになり、
表示のぶれ幅が X+100 , Y+100の範囲に広がります

勿論省略も可能なので、
横だけ=画像.png,RX100


こうすると、Y(縦)範囲はランダムにならず、X(横)100ピクセル分の範囲でランダム表示になります
大きさを変更するオプションです
テスト=test.png,S0.5


こうすると、画像の倍率が 0.5倍 になります (つまり 50% に縮みます)
最小(実質非表示)が 0 で、1 にするとオリジナルのファイルサイズとなります
小数点で指定することを前提に作っています

このオプションは省略すると、1扱いのオリジナルファイルサイズで表示されます


また、倍率ではなくピクセル数で指定するタイプのオプション W , H も用意しています
こちらは、幅(W)と高さ(H)のどちらかを指定する事が出来ます
大きさ=image.png,W200


こうすると、image.png の画像サイズが 横幅200ピクセルの大きさで表示されます

アスペクト比率を強制的に固定するよう、内部で処理を行っているので、
テスト=正方形.png,W50,H300


このように、W,Hオプションを併用して画像を縦に引き伸ばして表示させることは出来ません

※ S , W , H オプションは併用せず、必ずどれか1つだけを使うようにしてください

100×100ピクセルのオレンジ色の画像Aを、
上から100px 左から200pxの位置で表示させるものとすると
テスト=A.png,X200,Y100

といった感じになります

更にこの状態で、画像を50%(0.5倍)の大きさにするSオプションを与えると、
表示基点を元に縮小され、下の図でいう濃いオレンジの大きさで表示されるようになります
テスト=A.png,X200,Y100,S0.5





ランダム範囲を指定したイメージは以下のようになります
テスト=オレンジ正方形.png,X200,RX300,RY200


設定されたランダム範囲は 300×200 ピクセルですが、
表示させる画像そのもの自体は 100pxの正方形なので
実際の範囲されうる領域が、表示される画像のサイズ分増える事に注意してください

オレンジの画像は、図に載っている位置に表示される可能性がある、という事になります
表示時間を変更するオプションです
テスト=test.jpg,T5000


このオプションを指定すると、個別に表示時間を設定できるようになります

単位はミリ秒なので、 5秒にしたければ 5000 を入力してください

このオプションは省略すると、[keyword]セクションの ClearWaitTimeで設定されている 秒数(ミリ秒単位) になります
ClearWaitTime を弄る場合は、自体の設定値が 100ミリ秒 を下回らないようにしてください
設定したキーワードに対し、複数の画像をランダムで関連付けることが出来ます
テスト=testA.jpg|testB.png


半角の記号 | で区切ることで可能です
ローマ字の小文字 l (エル) や I (アイ) ではありませんので注意してください
キーボードの ¥ マークを Shift を押しながらで打てる記号です

この場合、ランダムで testA.jpg または testB.png の画像どちらかが表示されます
1行分の設定で、一度に複数のキーワードを設定することが出来ます
あつい|暑い|熱い=hot.jpg

上記設定の例だと、
コメント内に あつい・暑い・熱い いずれかのキーワードがあれば、hot.jpg 画像が表示されます

::補足::
これは、正規表現と呼ばれる機能を用いたテクニックです

キーワードの仕様



判別方法 検索オプション 記号を含める場合
キーワードは完全一致ではなく、そのキーワードがコメントに含まれているかどうかの部分一致で判断します

例えばこのキーワード設定がされている場合
あ=image.jpg


"あ" が含まれている以下のコメントに全て反応します
あいうえお
さあ、行こう
明後日あいてる?
[setting] セクション内で allsearch オプションが記述された場合、全てのキーワードチェックを行います

キーワードの検索は上から一行ずつ順番に行われます
このオプションが無効の場合、キーワードに1つヒット(マッチ)した時点で検索処理が終了します
つまり、それ以降に設定された行は全て無視されます

逆に、有効になっている場合は、全ての設定された行を最後までチェックします

例えば、キーワード設定がこのような順番で設定されていた場合
秋=A.jpg
夕暮れ=B.png

"夏の夕暮れ、秋の始まり"
というコメントを受けた時の挙動が少しだけ異なります

* allsearchが有効なら
最後の行までマッチ処理を行うので
秋=A.jpg

にマッチし、次の行の
夕暮れ=B.png

にもマッチし、結果的に AとB 2つの画像が表示されます


* allsearchが無効なら
秋=A.jpg

にマッチした時点で処理が終了するので、
夕暮れ=B.png

に一致するキーワードが含まれていたとしてもマッチ処理自体がされず、
結果的に、Aの画像だけが表示されます
「正規表現」と呼ばれるプログラム的な技術が使えるようになっていますが、
反面、副作用で一部の記号等を気軽にキーワード指定することが出来ません

正規表現に関して相応の知識がない限り、以下のような半角記号などは使わない方がいいかと思います
. , / \ | [] () {} = * ~ ^ ! $ + -

特に、 = (半角イコール)に関しては仕様上キーワードに用いることが出来ません

正規表現について興味を持ったら、こちらのHPが分かりやすくてオススメなので弄ってみるのも良いかも知れません
サルにもわかる正規表現入門

棒読みちゃんでも使えるテクニックなので、カスタマイズの意欲がある人は覚えておいて損はないと思います

unicodeに関しては \u ではなく %u で代用させてください
サロゲートペアに関してはダメでした

[preset]設定



プリセットの使い方 オプション併用
予めこの[preset]セクションでプリセットオプションを登録し、各種キーワードに設定しておけば
後から一度に変更したい場合、該当するプリセットオプションを一箇所書き換えるだけで手間が省けます

キーワードに追記する場合、通常のオプションと同様で順番は問いません
プリセット名は必ず行頭に半角アットマーク @ を用いてください

[preset]
#オプションが同じなら、今後の変更はこの一箇所を書き換えるだけで済む
@stampsetA=RY300,T5000,S0.5

[keyword]
こんにちは=stamp/stamp01.png,@stampsetA
さようなら=stamp/stamp02.png,@stampsetA
ありがとう=stamp/stamp03.png,@stampsetA
ごめんなさい=stamp/stamp04.png,@stampsetA

#従来なら、このような書き方になる
いってきます=stamp/stamp05.png,RY300,T5000,S0.5
おつかれさまでした=stamp/stamp06.png,RY300,T5000,S0.5

プリセットと他のオプションを併用した場合はプリセット側が基本となり、
プリセットで指定されていない項目は、キーワード側のオプションが反映されます。
被った場合はキーワード側のオプションが優先されます

オプションやプリセットを書く順番は、特に気にしなくてOKです
[preset]
@stampsetA=RY300,T5000,S0.5

[keyword]
こんにちは=stamp/stamp01.png,T2000,@stampsetA
さようなら=stamp/stamp02.png,X100,@stampsetA
ありがとう=stamp/stamp03.png,@stampsetA,S2

#S,W,Hオプションの併用は推奨していないので、以下の書き方はオススメできません
#プリセット側で既に S が指定されているにも関わらず、W オプションが指定されています

ごめんなさい=stamp/stamp04.png,@stampsetA,W150


プリセットオプション自体は複数設定しないでください
誤作動やエラーの原因となります
#マクロの複数利用はできません
テスト=stamp/test.png,@preset01,@stampsetA

Flash再生について



基本FPS設定 個別FPS設定
[keyword] セクション内 basefps オプション

FMG本体の基本フレームレートを設定するオプションです

.swf ファイルの再生速度を調整するときに関係してきます
.swf ファイルの表示(再生)も可能ですが、非常に速い/遅い速度で再生されてしまうことがあります
これは、swfファイル内で設定されているフレームレート(fps)が、本体や配信ツールのFPSと異なる為に起こる現象です


応急処置的に、再生fpsを変更できるオプションを用意しているので、
これを用いて再生速度を調節してください

テスト再生=test.swf,F12


ただし、あくまで応急処置的な機能となっているので、.swfファイルの再生が終了する前に
画像や、異なったfps設定のswfファイルが追加で表示された場合、
その時点で新しいフレームレート、もしくは基本fpsのほうが適用されてしまうので
古いswfファイルのアニメーション速度が変更されてしまいます

FlashMediaGenerator本体の基本fpsは
[setting]セクションの basefps で設定できます

更に、基本fpsを行っていても、NLEのコマ数設定が最終的には優先されてしまうようです(自信薄)
この辺はもうどうにもならない仕様って事で諦めてください

表示させる.swf のfps / 基本fps設定 / NLEのコマ数(OBSのFPS?) の3つが全て一緒であれば、
この問題は起きないかもしれません

エラー/不具合



本体のエラー表示 コメビュ.dat競合 OBSでのエラー
特定の処理に失敗した場合、エラーメッセージが配信画面の左下に表示されるように作っています

define.ini の読み込みに失敗

define.ini は .swf本体と同じフォルダに配置してください
また、define.iniが同位置にあっても、同様のエラー起きる場合は
普通のフラッシュプレイヤーで開いていたり、OBSで本体を指定する方法が違っていたりするかも


.dat 取得失敗

監視するはずの NicoLiveComment.dat が正しく取得できていない状態です
ioError の場合、パス(位置)指定が間違っていることが考えられます


.dat@SecurityError-Error #2148

OBS上で起動させている場合に確認したエラーです
[setting] セクションの path 指定が間違っているかもしれません
http://absolute/ を先頭に付けていない場合、OBS本体のセキュリティ機能で弾かれます


ロード失敗 (ファイル位置)

キーワードに指定した表示ファイルの読み込みに失敗している状態です
フォルダの場所やファイル名が間違ってないか、余計な記号などが入っていないか等 確認してみてください
OBSの場合、読み込みに失敗してもエラー自体表示されないようです
NiconamaCommentViewerと連携させている場合、時折

datファイルの位置が見つかりません。別のプロセスで使用されているため、プロセスは..(以下省略)
といったエラーダイアログが出る場合があります



どうやら本家Flashコメントジェネレーターでも、同じような現象が発生しているらしく、
人柱版での導入で解決すると書いてありました

(それまで、自分はダウンロードページから落とせる通常版を利用していました)

Flashコメントジェネレーター3 さらに盛り盛り人柱 ver9 / 2.13.0714beta (スタンドアロンパッケージ)
に同梱されているプラグイン fcg_ncv.dll を新しいものに置き換えることで、作者の環境ではこのエラーが発生しなくなりました


▼また、アンコちゃんでも稀にエラーが発生する場合があるようです

知人にテストをお願いした時、OBS環境下で動作が不安定になる現象を確認しています

現象:
OBSでのキャプチャ範囲がリセットされる

不具合がスペックによるものなのか、相性によるものなのか、
それともただのバグなのか、はっきりとした原因は今のところ不明です

クロージャを使ってはいますが、メモリリークは回避しているはずなので、それが原因ではなさそうです
(AdobeFlashPlayer9での使用メモリ量で確認)

尚、OBSで不安定になったその知人は、NLEでの運用だと特に問題なく動作する、との事でした

発生環境メモ:
windows 10 (x64) / Core i7-2670QM @ 2.20GHz / 8GB
HD Graphics 3000 / GT 630M

自環境メモ:
windows 7 (x64) / Core i5-4460 @3.20GHz / 8GB
GTX 550 Ti
OBS v0.657b (x86)

その他



作ろうと思った動機
Flashコメントジェネレーターの存在は昔より知っており、自分も利用していたのですが (有名ですよね)
コメントに反応して画像を表示するような物が無いかな、と気になって少し調べていた事がありました
結局、手軽に使えそうな有名どころ?のものが探せなかったので諦めていたのですが・・・

ある時、知人のリスナーさん(生主)から、
「コメントに反応して.swfファイルを再生するようなものが作れないだろうか」
といった感じのお話を受けました。

Flashなんて作ったこと無かったんですが、元々自分が欲しかったこともあったり、
Javascriptに慣れていた事もあったりで、色々調べて作ってみることに

そんな感じで、公開に至ってます

名前は色々迷ったんですが、他のプログラム名やサービス名と被らない範囲のもので決めました
個人的に、コメントジェネレーターをリスペクトしている(つもり)なので、
どこかに「ジェネレーター」は入れておきたかったです。

結果、FlashMediaGenerator になりました