是否可以使用 FFMPEG 建立一系列持續時間較短的圖片?

是否可以使用 FFMPEG 建立一系列持續時間較短的圖片?

最簡單的投影片只是一系列圖片,每張圖片的顯示時間相同。

我還想製作一個序列,但在持續時間方面更複雜:

我希望第一張圖片的持續時間為 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 來控制持續時間減少的速度。較高的值將以較慢的速度減少持續時間。

相關內容