我想為我的應用程式產生 gif 預覽,並使用 FFMPEG 將其製作在我的伺服器上。
它應該為每個影片產生一個 10 幀的 gif,但如果可能的話,不使用臨時目錄(或與每個幀相關的臨時檔案)。
關於這個答案超級用戶網站,它應該使用每一幀生成一個 gif,這不是我需要的。
看起來很奇怪,但我需要的效果是你可以在許多色情網站上看到的效果(我不記得這些是什麼)
答案1
如果我理解正確的話FFmpeg Wiki 上的這篇文章名為“每 X 秒影片建立一個縮圖”表明 FFmpeg 不能做你想要它做的事情(沒有一些自動計算)。
維基百科說這是你最好的鏡頭 - 它會為原始影片的-vf "fps=fps=XYZ"
每一幀創建一個縮圖/幀。XYZ
如果您確實想要每個影片 10 張圖片並且它們都有不同的長度,您可以先讀取總幀數,然後使用腳本計算所需的 fps:
XYZ=wanted_frames_times_actual_fps/total_frames_of_vid
在您的情況下,例如(PAL)或(NTSC),其中wanted_frames_times_actual_fps
表示小時,表示分鐘,表示秒,表示幀(在最後計算的秒之後)。10*25
10*30
total_frames_of_vid=(hh*3600+mm*60+ss)*25+ff
hh
mm
ss
ff
計算範例:每秒 25 幀的時間碼01:35:45:24
(或用 FFmpeg 的術語,因為 FFmpeg 不使用幀而是毫秒)相當於總共 143649 幀。01:35:45.960
這個解決方案可以很好地工作- 您只需要找到一種方法來獲取視頻的總時間(例如通過ffprobe)及其fps(如果您無法獲得正確的時間碼),然後將該信息存儲為名為的變數$total_frames_of_vid
。
我在 Wiki 的“另請參閱”部分中找到了另一種方法,連結到 名為「使用 FFmpeg 的影片的有意義的縮圖」的超級用戶問題建議使用:
ffmpeg -hide_banner -i <YOUR_VIDEO> -vf "select=gt(scene\,0.8)" -frames:v 10 -vsync vfr -vf "fps=fps=1/200" -y out%03d.png
(我稍微修改了程式碼 - 將圖像編解碼器更改為 PNG 並更改了-frames:v
和 的值fps
。還更改了輸出圖像的名稱中包含三位數字。)
然後將它們重新編碼為您的 GIF。
這個解決方案還需要一些計算或體力勞動,因為所有選項的值(特別是fps
需要根據視頻的長度進行更改。即,我嘗試了超級用戶的原始代碼和 35 分鐘的視頻,但只得到了 5 幀) 。