Linux

FFMpeg : 將影片文件轉換為包含來自影片的多個圖像的 gif

  • May 18, 2016

我正在開發一個使用者可以上傳影片的項目。FFmpeg有什麼辦法可以從影片中獲取一些圖像並從中創建一個GIF嗎?

由於該項目是用 Java 編寫的,我有一種方法可以從影片中獲取圖像,但創建 GIF 需要多個圖像,而且成本很高。

該伺服器執行的是 Debian X64 系統,所以如果 FFMpeg 不適合,我願意接受 Linux 上可以有效執行此操作的其他工具。

我使用vlclinux 從影片中提取場景。如果沒有,請使用

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命令起作用,您必須指定一個時間片來從中提取幀。

引用自:https://unix.stackexchange.com/questions/278365