Scripting
是否可以使用 FFMPEG 創建一系列持續時間較短的圖片?
最簡單的幻燈片只是一系列圖片,每張圖片都顯示相同的時間。
我也想製作一個序列,但在持續時間方面更複雜:
我希望第一張圖片的持續時間為 1 秒,下一張不到一秒,下一張甚至更短,這樣序列開始緩慢,到最後變得更快。
我不知道該怎麼做,我唯一能猜到的是,每張圖片的持續時間可以通過一個函式來計算,比如
duration = 1/picture_number duration = 1 - (picture_number/picture_total)
或在腳本中:
duration=1 while [duration > 0] do duration=duration*0.99 done
這可以在單個命令中完成。基本方法是從幻燈片開始,其中每個圖像具有相同的持續時間,然後使用選擇過濾器從每個連續圖像的顯示時間中修剪出更大的數量。
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 秒的初始持續時間開始,您可以將 framerate 更改為
1/3
並將 select 更改為lt(mod(t,3),3-floor(t/3)/25)
。您需要更改 25 以控制持續時間減少的速度。較高的值將以較慢的速度減少持續時間。