不少人腦中可能已經浮現出 Photoshop, GIF Animator, FormatFactory 等軟件
但以上軟件都不是能在 Linux 上執行的軟件,若果要在 Linux 截取影片製作成 GIF 動態圖片,又有沒有方法?
Linux 上製作 GIF 並不簡單,因為 Linux 暫時並未有獨立軟件可以直接從影片轉換 GIF 的方法
要在 Linux 上進行處理,需要:
1. 從影片截取指定範圍
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh70Ivn7po-_gt1xsoN4cH4rCM-1r_CCCEuxwsvlgwhjwSSrhRJjwNVcn4HbImtn2b_MfyOykJkjHVdxvwUHrNjruYtKDvvPDEuQpZMFFAyaXn4l57NwH6nOS6LqoOCrHfE26MbU4yYVbc/w600/make-gif-01.png)
需要轉換的影片
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY5PUPgpjcytNiHbkCW8IuzVVYL1iWZtrTo3Eo0gwtl6mE6AQapevTenlZkZs1vFTj9owiYuPFNWeDufPUUtzRXx2oxBKNuEX4MNHl5vx7mnwsekjt4kDduAMZ1LhqwOYYp2N5Xb7Uby4/w600/make-gif-02.png)
使用 Avidemux 截取指定範圍
Avidemux 是其中一種影片轉換軟件,而且是開源、免費及跨平台軟件
2. 將截取的範圍轉換成連續圖片
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8zRCtYN2Bu06cw6twMNrPYY1fBDhpEKapoSVZ-zEdiRei_GxGk3uotcAr4dKnh9BMjIDNqAf4adiWYQiHpQnyQUxq0bCjOpyUbz8JI3UUiesi0CfTsdG-qkHMqGVPjg_0h0YDRbawQKI/w600/make-gif-03.png)
利用 FFmpeg 將截取的範圍轉換成連續圖片
使用指令
ffmpeg -i video capture-%3d.pngffmpeg 中
-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 便可以簡化步驟
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD2PWqgj4uZtRAl-86KzJ1ky0nLXeWUgOBdHFZ1bl_NZZfQCKlt_XY3sw0jIw-b5Y-zLxPhSPc1WV2y2e0yxBT4ojGXeNpkPguGMrHNGQSDXUg3U2_mtSNYy8nZze46RpyS9ve5ajHftM/w600/make-gif-04.png)
輸出後的連續圖片
3. 將連續圖片合成
在 Linux 中可以使用 ImageMagick convert 指令很方便地將連續圖片合成
convert -delay 2 capture-*.png capture.gif-delay 2 為圖片與圖片之間的延遲時間,以百分秒計算
capture-*.png 為連續圖片
capture.gif 為輸出的 GIF 動態圖片
或使用 GIMP
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz2PZ0rgiRQKWyxr7fc5ZGk9tzb1BRakb1K75baUKHMsdP4mhJOGw-QQ-i8NRtxkKMv7QzX1das6oPSkZ1n1LOBrFPlxSdlgmcGlDXOnRWcLE0ICxohCD_apKD2FIGfb3pTEcwFeMLhJM/w600/make-gif-05.png)
將連續圖片匯入至 GIMP
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLtwJqHcr8k_OFnVWh9c1iwC3-X1ayATkcMp6KOS5bavK4xB9psbR_hhxiS2w3x0zZUayyksGWKDvntN25OyRl0MhzGJljHOSBr7sUh4OI98v9Q_qz88XgY5VNO0RtEYcQgoYHMEyAB2w/w600/make-gif-06.png)
在圖層中列出匯入的圖片
留意,若需要將連續圖片轉換成 GIF 動態圖片
最底的圖層是第一畫格,最頂的圖層是最後畫格,次序是由下至上排列
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo3gFkflkIQ1yEQq6_BTusPHRbEvYpXXfavL9wFgTGHZhe5SxqfDtNn9RRapWwkP94LqlKYIRbOEiwctxqCFBCpDSpG4pJEuYHe6cQobh1BKKC6PfvNe0l-jhm9Fm_do26Mh5cUgJBzkQ/w600/make-gif-07.png)
匯出圖片,並給予 gif 的副檔名
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheNunYIIoRR561zf2R3la75XRkQUjCA_lcXLAP2qlbvhlm8IfpzBfqT0czWpBwKrEUilC8NC0gsFbQWLiFXktBaQMu11WZ5E5sphIsSmKsnXTqokvx6w-3iXv00uX1Hdts1HcW1s78uWY/w600/make-gif-08.png)
點選 As animation 以匯出具動態的 GIF
而延遲則以毫秒(即千分秒)計算
這設定需要留以,若圖層上沒有指定延遲時間,則會將此數值套用之全部圖片中
若要指定某些圖片的延遲時間,只需要在圖層加上 (?ms) 即可
例如圖層是 capture-001.png 將圖層改為 capture-001.png (1000ms)
capture-001.png 便會延遲 1000毫秒(即1秒),指定延遲時間會比選項的時間優先
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhylRSX7mLTUNS_Q2ks_Zd7YKvbHzVdml5ctyYm2Kbq8YG1YqUpzqK7XPyQEKJeUYvfNyix_zqdfgcyb4L5d3PzfdEx5W5CnvqjD2tXq2Nu3rBdY8G3qu6koQkgKiqTueaz-jocixno1fg/s600/JakeHandStrike.gif)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiShPL3TFLPphJ_xWcpv1N0iAYFdoldrIHMpvX6-7BX2Bo4_KwbSdMndkGA0hAAAeRKGaa5VruafgxLHmSR6c_Ug5H7ddsgX9NHPI5jbcEvZ-3niiDiP9TXucMvmMZXdVlz5ggnxzdorgI/w600/capture.gif)
處理後的結果
左邊為 ImageMagick convert 進行最後合成步驟,右邊為 GIMP
以 ImageMagick convert 輸出能較保持連續圖片原來的品質
而以 GIMP 輸出則比連續圖片原來的品質為差
沒有留言 :
張貼留言