テキスト入力支援

テキスト入力支援ツールを作ってみたの巻。

正確には、テキストをAviutlオブジェクトとして読み込める形に整形するツールですね。

Excelです!!

Excel2000以降なら動くはず。OpenOfficeとか使っている方はゴメンナサイ~。(´・ω・`)
入力が主なので、できるだけ多くの人が触ったことがあるような形式にしておきたかったんです。

インターフェース設計するのがめんど……ゲフンゲフン


またまた、ばーじょんあっぷしたよー\(^o^)/

ver0.6

  • セリフ枠と名前、テキストのグループ化。
  • セリフとセリフの間に空白を挟む機能
  • 空白行の反映
  • 文字数のカウントに制御文字を除外するようにした
  • その他もろもろバグつぶし

あと、時間の誤差については下の方に解説しました。


ver0.5
テキストの長さに合わせて画像や固定文字列を表示する機能を追加しました。
早い話が、テキストの長さに合わせて、セリフ枠と名前を表示する機能ね。

不具合あるけど解決策が見当たらないのでとりあえず公開(汗)
ま……まぁ、どのみち長さ調整は必要になるわけだしさ……あは、ああははは。

→Ver0.6で解消したよ!


基本的な解説動画はこちら。

5分あります。



試してみてくださる方は、まず、そもそも動くかどうか。
それと、こんな文字がエラーになるって情報を教えてくださるとうれしいです。

また、使えるのは使えたが、この部分の解説が無いので苦労したよ、解説を追加しないとわからんよ~という意見も歓迎です。

あと、あんまり設定項目が多すぎると使うのも不便だろうと思って、
選択項目を絞っていますが、増やした方が良い項目についても意見があれば聞かせてください。

たとえば、上のツールでは設定項目がないけど、文字の揃え位置(右揃え・中央揃えなど)や、
影付き文字とかは選択出来た方がいいよ!

とかとか。


2012/4/28

誤差のお話

ver0.6の紹介動画の中に出てきた
FPS30の動画の中の、1秒10文字の文字速度でWAIT1秒だったら、オブジェクトの長さは何秒?
って話。約2秒って書いたけど、実際は1.93秒になっちゃう点の言い訳。

【問題】
 Q:1秒に1文字の文字送りの速さで1文字目が表示されるのは何秒目?

 A:0秒目(フレーム1)

…なのでござる。1秒目じゃないのね。
1文字目だけは文字送り速度を適用出来ない。
言い換えると、文字送りの速さを考慮する必要があるのは「文字数」-1になる。
これが「D_LEN = LENG - MNS -1」についている「-1」の意味。

1文字目だけはフレーム1に表示され、あとは指定速度毎に表示されていくことになる。
たとえば、fps30=1秒に30フレームの動画で、文字送り10=1秒に10文字だった場合。
1文字表示されるのに必要なフレーム数は、
 30フレーム÷10文字=3フレーム
1秒÷10文字=0.1秒

になる。
じゃぁこの早さで3文字目が表示されるのは何フレーム目?
 3×3=9
または
0.1秒×3=0.3秒
…ではなくて、
 1+(3-1)×3=7
…になります。実際やってみるとわかる。
 1+(文字数-1)×fps値÷文字速度
…ってことになるかな。

じゃぁ、7フレーム目って秒数にすると何秒なの?ってぇと。

1秒が30フレームに分かれるのがFps30なわけですから、
1フレーム=0.03333333....秒なワケですよ。

つーことで7フレーム目=0.23333333.....
ということになる。
しかし、Aviutlの仕様上0.1フレーム単位では表示がされないので、見た目的には
0.3秒目に3文字目が出てくるように見えるわけです。


最初の話に戻ります。
FPS30の動画の中の、1秒10文字の文字速度でWAIT1秒だったら、オブジェクトの長さは何秒かというと、

1+(10文字-1)×30fpf÷文字速度10+30(1秒分のフレーム数)=58になる。

1フレーム0.03333...なので
58フレーム=1.933...

になるわけですね。

また、ツールでフレームを指定する際にも小数点以下を反映するとおかしなことになるので
端数切り上げにしているんですね。
これが「Roundup」の中にある「1 + D_LEN * FPS / SPEED」の「+1」の意味。
最後に。
これがおそらく手計算と表示上の誤差となる理由と思われます。

2012/4/16

制作者お悩み中

ver0.5の問題は、制御文字を使ってしまうとその分文字数としてカウントしてしまうって所です。
1234567890
これは10文字だけど
123456<#ff0000>78<#>90
これは18文字とカウントされちゃんですね。
実際に表示される文字が多くなくても、制御文字が多いとフレームとして長くなっちゃう。

最初はExcelのFIND関数と、LEN関数を組み合わせて
「全体の文字数」-「">"が出てくる文字数」-「"<"が出てくる文字数」
という計算にしようかと思ったんだが、制御文字が複数出てくると使えない。

そこで今度は
FINDに「何文字目からカウントし始めるか」というステータスがあるので、
ひとつ"<"や">"を見つけたら、次のFIND関数からはその後の文字からカウントし始めるということも考えてみた。
現在の文字位置を変数にしておけばいいわけで。

そしたら今度はエラーハンドリングを考える中で、
12<#ff0000345678<#>90
こういうミスがあるとおかしなことになることに気づいた。
一つ目の<#ff0000>の閉じの「>」が無い状態ね。
結局間違ってはいるので制御文字が正しく動かない分には問題無いんだ。

そうじゃなくて、
<#ff0000345678<#>
ここまでが制御文字範囲内と認識されて文字数からマイナスされちゃうことになるわけよ。
「全体の文字数」-「">"が出てくる文字数」-「"<"が出てくる文字数」
という計算式なワケだから。

じゃぁ<s>とか<#>とかって言う固定キーワードで拾うか?
でもこれだと
<s50,MS ゴシックP>みたいにフォントを入れられてしまうと弱い。どんな文字が入るかわからんからね。

さて困った。思案中。

→やったぜ!解決したよ!


最終更新:2012年04月29日 09:04