1)CMTimeMake(1,10)
は、1秒の持続時間と10または10フレーム/秒のタイムスケールを意味します。これは、10フレームのビデオの1秒間を意味しますか?
2)
CMTime lastTime=CMTimeMake(1,10);
CMTime frameTime=CMTimeMake(1, 10);
CMTime currentTime=CMTimeAdd(lastTime, frameTime)
=(2、10)?
2秒のビデオと、1秒あたり10フレームのcurrentTimeですか?
1)CMTimeMake(1,10)
は実際には値1とタイムスケール10を意味します。これらは分子と分母であるため、1秒ではなく1/10秒です。
2)結果はCMTimeMake(2, 10)
のようになります。これは2/10秒です。
ピーターは正しい。次のコードは、概念をより明確にします。
1)
Float64 seconds = 5;
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale);
CMTimeShow(inTime);
上記のコードは次のとおりです。{3000/600 = 5.000}
これは、合計フレーム数が5秒で、3000フレームで毎秒600フレームのタイムスケールを意味します。
2)
int64_t value = 10000;
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMake(value, preferredTimeScale);
CMTimeShow(inTime);
これは{10000/600 = 16.667}を与えます
これは、1秒あたり600フレームのタイムスケールを持つ10000フレームで、16.667秒の合計期間を意味します。
CMTimeMake(int64_t value、int32_t timescale)とCMTimeMakeWithSeconds(Float64 seconds、int32_t preferredTimeScale)の違いに注意してください。
この説明がお役に立てば幸いです。さらに明確にするために、この投稿にさらに質問を投稿することをheしないでください。
CMTimeMake(A, B)
では、有理数、正確な端数A / B
秒を保存します
CMTimeMake(1, 4)
->時間間隔0.25秒CMTimeMakeWithSeconds(A, B)
を使用すると、A
secondsをB
ステップの解像度で保存できます
CMTimeMakeWithSeconds(0.25, ...)
->時間間隔0.25秒通常、CMTimeMakeWithSeconds(time, NSEC_PER_SEC)
が表示されます。 NSEC_PER_SEC
は実質的に「最大解像度」を意味します。
1秒(私のように)の間隔の作り方のみを知りたい場合、これがあなたの答えです:
int seconds = 1;
CMTime interval = CMTimeMakeWithSeconds(seconds, NSEC_PER_SEC);
CMTime構造体はlength of time that is stored as rational number.
を表し、CMTimeは値とタイムスケールフィールドを持ち、時間値/タイムスケール秒を表します。