FFMPEGを使用して短期間の一連の画像を生成できますか?

FFMPEGを使用して短期間の一連の画像を生成できますか?

最も簡単なスライドショーは、それぞれ同じ時間に表示される一連の写真です。

また、シーケンスを作成したいが、期間の面でより複雑です。

最初の画像の持続時間は1秒で、次の画像は1秒より少し短く、次の画像は短く、シーケンスが遅くなり、最後に行くほど速くなりたいです。

どうすればいいのかわかりません。私が推測できる唯一のことは、各写真の持続時間は次の関数で計算できることです。

duration = 1/picture_number
duration = 1 - (picture_number/picture_total)

またはスクリプトから:

duration=1
while [duration > 0]
do
duration=duration*0.99
done

答え1

これは単一のコマンドで行うことができます。基本的なアプローチは、各画像の持続時間が同じスライドショーで始まり、選択フィルタを使用して各連続画像の表示時間でより多くの時間を切り取ることです。

ffmpeg -framerate 1 -i img%d.jpg \
       -vf fps=25,select='lt(mod(t,1),1-floor(t)/25)',setpts=N/25/TB \
       out.mp4

-framerate 1-->最初に画像が反転する速度を制御します。

fps=25-->最終フレームレートを設定します。また、これには作業するフレームワークが必要です。

select='lt(mod(t,1),1-floor(t/1)/25)'--> 1秒ごとに1フレームずつ減少します。

setpts=N/25/TB-->選択したフレームのタイムスタンプを連続して作成します。それ以外の場合、ffmpeg は間隔を埋め、目標を達成するためにフレームをコピーします。

初期期間の3秒から始めるには、フレームレートをに変更し、1/3選択項目をに変更しますlt(mod(t,3),3-floor(t/3)/25)。持続時間が減少する速度を制御するには、25を変更する必要があります。値が高いほど、持続時間が遅い速度に減少します。

関連情報