Linux動態gif圖的錄制
前幾天寫了兩篇博客vim的配置和Vim的自動代碼補全插件YCM的安裝和配置,反響還不錯。為了演示效果,想着錄制幾張動態的gif效果圖。抽空錄制了幾張,但是在Linux下錄制的過程並不是一帆風順。最開始想用大家推薦的byzanz,但是我在ubuntu13.04使用unity桌面(非gnome),byzanz依賴於gnome-panel, 所以只能在命令行下通過參數操作使用,很不方便。后來自己通過使用recordmydesktop錄制成ogv視頻再使用convert轉換制作成gif。特將其注意事項記錄下。不知道其他博友們再Linux下制作動態gif圖片有啥推薦。
byzanz的安裝與使用
Ubuntu下安裝
sudo add-apt-repository ppa:fossfreedom/byzanz
sudo apt-get update
sudo apt-get install byzanz
你可以通過如下命令來完成錄制過程:
byzanz-record -d 40 -x 0 -y 0 -w 400 -h 320 byzanz-demo.gif
其中:
- -d 40 為錄制的時長為 40 秒
- -x 0 錄制區域的橫坐標
- -y 0 錄制區域的縱坐標,記住:屏幕右上角為原點(0,0)
- -w 400 錄制區域的寬度
- -h 320 錄制區域的高度
byzanz-demo.gif 保存的文件名
詳細參數可通過byzanz-record --help查看。
我使用unity桌面的ubuntu下不能使用byzanz的圖形界面。即使是通過sudo apt-get install gnome-session-fallback
並注銷選擇gnome桌面來安裝byzanz也不能啟用byzanz的圖形界面。圖形界面使用byzanz制作gif可以看參考部分的連接
recordmydesktop再convert成gif
recordmydesktop是一款著名的錄屏工具。它有gtk版本。使用很方便
- 安裝
sudo apt-get install imagemagick mplayer gtk-recordmydesktop
- 使用
gtk-recordmydesktop
錄制並保存文件為 out.ogv - 執行如下命令將 out.ogv 分解成單幀圖片
mplayer -ao null out.ogv -vo jpeg:outdir=.
- 執行如下命令將單幀圖片壓縮成 gif 圖片
convert *.jpg out.gif
- 執行如下命令將 gif 圖片進行壓縮
convert out.gif -fuzz 10% -layers Optimize optimized.gif
第5步的壓縮效果很好,我做的一個能將一個30多M的壓縮成900多k
- 注意事項:
通過上述第4步產生的out.gif如果太大,在第5步中進行壓縮優化時會出現
convert.im6: UnableToAcquireString `Cannot allocate memory' @ fatal/string.c/AcquireString/135.
錯誤。
小一點的不會出現這個錯誤。
我的解決方法比較笨。就是將第3步產生的單張jpg圖片分成幾個部分分別壓縮成gif圖片,這樣每個gif圖片都不會太大,再經過第5步壓縮優化后合並成一個gif圖片。例如我在錄制這里的時長1分多鍾的vim的配置效果圖時,分解成單張的jpg圖片有600多張,直接將他們壓縮成gif圖片大小有80多M,在進行第5步壓縮優化時就會出現`Cannot allocate memory'錯誤,我是將這600多張圖分成2部分(前300張和后面300多張)分別壓縮成2個gif圖片,這樣再壓縮優化時就不會分配內存出錯。再將這兩張合成一張。
在將ogv視頻合成gif圖片時我也嘗試過使用QGifer,但轉換的質量效果沒有使用convert的好,且壓縮比率也沒convert高
參考資料
RECORD YOUR LINUX DESKTOP IN AN ANIMATED GIF WITH BYZANZ