FFmpeg續篇:截取視頻片段轉成GIF動畫

前段時間寫過一篇文章,介紹了FFmpeg的幾個常用的命令行。最近,項目裏需要做一個把視頻片段轉成GIF動畫的功能,便於用戶分享到微博。驚奇地發現,原來強大的FFmpeg是支持的!

可以簡單地執行下面的命令行:

ffmpeg -ss 25 -t 10 -i D:\Media\bear.wmv -f gif D:\a.gif

意思是:D:\Media目錄下的源文件bear.wmv,從第25秒的位置開始,截取10秒長度的視頻轉成GIF文件,保存爲D:\a.gif

想要知道FFmpeg到底支持哪些格式嗎?執行ffmpeg –formats即可。發現gif赫然在列,放心了!

問題來了,你的源文件可能是1080P的高清視頻,幀率可能還比較高。爲了便於網絡分享,GIF文件最好小一點。於是,我們需要使用-s參數來進行圖像的縮放,使用-r參數來限制目標文件的幀率。命令行如下:

ffmpeg -ss 25 -t 10 -i D:\Media\bear.wmv -s 320x240 -f gif -r 1 D:\b.gif

把b.gif拖進瀏覽器預覽,結果發現:雖然幀率降到了1 fps(從源視頻裏每隔一秒抽取一幀圖像輸出到目標文件),整個動畫播放還是持續了10秒鐘,看着很揪心!能不能在源視頻跳幀的情況下同時提高GIF的播放速率呢(比如說在2秒內播完)?查了一遍FFmpeg的說明文檔,似乎沒有哪個參數可以快速達到這樣的目的。也罷,那就分兩步走吧:

首先,執行ffmpeg -ss 25 -t 10 -i D:\Media\bear.wmv -r 1 -s 320x240 -f image2 D:\foo-%03d.jpeg,從源視頻中每秒鐘抽取一幀圖像,保存爲一系列JPEG文件。然後,再執行ffmpeg -f image2 -framerate 5 -i D:\foo-%03d.jpeg D:\c.gif,將這一系列JPEG圖像合成爲幀率5 fps的GIF文件。Bingo!

上面提到,把GIF文件拖進瀏覽器可以進行預覽。當然,使用ffplay.exe工具也是可以的——命令行:ffplay D:\a.gif

 

 

p.s. 附送一條指令:截取視頻內任意時間點(比如第16.1秒處)的一幀圖像保存爲JPEG文件:ffmpeg -ss 16.1 -i D:\Media\bear.wmv -s 320x240 -vframes 1 -f image2 D:\d.jpeg

發佈了58 篇原創文章 · 獲贊 1581 · 訪問量 156萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章