サーバーに大量の画像が保存されており、MySQL データベースに参照があるため、特定の日付/時刻から画像を簡単に照会できます。
画像は 1 時間あたり 7 枚の間隔で撮影されます。
過去 4 日間のタイムラプスを作成し、5 秒のムービーを作成するとします。フレームを均等にドロップして、希望の長さの 5 秒にする方法を計算するにはどうすればよいですか?
これは私がこれまでに得たものです。
合計画像: 4 日 * 24 時間 * 7 画像/時間 = 672 画像 24 fps で必要な画像: 24 * 5 = 120 画像
必要な画像で合計画像を分割して、保持する必要があるフレームを見つけます
672 / 120 = 5.6
次に、672 個の画像すべてをループし、5 回目または 6 回目ごとに画像への参照を配列に格納します。
これが私の問題です。切り上げると必要以上に長いビデオになり、切り下げると短いビデオになります。
ループ時に 5 枚ごとの画像を保持する場合: 134 画像 / 24 fps = 5.6 秒のビデオ ループ時に 6 枚ごとの画像を保持する場合: 112 画像 / 24 fps = 4.6 秒のビデオ
それを改善し、画像を均等にスキップすることは可能ですか?
PHPでxxfelixxxの回答を使用してこれを解決しましたPHP のコードは次のとおりです。
$start = 1;
$stop = 672; // Total Images
$dur = 5; // Video Duration
$n = 24 * $dur; // Required frames - 24 FPS * Duration
$next = $start;
$step = ( $stop - $start ) / $n;
$frames = array();
for ($i = 1; $i <= $n; $i++) {
$frames[] = round($next);
$next += $step;
};
var_dump($frames);