简体   繁体   English

通过编辑文件加速 ASCIInema

[英]Speed-up ASCIInema by editing file

I'm using ASCIInema .我正在使用ASCIInema
And I try to speed it up.我尝试加快速度。 asciinema --speed solves this problem. asciinema --speed解决了这个问题。 But how to set the speed in the file.cast itself, so that it could be published and the user can execute asciinema play without an additional parameter?但是如何在file.cast本身中设置速度,以便它可以发布并且用户可以在没有附加参数的情况下执行asciinema play

To make the speed change persistent you need to adjust the timing of each event in the cast file.为了使速度变化持续存在,您需要调整投射文件中每个事件的时间。

jq based solution proposed by @kyb is one way. @kyb 提出的基于 jq 的解决方案是一种方法。 Another is to re-record the cast with this command:另一种是使用以下命令重新录制演员表:

asciinema rec -c 'asciinema play -s 4 file.cast' faster-file.cast

This will create a new recording, but instead of recording a new interactive shell it will record the sped up playback of the old cast.这将创建一个新的录音,但不是录制新的交互式 shell,而是录制旧演员的加速播放。

You don't need jq for this, however the downside is that it's not instant - it takes as much time as the playback at a desired speed.您不需要 jq ,但缺点是它不是即时的 - 它需要与以所需速度播放一样多的时间。

I found a simple way: edit file with jq :我找到了一个简单的方法:用jq编辑文件:

  • in bash在 bash

     cat file.cast | { read; echo "$REPLY"; jq -c '.[0]=.[0]/4'; } > fast.cast
  • in fish在鱼

    cat file.cast | begin read; echo "$REPLY"; jq -c '.[0]=.[0]/4'; end > fast.cast

read stands to read first line which contains json object - short description about this cast, this object should not be passed to jq . read代表读取包含 json 对象的第一行 - 关于此强制转换的简短描述,不应将此对象传递给jq jq processes arrays, zeroth element is timestamp, to speed up payback script divides every timestamp by a specified ratio, here it is 4 . jq处理数组,第零个元素是时间戳,为了加快回报脚本将每个时间戳除以指定的比率,这里是4

example例子
file.cast

{"version": 2, "width": 182, "height": 28, "timestamp": 1566499237, "env": {"SHELL": "/usr/local/bin/fish", "TERM": "xterm-256color"}}
[0.027813, "o", "\u001b]1337;RemoteHost=kyb@kyb-mbo.local\u0007\u001b]1337;CurrentDir=/Users/kyb/devel/git-rev-label\u0007\u001b]1337;ShellIntegrationVersion=6;shell=fish\u0007"]
[0.046757, "o", "\u001b]1337;RemoteHost=kyb@kyb-mbo.local\u0007\u001b]1337;CurrentDir=/Users/kyb/devel/git-rev-label\u0007"]
[0.050038, "o", "\u001b]0;fish /Users/kyb/devel/git-rev-label\u0007\u001b[30m\u001b(B\u001b[m"]
[0.058719, "o", "\u001b[?2004h"]
[0.162696, "o", "\u001b]0;fish /Users/kyb/devel/git-rev-label\u0007\u001b[30m\u001b(B\u001b[m"]
[0.162909, "o", "\u001b[38;5;237m⏎\u001b(B\u001b[m                                                                                                                                                                                     \r⏎ \r\u001b[K"]
[0.164234, "o", "\u001b]133;D;0\u0007\u001b]133;A\u0007\u001b[44m\u001b[30m ~/d/git-rev-label \u001b[42m\u001b[34m \u001b[42m\u001b[30m➦ d0e4dc8   \u001b[30m\u001b(B\u001b[m\u001b[32m \u001b[30m\u001b(B\u001b[m\u001b]133;B\u0007\u001b[K"]
[2.316447, "o", "g"]
[2.316686, "o", "\b\u001b[38;5;167mg\u001b[30m\u001b(B\u001b[m"]
[2.318507, "o", "\u001b[38;5;246mit rev-label\u001b[12D\u001b[30m\u001b(B\u001b[m"]
[2.43537, "o", "\u001b[38;5;167mi\u001b[38;5;246mt rev-label\u001b[11D\u001b[30m\u001b(B\u001b[m"]
[2.464359, "o", "\u001b[38;5;167mt\u001b[38;5;246m rev-label\u001b[10D\u001b[30m\u001b(B\u001b[m"]
[2.464657, "o", "\b\b\b\u001b[38;5;176mgit\u001b[38;5;246m rev-label\u001b[10D\u001b[30m\u001b(B\u001b[m"]
[2.599488, "o", "\u001b[38;5;176m \u001b[38;5;246mrev-label\u001b[9D\u001b[30m\u001b(B\u001b[m"]
[2.599678, "o", "\b \u001b[38;5;246mrev-label\u001b[9D\u001b[30m\u001b(B\u001b[m"]
[2.737237, "o", "r\u001b[38;5;246mev-label\b\b\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[2.737514, "o", "\b\u001b[38;5;110m\u001b[4mr\u001b[38;5;246m\u001b[24mev-label\b\b\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[2.817482, "o", "\u001b[38;5;110m\u001b[4me\u001b[38;5;246m\u001b[24mv-label\b\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[3.033631, "o", "\u001b[38;5;110m\u001b[4mv\u001b[38;5;246m\u001b[24m-label\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[3.033812, "o", "\b\b\b\u001b[38;5;110mrev\u001b[38;5;246m-label\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[3.951287, "o", "\u001b[38;5;110m-label\u001b[30m\u001b(B\u001b[m"]
[4.581453, "o", "\r\n"]
[4.581681, "o", "\u001b[30m\u001b(B\u001b[m\u001b[?2004l"]
[4.58185, "o", "\u001b]133;C;\u0007"]
[4.582158, "o", "\u001b]0;git /Users/kyb/devel/git-rev-label\u0007\u001b["]
[4.582306, "o", "30m\u001b(B\u001b[m\r"]
[4.689255, "o", "brantozyabra-c136-gd0e4dc8\r\n"]
[4.690204, "o", "\u001b]1337;RemoteHost=kyb@kyb-mbo.local\u0007\u001b]1337;CurrentDir=/Users/kyb/devel/git-rev-label\u0007"]
[4.690383, "o", "\u001b[?2004h"]
[4.772316, "o", "\u001b]0;fish /Users/kyb/devel/git-rev-label\u0007\u001b[30m\u001b(B\u001b[m"]
[4.772502, "o", "\u001b[38;5;237m⏎\u001b(B\u001b[m                                                                                                                                                                                     \r⏎ \r\u001b[K\u001b]133;D;0\u0007\u001b]133;A\u0007\u001b[44m\u001b[30m ~/d/git-rev-label \u001b[42m\u001b[34m \u001b[42m\u001b[30m➦ d0e4dc8   \u001b[30m\u001b(B\u001b[m\u001b[32m \u001b[30m\u001b(B\u001b[m\u001b]133;B\u0007\u001b[K"]
[6.901142, "o", "\r\n\u001b[30m\u001b(B\u001b[m\u001b[30m\u001b(B\u001b[m"]
[6.901321, "o", "\u001b[?2004l"]

fast.cast

{"version": 2, "width": 182, "height": 28, "timestamp": 1566499237, "env": {"SHELL": "/usr/local/bin/fish", "TERM": "xterm-256color"}}
[0.00695325,"o","\u001b]1337;RemoteHost=kyb@kyb-mbo.local\u0007\u001b]1337;CurrentDir=/Users/kyb/devel/git-rev-label\u0007\u001b]1337;ShellIntegrationVersion=6;shell=fish\u0007"]
[0.01168925,"o","\u001b]1337;RemoteHost=kyb@kyb-mbo.local\u0007\u001b]1337;CurrentDir=/Users/kyb/devel/git-rev-label\u0007"]
[0.0125095,"o","\u001b]0;fish /Users/kyb/devel/git-rev-label\u0007\u001b[30m\u001b(B\u001b[m"]
[0.01467975,"o","\u001b[?2004h"]
[0.040674,"o","\u001b]0;fish /Users/kyb/devel/git-rev-label\u0007\u001b[30m\u001b(B\u001b[m"]
[0.04072725,"o","\u001b[38;5;237m⏎\u001b(B\u001b[m                                                                                                                                                                                     \r⏎ \r\u001b[K"]
[0.0410585,"o","\u001b]133;D;0\u0007\u001b]133;A\u0007\u001b[44m\u001b[30m ~/d/git-rev-label \u001b[42m\u001b[34m \u001b[42m\u001b[30m➦ d0e4dc8   \u001b[30m\u001b(B\u001b[m\u001b[32m \u001b[30m\u001b(B\u001b[m\u001b]133;B\u0007\u001b[K"]
[0.57911175,"o","g"]
[0.5791715,"o","\b\u001b[38;5;167mg\u001b[30m\u001b(B\u001b[m"]
[0.57962675,"o","\u001b[38;5;246mit rev-label\u001b[12D\u001b[30m\u001b(B\u001b[m"]
[0.6088425,"o","\u001b[38;5;167mi\u001b[38;5;246mt rev-label\u001b[11D\u001b[30m\u001b(B\u001b[m"]
[0.61608975,"o","\u001b[38;5;167mt\u001b[38;5;246m rev-label\u001b[10D\u001b[30m\u001b(B\u001b[m"]
[0.61616425,"o","\b\b\b\u001b[38;5;176mgit\u001b[38;5;246m rev-label\u001b[10D\u001b[30m\u001b(B\u001b[m"]
[0.649872,"o","\u001b[38;5;176m \u001b[38;5;246mrev-label\u001b[9D\u001b[30m\u001b(B\u001b[m"]
[0.6499195,"o","\b \u001b[38;5;246mrev-label\u001b[9D\u001b[30m\u001b(B\u001b[m"]
[0.68430925,"o","r\u001b[38;5;246mev-label\b\b\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[0.6843785,"o","\b\u001b[38;5;110m\u001b[4mr\u001b[38;5;246m\u001b[24mev-label\b\b\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[0.7043705,"o","\u001b[38;5;110m\u001b[4me\u001b[38;5;246m\u001b[24mv-label\b\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[0.75840775,"o","\u001b[38;5;110m\u001b[4mv\u001b[38;5;246m\u001b[24m-label\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[0.758453,"o","\b\b\b\u001b[38;5;110mrev\u001b[38;5;246m-label\b\b\b\b\b\b\u001b[30m\u001b(B\u001b[m"]
[0.98782175,"o","\u001b[38;5;110m-label\u001b[30m\u001b(B\u001b[m"]
[1.14536325,"o","\r\n"]
[1.14542025,"o","\u001b[30m\u001b(B\u001b[m\u001b[?2004l"]
[1.1454625,"o","\u001b]133;C;\u0007"]
[1.1455395,"o","\u001b]0;git /Users/kyb/devel/git-rev-label\u0007\u001b["]
[1.1455765,"o","30m\u001b(B\u001b[m\r"]
[1.17231375,"o","brantozyabra-c136-gd0e4dc8\r\n"]
[1.172551,"o","\u001b]1337;RemoteHost=kyb@kyb-mbo.local\u0007\u001b]1337;CurrentDir=/Users/kyb/devel/git-rev-label\u0007"]
[1.17259575,"o","\u001b[?2004h"]
[1.193079,"o","\u001b]0;fish /Users/kyb/devel/git-rev-label\u0007\u001b[30m\u001b(B\u001b[m"]
[1.1931255,"o","\u001b[38;5;237m⏎\u001b(B\u001b[m                                                                                                                                                                                     \r⏎ \r\u001b[K\u001b]133;D;0\u0007\u001b]133;A\u0007\u001b[44m\u001b[30m ~/d/git-rev-label \u001b[42m\u001b[34m \u001b[42m\u001b[30m➦ d0e4dc8   \u001b[30m\u001b(B\u001b[m\u001b[32m \u001b[30m\u001b(B\u001b[m\u001b]133;B\u0007\u001b[K"]
[1.7252855,"o","\r\n\u001b[30m\u001b(B\u001b[m\u001b[30m\u001b(B\u001b[m"]
[1.72533025,"o","\u001b[?2004l"]

The tool asciinema-edit seems to do just that (among other post-processing of asciinema recordings).工具asciinema-edit似乎就是这样做的(以及对 asciinema 录音的其他后处理)。 From the README:从自述文件:

EXAMPLES:
   Make the whole cast ("123.cast") twice as fast:

     asciinema-edit speed --factor 2 ./123.cast

   Cut the duration in half:

     asciinema-edit speed --factor 0.5 ./123.cast

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM