2013年5月7日星期二

截取影片製作成 GIF 動態圖片

截取影片的一段範圍,儲存成 GIF 動態圖片
不少人腦中可能已經浮現出 Photoshop, GIF Animator, FormatFactory 等軟件
但以上軟件都不是能在 Linux 上執行的軟件,若果要在 Linux 截取影片製作成 GIF 動態圖片,又有沒有方法?

Linux 上製作 GIF 並不簡單,因為 Linux 暫時並未有獨立軟件可以直接從影片轉換 GIF 的方法
要在 Linux 上進行處理,需要:

1. 從影片截取指定範圍


需要轉換的影片


使用 Avidemux 截取指定範圍
Avidemux 是其中一種影片轉換軟件,而且是開源、免費及跨平台軟件

2. 將截取的範圍轉換成連續圖片


利用 FFmpeg 將截取的範圍轉換成連續圖片
使用指令
ffmpeg -i video capture-%3d.png
ffmpeg 中
-i video 為輸入的影片
output-%3d.png 為輸出,根據副檔名自動編碼
%3d 是一種與 C 的 printf 一樣的輸出格式,%3d 為十進位值,不足 3位數 則在左方補 0
若連續圖片數量相當多,可以將 3 改成更大的數值
其實 FFmpeg 都可以截取範圍
ffmpeg -i video -ss h:m:s.ms -t h:m:s.ms capture-%3d.png
-ss 為開始時間
-t 為影片長度,不是結束時間,所以需要計算
當中的 h 為小時(最多2位值), m 為分鐘(最多2位值), s 為秒(最多2位值), ms 為毫秒(最多3位值)
若果知道截取的開始時間及長度,直接用 FFmpeg 便可以簡化步驟


輸出後的連續圖片

3. 將連續圖片合成
在 Linux 中可以使用 ImageMagick convert 指令很方便地將連續圖片合成
convert -delay 2 capture-*.png capture.gif
-delay 2 為圖片與圖片之間的延遲時間,以百分秒計算
capture-*.png 為連續圖片
capture.gif 為輸出的 GIF 動態圖片

或使用 GIMP


將連續圖片匯入至 GIMP


在圖層中列出匯入的圖片
留意,若需要將連續圖片轉換成 GIF 動態圖片
最底的圖層是第一畫格,最頂的圖層是最後畫格,次序是由下至上排列


匯出圖片,並給予 gif 的副檔名


點選 As animation 以匯出具動態的 GIF
而延遲則以毫秒(即千分秒)計算
這設定需要留以,若圖層上沒有指定延遲時間,則會將此數值套用之全部圖片中
若要指定某些圖片的延遲時間,只需要在圖層加上 (?ms) 即可
例如圖層是 capture-001.png 將圖層改為 capture-001.png (1000ms)
capture-001.png 便會延遲 1000毫秒(即1秒),指定延遲時間會比選項的時間優先


處理後的結果
左邊為 ImageMagick convert 進行最後合成步驟,右邊為 GIMP
以 ImageMagick convert 輸出能較保持連續圖片原來的品質
而以 GIMP 輸出則比連續圖片原來的品質為差

沒有留言 :

發佈留言