私は s のリストを持っていますKeyframe
。これは TimeSpans を持つオブジェクトと、 という独自の timeSpan の目盛りを持つフィールド (タイプ long)tempTicks
です。完全なリストはキーフレーム 1 ~ 7000 です。
また、ほぼすべてのキーフレームのタイムスタンプが以前のものよりも大きくなっています。 これらのキーフレームを 300 ~ 800 から取得し、それらに 0 ティックから始まる新しい TimeSpan を与えたいと考えています。
List<Keyframe> region = new List<Keyframe>();
long highestTicks = 0;
long durationTicks = 0; //Stores the whole duration of this new region
//beginFrame and endFrame are 300 and 800
for (int i = beginFrame; i < endFrame; i += 1)
{
//Clip is the full list of keyframes
Keyframe k = clip.Keyframes[i];
if (region.Count < 1)
{
k.Time = TimeSpan.FromTicks(0);
}
else
{
//This is the trouble-part
if (k.Time.Ticks > highestTicks)
{
highestTicks = k.Time.Ticks;
k.Time =
TimeSpan.FromTicks(highestTicks - region[region.Count -1].tempTicks);
}
}
durationTicks += k.Time.Ticks;
region.Add(k);
}
この方法では、すべてを正しく取得することはできません。理由がわかりますか?
例:映画の好きなシーンを撮る。最初に撮影した場所の 87:00 からではなく、メディア プレーヤーの 0:00 からシーンが始まるようにエクスポートしたいとします。