asciinema:终端操作录制神器

1,283 阅读2分钟

前言

今天发现一个神器asciinemac,是一种轻量级的纯文本方式的终端记录工具。可以方便地记录终端操作,并可以以动画的形式分享。官方的slogan:

Record and share your terminal sessions, the right way.

支持的平台:

  • Linux
  • macOS
  • *BSD

asdf-vm工具的使用为例,体验下效果:

怎么工作的?

asciinema项目由三部分组成:

  • asciinema,命令行工具,用于记录终端操作
  • asciinema.org,管理和分享记录作品
  • javascript播放器

当在终端中运行asciinema rec命令时,asciinema开始记录终端中正在执行的命令和命令的执行结果。当记录完成后,使用Ctrl-D或输入exit结束录制,然后可选择上传录制结果到asciinema.org或生成到本地。

安装asciinema

使用Pip安装:(需要Python 3)

sudo pip3 install asciinema

使用Homebrew安装:

brew install asciinema

源码方式安装:

git clone https://github.com/asciinema/asciinema.git
cd asciinema
python3 -m asciinema --version

更多安装方式:安装方法

asciinema 使用方法

asciinema rec [fileName]

asciinema记录命令,文件名参数是可选的。当输入文件名时,退出录制时将保存记录文件至本地,否则,退出录制时会提醒选择上传至asciinema.org或保存至本地。

$ asciinema rec demo.cast
asciinema: recording asciicast to demo.cast
asciinema: press <ctrl-d> or type "exit" when you're done

退出录制:

$ exit
asciinema: recording finished
asciinema: asciicast saved to demo.cast

asciinema play [fileName]

重放已经记录的操作。

重放本地文件:

asciinema play demo.cast

重放远程文件:

asciinema play https://asciinema.org/a/jMRNwCJnmJ7UpU8Y7HxJmcoU8

asciinema cat [fileName]

一次性打印整个文件的记录结果至终端。

asciinema cat demo.cast

asciinema upload [fileName]

上传录制好的文件至asciinema.org, 然后就可以在asciinema.org上维护录制记录,便于观看和分享。

asciinema upload demo.cast

如果发布前review下效果,可通过这三步操作完成录制和上传:

  • asciinema rec demo.cast
  • asciinema play demo.cast
  • asciinema upload demo.cast

asciinema auth

将你的install ID 和 asciinema.org 账号关联. 如果想在asciinema.org管理你的录制作品,比如改变标题、主题等,需要做账号关联操作。

如何分享

已上传至asciinema.org的录制可以通过几种形式分享。

链接分享

https://asciinema.org/a/jMRNwCJnmJ7UpU8Y7HxJmcoU8

嵌入image至html或markdown

HTML:

<a href="https://asciinema.org/a/jMRNwCJnmJ7UpU8Y7HxJmcoU8" target="_blank"><img src="https://asciinema.org/a/jMRNwCJnmJ7UpU8Y7HxJmcoU8.svg" /></a>

Markdown:

[![asciicast](https://asciinema.org/a/jMRNwCJnmJ7UpU8Y7HxJmcoU8.svg)](https://asciinema.org/a/jMRNwCJnmJ7UpU8Y7HxJmcoU8)

嵌入播放器

<script id="asciicast-jMRNwCJnmJ7UpU8Y7HxJmcoU8" src="https://asciinema.org/a/jMRNwCJnmJ7UpU8Y7HxJmcoU8.js" async></script>

生成gif和mp4

如果前面所述的分享方式不支持的情况下,为便于分享,可借助其他工具生成更通用的gif和mp4。

生成gif

需要安装工具asciicast2gif,然后设置主题、播放速度、输出文件名等,执行命令即可。

$ asciicast2gif
asciicast2gif - Generate GIF animations from asciicasts (asciinema recordings)

usage: asciicast2gif [-t theme] [-s speed] [-S scale] [-w columns] [-h rows] <input-json-path-or-url> <output-gif-path>

options:
  -t <theme>        color theme, one of: asciinema, tango, solarized-dark, solarized-light, monokai (default: asciinema)
  -s <speed>        animation speed (default: 1)
  -S <scale>        image scale / pixel density (default: 2)
  -w <columns>      clip terminal to specified number of columns (width)
  -h <rows>         clip terminal to specified number of rows (height)
~/code/github asciicast2gif -s 2 demo.cast demo.gif                     
==> Loading demo.cast...
==> Spawning PhantomJS renderer...
==> Generating frame screenshots...
==> Combining 36 screenshots into GIF file...
==> Done.

生成mp4

需要安装工具ffmpeg,将上步中的gif文件转为mp4,执行命令即可。

usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
 ffmpeg -i demo.gif demo.mp4