
最簡單的投影片只是一系列圖片,每張圖片的顯示時間相同。
我還想製作一個序列,但在持續時間方面更複雜:
我希望第一張圖片的持續時間為 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)'
--> 從每一秒開始,減少一格。
setpts=N/25/TB
--> 使所選幀的時間戳連續,否則 ffmpeg 將複製幀來填補空白並達不到我們的目標。
要從 3 秒的初始持續時間開始,您可以將幀速率變更為1/3
並將選擇變更為lt(mod(t,3),3-floor(t/3)/25)
。您需要更改 25 來控制持續時間減少的速度。較高的值將以較慢的速度減少持續時間。