誤差について

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年05月05日 11:55