-1

特定のfpsでフレームカウントをタイムコードhh:mm:ss:ffに変換するために、C ++で最適なソースコード/アルゴリズムを探しています。25fps...

このコードは非常に優れています - http://www.andrewduncan.ws/Timecodes/Timecodes.html (ページの下部) ですが、高価です - 4 つの mod 操作と 6 つの div 操作が含まれています。

すべてのフレームでタイム コードを表示する必要があるため、このアルゴリズムの計算には時間がかかる場合があります。

もちろん、計算を避けるために評価されたタイムコードを保存することもできます。

しかし、より良いアルゴリズムを知ることは非常に役立ちます...

よろしくお願いします。

4

4 に答える 4

6

一般的な経験則: ビデオ プレーヤーを含む画像処理システムでは、ピクセルごとに 1 回実行される操作に汗を流し、画像の「パッチ」(通常はピクセルの行) ごとに 1 回実行される操作に汗を流します。フレームごとに 1 回実行されるものに汗をかく必要はありません。

その理由は、ピクセルごとのものはパッチごとのものよりも数百倍、おそらく数千倍も実行され、パッチごとのものはフレームごとのものよりも数百倍、おそらく数千倍も実行されるからです。 .

これは、ピクセルごとの処理がフレームごとの処理の何百万回も実行される可能性があることを意味します。ピクセルごとに 1 つの命令を実行すると、フレームごとに数百万の命令が必要になる場合があり、フレームごとに数百、さらには数千の命令が、ピクセルごとの命令カウントに対してノイズ フロアで失われます。

つまり、MOD と DIV を購入する余裕があるということです。

そうは言っても、mod や div を実行する代わりに、カスタム カウンターを実行するのが合理的かもしれません。

于 2011-11-22T16:12:33.250 に答える
2

First of all, the question might better be optimal code for conversion between seconds to hours, minutes, seconds. At this point, if frames come in order, you can simply use addition to increase the previous time.

于 2011-11-22T16:02:59.270 に答える
2

まず、特に問題が発生していない限り、おそらくこれを最適化する必要はないという点については、他のすべての人に同意します。ただ、方法を探すのは楽しいので、分割数を減らすために私が一目見たものをあげます。

seconds = framenumber div 30
minutes = seconds div 60
hours = minutes div 60
frames = frameNumber mod 30
seconds = seconds mod 60
minutes = minutes mod 60
hours = hours mod 24

コードの行数は増えますが、分割は少なくなります。基本的に、秒、分、時間は同じ計算を使用するため、次の計算式の結果を使用します。

于 2011-11-22T16:09:00.623 に答える
1

mod および div 操作 (小さな定数値への) は、事前に計算された逆数への乗算によって効果的に実行される場合があります。だから彼らは高価ではありません。

于 2011-11-22T16:04:55.600 に答える