Re: 再生速度が1未満の時のTellMovieToGraph ( No.1 ) |
- 名前:管理人 日時:2017/11/29 23:56
動画の FPS が 30 なのではないでしょうか?
動画の FPS が 30 ですと、再生速度を 0.5 にした状態で FPS 60 でプログラムを
実行したら丁度同じ値が 4回返ってくる計算になりますので・・・
> これによって画像が1/4 すなわち15FPSのような見た目でガクガク動いてしまっています。
30FPS の動画を再生速度 0.5 で再生すると、丁度 15FPS の見た目になりますので、
やはり動画の FPS が 30 なのではないかと思います
|
Re: 再生速度が1未満の時のTellMovieToGraph ( No.2 ) |
- 名前:ゆのみ 日時:2017/11/30 12:54
管理人様、返信ありがとうございます。
なるほど、動画のFPSによって同じ値が帰ってくる事がある仕様なのですね……
前回書き方が悪かったので訂正しますと、TellMovieToGraph関数の戻り値を使って他の画像を動かす処理を行っています。
15FPSで動いて困っているのは動画ではなくそっちの画像です。
…0.5倍速で見た目60FPSだと、動画は120FPS必要ということになりますが、容量的にちょっとこれは困るので
再生してからの時間をキッチリと出す方法があればいいなと思っています。
動画のFPSが取得できればTellMovieToGraph関数で何フレーム連続して同じ値が帰るのかわかるため、
補正が効くと思うのですが、Dxlibにそのような関数はありますでしょうか?
|
Re: 再生速度が1未満の時のTellMovieToGraph ( No.3 ) |
- 名前:yumetodo 日時:2017/12/01 20:19
>動画のFPSが取得できれば
それFPSが固定の(CFR)場合はいいですが変動する(VFR)場合どうするんですか・・・?
|
Re: 再生速度が1未満の時のTellMovieToGraph ( No.4 ) |
- 名前:管理人 日時:2017/12/02 00:48
GetOneFrameTimeMovieToGraph という関数で1フレーム辺りの時間( 単位:マイクロ秒 )を取得できます
// 動画ファイルの1フレームあたりの時間を取得する
// 戻り値:1フレームの時間( 単位:マイクロ秒 )
LONGLONG GetOneFrameTimeMovieToGraph( int GraphHandle ) ;
ので、以下の式でFPSを求めることができます
int FPS = ( int )( 1000000 / GetOneFrameTimeMovieToGraph( MovieGraphHandle ) ) ;
ただ、yumetodoさんも仰られていますが圧縮率やFPSを一つの動画内で動的に変化させている動画や、
動画のファイルフォーマットによっては1フレームあたりの時間を取得することができませんのでご了承ください m(_ _;m
|
Re: 再生速度が1未満の時のTellMovieToGraph ( No.5 ) |
- 名前:ゆのみ(解決) 日時:2017/12/03 17:04
管理人様、yumetodo様、返信ありがとうございます。
FPSが変動する動画ファイルを使わないようにして、管理人様の教えてくれた方法で実装してみます。
ありがとうございました。
|