Linux
FFMpeg : 將影片文件轉換為包含來自影片的多個圖像的 gif
我正在開發一個使用者可以上傳影片的項目。FFmpeg有什麼辦法可以從影片中獲取一些圖像並從中創建一個GIF嗎?
由於該項目是用 Java 編寫的,我有一種方法可以從影片中獲取圖像,但創建 GIF 需要多個圖像,而且成本很高。
該伺服器執行的是 Debian X64 系統,所以如果 FFMpeg 不適合,我願意接受 Linux 上可以有效執行此操作的其他工具。
我使用
vlc
linux 從影片中提取場景。如果沒有,請使用apt-get install vlc
安裝它。安裝後,您可以使用以下命令行的變體從影片中提取幀。預設圖像格式是
png
,它對我的目的有好處。如果您堅持使用gif
圖像,我建議安裝imagemagick
用於圖像格式轉換。這是提取幀的命令:cvlc ${videofile} \ --video-filter=scene \ --vout=dummy \ --start-time=${start-sec} --stop-time=${end-sec} \ --scene-ratio=1 --scene-prefix=${prefix} \ --scene-path=${MyStorePath} \ vlc://quit
在哪裡
videofile
是一個mp4格式的影片。其他格式可能是可能的,但沒有測試
start-sec
是你希望你的幀抓取開始的地方,從開始的幾秒鐘內開始
end-sec
是您希望幀抓取結束的地方,從開始的幾秒鐘內開始。必須大於start-sec
prefix
是擷取圖像的文件名前綴。
MyStorePath
是您要儲存擷取的圖像的路徑。此命令可幫助您計算影片長度:
ffmpeg -i ${vidfile} 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
輸出
HH:MM:SS.xx
格式。以秒為單位將其轉換為影片長度,我使用l=$(ffmpeg -i ${vidfile} 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//) h=$(echo $l|cut -d: -f1) m=$(echo $l|cut -d: -f2) s=$(echo $l|cut -d: -f3|cut -d"." -f1) (( hh=$h*3600 )) (( mm=$m*60 )) (( LengthSeconds=$hh+$mm+$s ))
此時,您可以操縱
LengthSeconds
變數來自動確定開始和結束時間。不幸的是,要使我的vlc
命令起作用,您必須指定一個時間片來從中提取幀。