對于經(jīng)常要寫開發(fā)教程和攻略來說,GIF動圖能增強不少說明力。問題是,錄制視頻再轉GIF太麻煩,直接用一些GIF錄屏也躲不過圖片體積太大:動輒好幾MB這一關。
所以這時候我們就要讓流行的asciinema命令上場了。它能輕松錄制你在終端里的所有操作,把所有動作保存為JSON文檔,而不是真的錄制視頻,所以文件都極其小。要播放的話可以直接用它的命令播放。要轉換GIF的話有相關的轉換器,轉換后體積都不會比直接錄制屏幕大。

Mac安裝:
$ brew install asciinema
Pip安裝:
$ pip install asciinema
錄屏:
$ asciinema rec <output-file-name>
其中可以指定輸出文件的名字,擴展名可以是*.json,*.cast都行,隨意。
本質上文件是一個JSON格式的數(shù)據(jù)集,記錄了每個步驟細節(jié)。如果不指定文件名也可以,程序會自動生成一個文件,并顯示輸出的文件路徑。
所以,程序制成的格式是不能用視頻播放器或GIF播放器播放的,只能用asciinema程序播放。
播放:
$ asciinema play </path/to/file>
按Ctrl-c退出播放。
附加/覆蓋:
# 在已經(jīng)錄制的文件后附加錄制內容:
$ asciinema rec <output-file-name> --append
# 覆蓋已經(jīng)錄制的文件
$ asciinema rec <output-file-name> --overwrite
對Tmux錄屏
對一個Tmux錄屏,需要先退出tmux,然后通過asciinema進入tmux的指定session進行錄制。
如下:
$ asciinema rec --command "tmux attach -t session-name"
錄制結束后,不要直接Ctrl-D退出,而是先prefix-d退出Tmux,再Ctrl-c結束錄制。
asciinema轉換為GIF圖片
有時候我們需要把錄屏結果顯示到網(wǎng)頁上,那么就需要轉換為GIF圖片了。
asciinema程序自身沒有轉換功能,但是官方開發(fā)了一個NodeJS版本的程序用來轉換:
參考:asciinema/asciicast2gif
前提是本機已經(jīng)安裝:NodeJS,ImageMagick和giflossy (或gifsicle)。
Mac安裝過程:
brew install ImageMagick gifsicle node
npm install --global asciicast2gif
轉換:
$ asciicast2gif </path/to/INPUT.json> </path/to/OUTPUT.gif>
如:

轉換過程很慢,但是文件非常小,遠比自己直接錄屏要小很多。
比如下面的GIF,直接視頻錄屏轉GIF的文件是7M左右,通過減少幀率和顯示效果文件在1M左右,而用asciinema轉換為GIF超清晰原畫,只有237Kb??梢娨话摺?/p>


有時候如果文件比較大,可以選擇在轉換前選擇降低顯示效果。
asciicast2gif降低效果的方法是設置Environment Variable環(huán)境變量GIFSICLE_OPTS。比如:
$ export GIFSICLE_OPTS="-k 16 -O3"
$ asciicast2gif </path/to/INPUT.json> </path/to/OUTPUT.gif>
# or
GIFSICLE_OPTS="-k 16 -O3" asciicast2gif </path/to/INPUT.json> </path/to/OUTPUT.gif>